Java--完整版PPT课件,java基础ppt课件
JavaJava1.语言基础2.面向对象3.类的应用4.图形组件5.线程及线程应用6.输入与输出7.Java小应用程序8.Java小游戏的实现9.网络编程10.数据结构1语言基础本章是讲述Java语言的基础语法,要求学生一定掌握。课程内容:1.1Java语言入门1.2标识符、关键字和数据类型1.3运算符,表达式和语句1.4数组2面向对象本章是介绍Java面向对象的概念,讲解面向对象的封装性,多态性和继承性,以及抽象类、嵌套类。课程内容:2.1面向对象的基本概念2.2类与封装2.3static关键字2.4内部类2.5类的继承2.6final关键字2.7抽象类与接口2.8类的多态2.9异常2.10包3类的应用本章是讲解各种常用类的使用课程内容:3.1String类3.2StringBuffer类3.3Calendar类3.4基本类型对象包装类4图形组件本章是了解java的图形组件及事件响应课程内容:4.1图形用户界面概述4.2事件处理4.3图形图像操作4.4常用组件5线程及线程应用本章是了解线程的概念,掌握线程的控制,可以灵活运用线程课程内容:5.1线程的概念5.2线程的使用5.3线程同步6输入与输出本章是了解程序与文件系统的交互方式,可以直接对文件进行读写控制课程内容:6.1File类6.2字节流6.3字符流6.4编码6.5随机文件7Java小应用程序本章是介绍java小应用程序的使用,以及动画的实现课程内容:7.1小应用程序的简介7.2小应用程序的执行过程7.3在小应用程序中的图形和图像控制7.4声音控制8Java小游戏的实现本章是掌握对java小游戏的框架的了解,掌握游戏的编写课程内容:8.1编写游戏9网络编程本章是介绍通过类连接到www,然后讨论如何通过TCP/IP或UDP协议在网络上的两个程序间建立连接并交换数据课程内容:9.1网络概述9.2InetAddress类9.3UDP网络程序9.4TCP网络程序10数据结构本章是了解Java的数据结构,能够灵活应用在游戏编程中课程内容10.1链表10.2堆栈10.3队列10.4递归10.5排序1语言基础1语言基础本章是讲述java语言的基础语法,要求学生一定掌握。课程内容:1.1Java语言入门1.2标识符、关键字和数据类型1.3运算符,表达式和语句1.4数组1.5方法的封装1.1Java语言入门1.1.1Java特点1.1.2Java语言编程过程1.1.3Java的开发环境1.1.4Java程序开发基本过程1.1.5Java虚拟机的运行过程1.1.1Java特点简单面向对象与平台无关健壮性(Java的强类型机制、异常处理、内存的自动收集等)1.1.2Java语言编程过程Java源程序(.java)Java字码文件(.class)Java编译程序Java虚拟机(JVM)执行Window下的字节码解释程序Linux下的字节码解释程序Window操作系统Linux操作系统1.1.3Java的开发环境Java开发环境的搭建(1)什么是JDK(2)设置环境变量1.1.3Java的开发环境什么是JDKsun公司将java的开发工具和运行环境所涉及到的应用程序和相关文件放在一起,称之为JDK(javadevelo1.1.3Java的开发环境JDK的安装目录JDK的目录结构(1)bin目录javacjava(2)demo目录1.1.3Java的开发环境何为环境变量:在操作系统中定义,可以被操作系统上运行的的应用程序访问的变量查看环境变量:在命令行窗口中直接键入set查看所有的环境变量:键入set+变量名查看该变量的值――――――我的电脑属性高级环境变量:1.1.3Java的开发环境设置环境变量在命令行窗口中键入set变量名=变量值设置环境变量(不能键入空格),键入set变量名=,取消环境变量(注:在命令行窗口中设置的环境变量只对该命令行窗口起作用)――――――在我的电脑属性高级环境变量(注:在这里设置的环境变量对以后启动的所有应用程序和命令行窗口都起作用,但不会影响已启动的应用程序和命令行窗口,在用户窗口中设置的环境变量1.1.3Java的开发环境环境变量path当我们执行某个命令时,操作系统首先会在当前目录下查找该命令,如果没有找到这个命令程序,操作系统则会沿着path中所指定的目录依次查找,以最先找到的为准查看当前使用的JDK版本:java–version1.1.4Java程序开发基本过程Java编程基础编译Java程序运行Java程序Java注释使用Java文档1.1.4Java程序开发基本过程Java编程基础Java的基本语法格式:所有的java程序都应该写在类中<修饰符>class<类名>{[<属性声明>][<构造器声明>][<方法声明>]}类的修饰符:public和默认修饰符1.1.4Java程序开发基本过程编译Java程序Javac运行Java程序Java1.1.4Java程序开发基本过程Java注释单行注释//多行注释/文档注释/1.1.4Java程序开发基本过程使用Java文档生成Java文档1.1.4Java程序开发基本过程使用Java文档HTML网页:优点:更新速度快缺点:不支持模糊查询chm格式的文档优点:支持模糊查询缺点:更新速度稍慢生成Java文档1.1.5Java虚拟机的运行过程:加载代码:类装载器(classloader)校验代码:字节码验证器(ByteCodeVerifier)执行代码:解释器(Interpreter)1.2标识符、关键字和数据类型1.2.1标识符1.2.2关键字1.2.3数据类型1.2.4常量1.2.5变量1.2.6类型转换1.2.1标识符标识符命名规则定义:Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符规则:标识符应以字母,下划线,美元符号开头标识符应以字母,下划线,美元符号或数字组成标识符对大小写敏感,长度无限止合法的标识符:Indentifier、username、user_name、_userName、$username非法的标识符:class、98.3、HelloWorld1.2.2关键字abstractdoimplementprivatethisbooleandoubleimportprotectedthrowbreakelseinstanceofpublicthrowsbyteextendintreturntransientcasefalseinterfaceshorttruecatchfinallongstatictrycharfianllynativestrictfpvoidclassfloatnewsupervolatilecontinuefornullswitchwhiledefaultifpackagesynchronized注:java无sizeof,goto,const关键字,但不能用gotoconst作为变量名1.2.3数据类型数据类型基本数据类型引用数据类型类接口数组数值型字符型(char)布尔型(boolean)整数型(byteshortIntlong)浮点型(float,double)1.2.4常量常量:就是持续不变的值常量类型:整型常量:十进制(12),十六进制(0x12),八进制(012)长整型常量:13L浮点数常量:(1)单精度浮点数,.4f,2e3f,0f(2)双精度浮点数5.1,.4,2e-3,0d布尔常量:1.2.4常量字符常量:‘a’‘,8’,'\u0027'‘\r‘表示接受键盘输入,相当于按下了回车键;‘\n‘是换行;‘\t‘是制表符,相当于table键;‘\b‘是退格键,相当于BackSe\nXXX“null常量:null常量只有一个值,用null表示,表示对象的引用为空1.2.5变量变量概念变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。先声明,再使用变量的元素变量名,变量值,变量的作用范围变量定义intx=0,y;y=x+3;x和y就是变量1.2.5变量变量字节大小及有效取值范围byte占用一个字节,数字大小为-27—27-1short占用两个字节,数字大小为-215—215-1int占用四个字节,数字大小为-231—231-1long占用八个字节,数字大小为-263—263-1float占用四个字节,-45~+38,-45~+38。用二进制的指数形式表示一个浮点数的格式,如:10122,1012-31.2.5变量变量作用域变量要先定义,后使用,但不是在变量定义后的语句中一直都能使用前面定义的变量。比如:可以用大括号将多个语句包起来形成一个复合语句,则复合语句中定义的变量只能在定义它的复合语句中使用。局部变量在方法或方法中的代码块中定义的变量称为局部变量1.2.5变量局部变量的定义在方法或方法中的代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。局部变量的初始化局部变量在进行取值操作前必须被初始化,否则会出现编译错误1.2.6类型转换自动类型转换(也叫隐式类型转换)byteb=3;intx=b;//b被自动转换为int型强制类型转换(也叫显式类型转换)bytea;intb;a=(byte)b;//b被强制转换为byte型1.3运算符,表达式和语句1.3.1运算符1.3.2表达式1.3.3控制语句1.3.1运算符何为运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符类型算术运算符赋值运算符比较运算符逻辑运算符1.3.1运算符1.3.1运算符算术运算符的注意问题“+”除字符串相加功能外,还能把非字符串“转换成字符串,如:x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。“对于除号/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。int1.3.1运算符赋值运算符1.3.1运算符赋值运算符注意:注1:在JAVA里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于=,-=,/=依此类推。1.3.1运算符比较运算符1.3.1运算符比较运算符注意:注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2“:比较运算符==”“不能误写成=”1.3.1运算符逻辑运算符1.3.1运算符逻辑运算符注意点注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2“:&”“和&&”的区别在于,如果使“用前者连接,那么无论任何情况,&”两边的表达式都会参与计算。如果使用后者“连接,当&&”的左边为false,则将不会“计算其右边的表达式。”“和”的区别与“&”“和&&”的区别一样。1.3.1运算符位运算符任何信息在计算机中都是以二进制的形式保存的,&,,^除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。只有参加运算的两位都为1,&运算的结果才为1,否则就为0。只有参加运算的两位都为0,运算的结果才为0,否则就为1。只有参加运算的两位不同,^运算的结果才1.3.1运算符移位运算符<<左移>>右移>>>无符号右移1.3.1运算符移位运算的注意事项及小技巧移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。对于long型整数移位时a>>b,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a>>1;在1.3.1运算符高低运算符的优先级1.3.1运算符编程技巧运算符的优先级顺序不用刻意去记,使用括号控制优先级不但能降低编程的难度,而且能增加程序的可读性1.3.2表达式表达式语句:符合一定语法规则的操作数和运算符的序列例:b;b+5;a>10&&b<10表达式的运算顺序先按照运算符的优先级优先级相同的,按照约定的结合方向1.3.3控制语句条件控制语句循环控制语句特殊的循环流程控制1.3.3控制语句条件控制语句Ifelse语句的语法:If(布尔表达式){语句或语句块}If(布尔表达式){语句或语句块}elseif(布尔表达式){语句或语句块}else{1.3.3控制语句switch语句的语法switch(表达式1){case常量1:语句break;case常量2:语句break;default:1.3.3控制语句switch选择语句:switch(x){//x只能为int、byte、char、shortcase1:(“Monday”);break;case2:(“Tuesday”);break;case3:(“Wednesday”);break;default:(“Idon’tknow”);}思考:无break的情况1.3.3控制语句for循环语句for(初始化表达式;布尔值测试表达式;更改表达式){语句或语句块;}例:for(inti=0;i<=10;i++){(“i=”+i);1.3.3控制语句while循环while(布尔值){语句或语句块;}注意:while“表达式的括号后不能加;”,否则会造成不易察觉的无限循环1.3.3控制语句dowhile循环do{语句或语句块;}while(布尔测试)注意:while“表达式的括号后要加;”1.3.3控制语句思考:while循环和dowhile循环的不同之处while循环先判断循环条件,再执行循环体dowhile循环先执行循环体,再判断循环条件1.3.3控制语句break与continue语句break:终止循环体中的执行语句和switch语句,跳转到当前循环的下一条语句continue:只能用于while、dowhile、for语句中,终止当前这次循环,执行下一次循环1.3.3控制语句特殊的循环流程控制break语句do{语句;If(条件为真){break;}语句1.3.3控制语句特殊的循环流程控制continue语句do{语句;If(条件为真){continue;}1.4数组1.4.1声明数组1.4.2创建数组1.4.3数组初始化1.4.4数组中注意的问题1.4.5多维数组1.4.1声明数组声明数组:数组类型数组名Intaa[]Int[]aa1.4.2创建数组创建数组:数组名=new类型名[数组大小]aa=newint[10];数组元素:aa[0]、aa[1]、aa[2]……aa[9]1.4.3数组初始化intia[]={1,2,3,4};int[]ia=newint[]{3,4,5};inta[5];//声明数组时,不能指定其长度,编译时将出错1.4.4数组中注意的问题空指针异常(数组未初始化就使用数组中的元素)数组越界异常如何得到数组长度所有的数组的索引均从0开始1.4.4数组中注意的问题不能改变数组大小可以使用相同的引用变量去引用另一个全新的数组1.4.5多维数组多维数组,类似棋盘。Java中的多维数组,也就是数组的数组,1.4.5多维数组定义多维数组int[][]xx;xx=newint[3][];xx[0]=newint[3];xx[1]=newint[2];1.4.5多维数组多维数组中元素的引用方式,如:x[1][2]。规则矩阵数组可以在一条语句中产生,如:intxx[][]=newint[2][3];多维数组的静态初始化,如:int[][]xx={{3,2,7},{1,5},{6}};1.5方法的封装(功能的封装)1.5.1方法的封装格式1.5.2方法调用的过程分析1.5.3方法的调用1.5.4方法的参数传递1.5.1方法的封装格式返回值类型函数名(参数类型形式参数1,参数类型形式参数2…,.){程序代码return返回值;}形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况1.5.2方法调用的过程分析1.5.3方法的调用方法调用的几种不通情况使用return提前返回1.5.4方法的参数传递基本数据类型的参数传递classain(String[]args){intx=5;change(x);(x);}publicstaticvoidchange(intx){x=3;}}1.5.4方法的参数传递方法的形式参数相当于方法中定义的局部变量方法的形式参数在方法调用结束时被释放,不会影响到主程序中同名的局部变量1.5.4方法的参数传递classain(String[]args){.(obj.x);}publicstaticvoidchange(PassRefobj){obj.x=3;}}课后练习编写程序:输入分数,判断分数的级别,大于等于85,输””出结果优秀,大于等于75,”输出结果良”好,大于等于60,””输出结果及格,否则不及格输入一个数,判断是否被6整除,被6整除,”显示被6”整除,”否则显示不能被6整除循环输入五个数,显示最大数小结1.1Java语言入门1.2标识符、关键字和数据类型1.3运算符,表达式和语句1.4数组1.5方法的封装2面向对象2面向对象本章是介绍Java面向对象的概念,讲解面向对象的封装性,多态性和继承性,以及抽象类、嵌套类。课程内容:2.1面向对象的基本概念2.2类与封装2.3static关键字2.4内部类2.5类的继承2.6final关键字2.7抽象类与接口2.1面向对象的基本概念2.1.1面向对象2.1.2对象2.1.3类2.1.4面向对象的定义2.1.4OOP词汇表2.1.1面向对象面向对象(ObjectOriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。2.1.2对象(1)对象。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。(2)对象的状态和行为。对象具有状态,一个对象用数据值来描2.1.3类类:具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。2.1.3类类的结构。在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。①——“”“一般具体结构称为分类结构,也可以说是或关系,或者是isa”关系。——“”②整体部分结构称为组装结构,它们之间的关系是一种与关系,或“者是hasa”关系。2.1.3类消息和方法对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。2.1.4面向对象的定义简单的说,面向对象设计是一种把重点放在数据(对象)和对象接口上的编程技术从根本上说,只要对象能够满足你的需求,就不必关心它的功能到底如何实现。在面向对象程序设计(OOP)中,唯一关心的就是对象的外在表现词汇表类:class实例:instance封装:encaethod状态:state扩展:extend根超类:cosmicsuperclass继承:inheritance(通过扩展一个类来获得新类)课后练习面向对象的定义?面向对象和面向过程的区别,请举例说明?面向对象的两个注意点?2.2类与封装2.2.1类与对象2.2.2对象的创建、使用,比较2.2.3匿名对象2.2.4类设计2.2.5实现类的封装性2.2.6构造方法2.2.7This引用2.2.8方法的重载2.2.1类与对象类:类就是对某一事务的描述,是抽象的、概念上的定义,如:汽车设计图对象:对象是实际存在的该类事务的个体,也称为实例(instance),如:按汽车设计图设计出来的每一辆汽车2.2.1类与对象类可以将数据和方法封装在一起,数据表示类的属性,方法表示类的行为Class类名{成员属性(成员变量)成员方法}}2.2.1类与对象关于成员变量和局部变量同名的问题class.(“myageis”+age);}}2.2.2对象的创建、使用,比较对象的创建:类名对象名=new类名();例:Personp=newPerson();变量p是person对象的一个应用,在栈内存中通过new关键字创建的person对象在堆内存中2.2.2对象的创、使用,比较对象的使用:对象.属性对象.方法()例:classTestain(String[]args){Personp1=newPerson();Personp2=newPerson();=18;();();2.2.2对象的创建与使用对象只能在其有效的生命周期内被使用:当离开对象所在的代码块后,对象就会变成垃圾设置对象的引用为null,对象也会变成垃圾2.2.2对象的创建、使用,比较对象的比较有两种方式比较对象,即==和equals()方法==用于比较引用是否指向同一个对象equals()用于比较两个对象的内容是否一致2.2.3匿名对象未指定应用的对象即匿名对象Personp=newPerson();();newPerson().shout();用匿名对象改写刚才的程序2.2.3匿名对象使用匿名对象的两种情况如果一个对象只需要进行一次方法调用,那么可以使用匿名对象将匿名对象作为一个参数传递给一个方法,如:publicvoidgetPerson(Personp);getPerson(newPerson());2.2.4类设计识别类的一个简单经验就是寻找问题分析中的名词比如:在订单处理系统中有这样一些名词:订单(order)、送货地址(address)、货款(ent)、帐户(account……)根据这些名词,我们就可以创建order、address、ent、account等类2.2.4类设计确定类中的方法(函数)通过寻找和名词相关的动词来确定方法比如:物品被添加进订单,订单被运送或取消……货款被支付课后练习设计一教学管理系统,要求实现学生信息的管理和课程的管理,请列出所需的类,类的属性及方法2.2.5实现类的封装性封装的定义封装的目的2.2.5实现类的封装性封装的定义将类的成员变量声明为private,再提供一个或多个public方法实现对该成员变量的修改或访问,这种方式称为封装2.2.5实现类的封装性封装的目的隐藏类的实现细节通过定制好的方法访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作(如对数据进行检查)便于修改,增强代码的可维护性2.2.6构造方法构造方法(构造函数、构造器)的定义构造方法特征构造方法为什么类同名构造方法的细节2.2.6构造方法构造方法的定义:是类的一种特殊方法,java中每个类都有构造方法,它的功能是类的实例初始化状态2.2.6构造方法构造方法的特征它具有和类相同的名称它不包含返回值它不能在方法中用return语句返回一个值2.2.6构造方法构造方法为什么和类同名?因为构造方法有java编译器负责调用,编译器必须知道哪个是构造方法,采用与类同名的方式是最简单合理的”,18);都干了什么1.定义一个e="unknown";privateintage=-1;3.执行构造方法中的代码4.把新创建的Person对象赋给p3引用变量2.2.6构造方法构造方法的几个细节每个java类中至少有一个构造方法关于默认构造方法private修饰的构造方法引用this在类内部表示被构造的类对象本身使用this引用的几种情况2.2.8方法的重载(overload)何为方法重载构造器重载成员方法重载2.2.8方法的重载(overload)方法的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。1)方法名相同2)参数必须不同3)返回类型可以相同,可以不相同2.2.8方法的重载(overload)构造方法的重载成员方法的重载课后练习定义一个e参数的构造器和带name、age参数的构造器(需使用this来调用构造器)编程输出2.3static关键字2.3.1静态属性2.3.2静态方法2.3.3static方法的注意点2.3.4静态代码块2.3.5单态设计模式2.3.6理解main方法的语法2.3.1静态属性静态成员变量staticStringcountry=“China”;静态成员变量也称作类成员静态成员变量的两种访问方式类名.成员对象名.成员2.3.1静态属性不能把方法体内的变量声明为staticfun(){staticintI=0;}上诉声明是错误的2.3.1静态属性static变量在类被载入时就存在,被所有的对象实例共享统计产生了多少类的实例对象:classA{privatestaticintcount=0;publicA(){count=count+1;}}2.3.2静态方法静态成员方法也称作类方法使用类名就可以直接调用static方法,不必创建类的实例对象方法的注意点static方法中只能调用同类中的其他static成员(变量或方法),不能访问类中的非静态成员static成员不能以任何方式引用this和suain方法是static的2.3.4静态代码块类中可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块自动被执行,且只执行一次,静态代码块常用来进行类属性的初始化2.3.4静态代码块classStaticCode{staticStringcoutry;{coutry="China";("staiccodeisloading");}}2.3.5单态设计模式单态设计模式:采取一定的方式保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法2.3.5单态设计模式publicclassTestSingle{privatestaticfinalTestSingleonlyOne=newTestSingle();publicstaticTestSinglegetTestSingle(){returnonlyOne;}privateTestSingle();}方法的语法由于Java虚拟机需要调用类的main方法,所以是ain方法是不必创建对象,所以该方法是static的Main方法有一个String类型的数组参数,用来保存执行Java命令时传递给所运行的类的参数方法的语法ain{ain(String[]args){for(inti=0;i<;i++){(args[i]);}}}使用javaTestMain123“1122”运行课后练习写一个程序,统计产生了多少类的实例对象2.4内部类2.4.1内部类的定义2.4.2内部类2.4.3内部类的注意点2.4.4关于static内部类2.4.5内部类中的变量名2.4.6内部类如何被外部类引用2.4.7方法中的内部类2.4.1内部类的定义在一个类内部定义的类就是嵌套类,也叫内部类或内置类内部类可以访问嵌套他的类的成员,包括private的成员,但内部类的成员却不能被嵌套它的类直接访问2.4.1内部类的定义内部类的定义和普通类没什么区别内部类可以被声明为private或protected的2.4.2内部类classOuter{intouter_i=100;voidtest(){Innerin=newInner();();}classInner{//intouter_i=90;voiddis.("display:outer_i"+outer_i);}}}2.4.2内部类classInnerClassDemo{ain(String[]args){Outerouter=newOuter();();}}2.4.2内部类classOuter{intouter_i=100;voidtest(){Innerin=newInner();();}classInner{inty=10;voiddis.("display:outer_i"+outer_i);}}2.4.2内部类voidshowy(){(y);}}2.4.3内部类的注意点内部类可以访问它的外部类的成员,但内部类的成员只有在内部类的范围之内可知,不能被外部类使用2.4.4关于static内部类如果用static修饰一个内部类,这个类就相当于一个外部定义的类static内部类中可声明static成员,非static内部类中不能声明static成员static内部类不能使用外部类的非static成员变量2.4.4关于static内部类classOuter{intouter_i=100;voidtest(){Innerin=newInner();();}staticclassInner{voiddis.("display:outer_i"+outer_i);}}}2.4.5内部类中的变量名方法的局部变量、内部类的成员变量和外部类的成员变量同名的情况publicclassOuter{privateintsize;publicclassInner{privateintsize;2.4.5内部类中的变量名voiddisplay(intsize){size++;//display的形式参数++;//Inner类的成员变量++;//Outer类的成员变量}}}2.4.6内部类如何被外部类引用classOuter{.(++size);}}}2.4.6内部类如何被外部类引用ain(String[]args){Outerouter=newOuter();inner=Inner();();}}2.4.7方法中的内部类内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。如:在方法中,或在for循环体内2.4.7方法中的内部类classOuter{.("display:outer_i"+outer_i);}}Innerinner=newInner();();}}}2.4.7方法中的内部类classInnerClassDemo{ain(String[]args){Outerouter=newOuter();();}}2.5类的继承2.5.1类继承的实现2.5.2类继承的内容2.5.3方法的覆盖2.5.4super关键字2.5.5Object类2.5.1类继承的实现通过继承可以简化类的定义Java只支持单继承,一个子类只能有一个父类classSubclassextendsSuperclass{}2.5.2类继承的内容子类继承父类非私有的成员变量和成员方法,但不继承父类的构造方法,在子类的构造方法中可以用super(参数列表)调用父类的构造方法2.5.2类继承的内容如果子类的构造方法中没有显式地调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法classStudentextendsPerson{publicStudent(){super();//默认调用}}2.5.3方法的覆盖在子类中可以根据需要对从父类中继承的方法进行改造--重写重写方法必须和被重写的方法具有相同的方法名称、参数类表和返回类型重写方法时不能使用比父类方法更严格的访问权限,如:父类的方法是public的,子类的就不能是private的关键字super调用父类的构造器super调用父类的成员类Object类是所有类的父类,所有的Java类都默认继承Object类2.6final关键字2.6.1final关键字修饰类、属性和方法2.6.2final注意点2.6.2final注意点final标记的类不能被继承final标记的方法不能被子类重写final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次final标记的成员变量必须在声明的同时或在类的构造方法中显示赋值2.6.2final注意点final标记的局部变量相当于常量,它的声明周期超出方法的声明周期,可以被内部类访问用publicstaticfinal标记的常量为全局常量练习编程练习内部类的使用编程练习类继承的使用输入5个数到数组中,并对其重小到大排序,打印输出2.7抽象类与接口2.7.1抽象类定义2.7.2抽象方法的定义规则2.7.3接口2.7.4instanceof操作符2.7.1抽象类定义abstractclass类名{abstract方法名(参数列表);abstract方法名(参数列表);}2.7.1抽象类定义Java中可以定义不含方法体的方法,方法体的实现由子类去做,这样的方法就是抽象方法,包含抽象方法的类就是抽象类抽象类中可以由一个或多个抽象方法抽象方法必须用abstract来修饰,带有抽象方法的类必须都声明为抽象类2.7.2抽象方法的定义规则抽象类和抽象方法都必须用abstract修饰抽象类不能实例化,即不能用new产生对象抽象方法只需声明不需实现带有抽象方法的类必须都声明为抽象类,抽象类的子类必须实现所有的抽象方法后才能被实例化,否则子类还是抽象类2.7.3接口如果一个抽象类中的所有方法都是抽象的,那么可以将其定义为接口接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,没有变量和方法的实现2.7.3接口接口继承接口用extends关键字interfaceAnimalextendsRunner{voidbreathe();}2.7.3接口一个类可以在继承一个父类的同时,实现一个或多个接口,extends必须在iments前classStudentextendsentsRunner{...}2.7.3接口访问接口的成员变量类名.变量名对象名.变量名2.7.3接口接口小结实现一个接口就是要实现该接口的所有方法(抽象类除外)接口中的方法都是抽象的一个类可以实现多个接口,但只能继承一个类2.7.4instanceof操作符instanceof判断一个类是否实现了某个接口,也可以判断一个实例对象是否属于一个类语法:对象instanceof类(接口)2.8异常2.8.1何为异常2.8.2try,catch2.8.3throws、throw关键字2.8.4常见异常类2.8.5finally关键字2.8.6异常的细节2.8.1何为异常异常定义了程序中遇到的非致命错误,而不是编译时的语法错误,如:打开一个不存在的文件、数组越界等,catchtry中的代码抛出异常后,程序跳入catch代码块中执行try中发生异常的语句不会执行执行完catch中的代码后程序继续往下执行、throw关键字强制调用语句使用try,catch包裹:在定义会抛出异常的代码时,加上throws关键字throw关键字2.8.4常见异常类ArithmeticException:在算术运算中发生的异常,如除以零NullPointerException:变量还没有指向一个对象,就引用这个对象的成员ArrayIndexOutOfBoundsException:数组越界关键字Try…catch语句后还可以有一个finally语句,finally语句中的代码块不管是否被捕获都要被执行关键字捕获子类异常在前,捕获父类异常在后finally代码块始终会被执行(只有一种例外,(0))2.8.6异常的细节一个方法被重写时,子类方法只能抛出该方法抛出的异常或是该异常的子类如果父类方法抛出多个异常,子类方法只能抛出那些异常的子集,不能抛出新的异常2.9包2.9.1包机制2.9.2父包和子包2.9.3访问控制2.9.1包机制Java引入包(package)机制,提供了类的多层命名空间,便于项目的管理2.9.1包机制包名必须在程序中通过package语句生成,不是把类放到某个文件夹下,这个文件夹就成了该类的包package语句必须为Java源文件的第一条语句,每个源文件只能有一个package语句若无package语句,则为默认无包名2.9.1包机制如:,若要在一个类中同时使用上述两个类,只能通过全限定名引用2.9.2父包和子包父包和子包在使用上没有任何关系,父包要调用子包中的类必须引用子包的全名,不能省略掉父包部分的包名当我们import该包中的子包2.9.3访问控制类成员的访问控制:(1)private:只能在类的内部使用(2)默认访问:即成员方法或变量前没有访问控制符,可以被包中的其他类访问(3)protected:可以被包中的其他类访问,也可以被不同包中的子类访问(4)public:可以被所有的包访问默认访问:只能被同一包中的其他类访问2.9.3访问控制课后练习编写程序编写一个学生类,类中的成员属性有学号,姓名,语文成绩,数学成绩,类中的成员方法实现的功能是根据输入的学生学号,查询学生的姓名以及该生的语文成绩的数学成绩,并输出该生的总成绩.小结2.1面向对象的基本概念2.2类与封装2.3static关键字2.4内部类2.5类的继承2.6final关键字2.7抽象类与接口2.8异常2.9包3类的应用3类的应用本章是讲解各种常用类的使用课程内容:3.1String类3.2StringBuffer类3.3Calendar类3.4基本类型的对象包装类3.1String类3.1.1“+”3.1.2equals和==3.1.3构造方法3.1.4常用方法3.1.1“+”Strings1="x"+4+6Strings2=4+6+"tt";3.1.2equals和==Strings1=“hello”;Strings2=“hello”;Strings1=newString(“hello”);Strings2=newString(“hello”);3.1.3构造方法String()String(byte[]bytes)String(byte[]bytes,intoffset,intlength)String(char[]value)String(char[]value,intoffset,intcount)3.1.4常用方法charAt(intindex)compareToIgnoreCase(Stringstr)copyValueOf(char[]data,intoffset,intcount)endsWith()equals(ObjectanObject)3.1.4常用方法equalsIgnoreCase(StringanotherString)getBytes()indexOf()startsWith()substring(intbeginIndex)toCharArray()toLowerCase()toU()valueOf()3.2StringBuffer类3.2.1String与StringBuffer区别3.2.2StringBuffer构造方法3.2.3StringBuffer的常用方法3.2.1String与StringBuffer区别String类对象的内容一旦被初始化就不能再改变StringBuffer类:内容可以改变的字符串,一旦通过StringBuffer类生成了最终想要的字符串,类3.2.2StringBuffer构造方法StringBuffer()StringBuffer(CharSequenceseq)StringBuffer(intcapacity)StringBuffer(Stringstr)3.2.3StringBuffer的常用方法aToSize()3.3Calendar类3.3.1Calendar构造方法3.3.2Calendar成员方法3.3.1Calendar构造方法Calendar()Calendar(TimeZonezone,LocaleaLocale)3.3.2Calendar成员方法add(intfield,intamount)get(intfield)getFirstDayOfWeek()getInstance()setFirstDayOfWeek(intvalue)3.4基本类型的对象包装类8中基本数据类型都有其对应的包装类booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble课后练习编写程序输入字符串1,再输入字符串2,在字符串1中寻找字符串2的个数输入用户名和密码,若输入正确,”显示合法”的用户,若输入不正确,”显示用户或密码有错,”重新输入,但只有三次输入机会,三次以后若不正确,””显示非法用户小结3.1String类3.2StringBuffer类3.3Calendar类3.4基本类型的对象包装类4图形组件4图形组件本章是了解Java的图形组件及事件响应课程内容:4.1图形用户界面概述4.2事件处理4.3图形图像操作4.4常用组件4.1图形用户界面概述4.1.1代码示例4.1.2用户界面概述4.1.1代码示例ime{ain(String[]args){JFramef=newJFrame("初识GUI");(newButton("e"));(300,300);//设置窗口大小(true);//显示或隐藏窗口}4.1.2用户界面概述GUI组件分为两类:基本组件和容器基本组件:不能容纳其他组件容器:是一种特殊的组件,用来容纳其他组件4.2事件处理4.2.1AWT事件处理4.2.2用事件监听器处理事件4.2.3事件适配器4.2.1AWT事件处理事件:用户对组件的一个操作称为事件事件源:发生事件的组件事件处理器:负责处理事件的方法4.2.2事件监听器处理事件ActionListenerMouseListenerKeyListenerWindowListenerMouseMotionListener4.2.2事件监听器处理事件一个事件源上可注册多种不同的监听器(响应多个事件)一个监听器可以注册到多个事件源上(多个组件相应同一个事件)事件监听器的匿名内部类实现4.2.3事件适配器适配器即实现了事件监听器接口的类(为了简化编程)适配器没有做任何事情4.2.3事件适配器WindowAdaouseAdapter4.3图形图像操作4.3.1图形操作4.3.2图像操作4.3.3双缓冲4.3.1图形操作组件提供一个getGraphics方法,返回一个Graphics类,该类提供了在组件上绘画。打印文字和显示图像等操作4.3.1图形操作drawLinedrawOvaldrawRectdrawRoundRectfill3DRectfillArcfillOvalfillRectfillRoundRect4.3.2图像操作drawImage4.3.3双缓冲双缓冲技术:当窗口重画时需要重绘所有的图形,若图形较多,则速度较慢。所以,对象,当重绘时只需绘制这一个image对象即可,这种技术即为双缓冲技术双缓冲的实现4.4常用组件4.4.1常用组件概述4.4.2常用组件的层次4.4.3容器类4.4.4布局管理4.4.5swing包中的组件介绍4.4.1常用组件概述awt组件Swing组件两者的关系4.4.2常用组件的层次组件不能单独存在,必须添加到容器中ContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayoutComponent4.4.3容器类Window一般很少直接使用Window,而是使用它两个子类Frame和Dialog。Frame是带有标题和边界的容器4.4.3容器类PanelPanel可作为容器容纳其他组件,但不能独立存在,必须被添加到其他的容器中4.4.3容器类ScrollPaneScrollPane是一种容器,不能单独使用,显示较大部件时会出现滚动条ScrollPane中只能放置一个组件,无布局管理器,需放置多个组件时,可将这些组件嵌套在一个Panel中,再将Panel放置到ScrollPane中4.4.4布局管理边框布局流布局网格布局卡片布局取消布局4.4.4布局管理BorderLayoutFrame和Dialog的默认布局管理器就是BorderLayout位置参数严格区分大小写4.4.4布局管理FlowLayout组件从左到右,从上到下依次排列,如果一个组件在本行放不下,则自动换到下一行FlowLayout是Panel和applet的默认布局管理器4.4.4布局管理GridLayoutGridLayout将容器分成若干行列的网格,在容器上添加组件时,会按从左到右、从上到下的顺序在网格中排列4.4.4布局管理CardLayoutCardLayout能够实现将多个组件放在同一容器区域内的交替显示,在任何时候只有最上面的一个可见。CardLayout提供了几个方法,可以显示特定的卡片,也可以按先后顺序依次显示,还可以直接定位到第一张或最后一张4.4.4布局管理取消布局管理可以用绝对坐标的方式来指定组件的位置和大小,在这种情况下,(null)方法来取消布局管理器,方法来设置每个组件的大小和位置4.4.5swing包中的组件介绍Awt的组件都是Component类的子类Swing在应用原理和方式上与Awt类似,学会了Awt,也就学会了Swing,关键是会查JDk文档4.4.5swing包中的组件介绍JFrame方法1.5前的版本中,JFrame上不能直接添加子组件和设置布局管理器,必须调用它的getContentPane方法获得此窗体的contentPane对象,再在contentPane进行相应操作4.4.5swing包中的组件介绍JScrollboboxJList课后练习编写程序实现计算器的功能编写万年历小结4.1图形用户界面概述4.2事件处理4.3图形图像操作4.4常用组件5线程及线程应用5线程及线程应用本章是了解线程的概念,掌握线程的控制,可以灵活运用线程课程内容:5.1线程的概念5.2线程的使用5.3线程同步和通信5.1线程5.1.1线程的概念5.1.2线程的生命周期5.1.1线程的概念进程:在多任务系统中,每个独立执行的程序称为进程线程:一个进程中可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索当程序启动时,就自动产生一个线程,主函数main就是在这个线程上运行的。前面所讲的例子都是单线程的创建多线程有两种方法:继承Thread类和实现Runnable接口5.1.2线程的生命周期新建就绪运行阻塞死亡5.2线程的使用5.2.1创建线程的方法5.2.2使用runnable接口的好处5.2.3启动线程5.2.4前台线程和后台线程5.2.5联合进程与join方法5.2.1创建线程的方法用Thread类创建线程要实现多线程,必须编写一个继承了Thread类的子类,子类要重写Thread的run方法,在run方法中调用想在线程上运行的程序代码5.2.1创建线程的方法使用Runnable接口创建多线程定义一个实现Runnable接口的类并生成实例生成一个Thread的实例将生成的Runnable接口的实例作为参数传递给Thread的构造方法接口的好处可以实现多个线程处理同一资源的情况避免Java单继承性带来的局限代码可以被多个线程共享(即run中的代码)5.2.3启动线程线程启动:start()方法5.2.4前台线程和后台线程对于Java程序,只要有一个前台线程在运行,进程就不会结束;如果一个进程中只有后台线程运行,这个进程就会结束前台线程和后台线程是相对而言的,按前面的方式产生的都是前台进程,如果在调用start方法前调用了setDaemon(true)方法,这个线程就变成了后台线程5.2.5联合进程与join方法voidjoin(longmillis)voidjoin(longmillis,intnanos)这两个方法的作用是指定合并的时间(前者精确到毫秒,后者精确到纳秒),即两个线程合并指定的时间后,又开始分离,回到以前的状态5.3线程同步和通信5.3.1线程同步5.3.2线程通信5.3.3线程死锁5.3.4线程的生命控制5.3.1线程同步破坏线程安全的案例同步代码块的格式:synchronized(object){代码块}object可以是任意一个对象5.3.1线程同步同步通过改变object的锁旗标实现同步会降低程序的性能同步代码块不仅指同一个代码块在多个线程间实现同步,也可以是不同的代码块之间相互同步,只要各synchronized(object)语句中的object是同一个对象5.3.1线程同步同步方法(函数)除了可以对代码块进行同步外,也可以对方法实现同步,只需在要同步的方法定义前加上synchronized关键字即可5.3.1线程同步代码块与函数间的同步同步方法所用的监视器对象是this5.3.2线程通信线程不同步的情况:同步不同的线程:更清晰的代码:5.3.2线程通信线程间的交替调用:wait:使当前线程放弃监视器进入睡眠状态,直到其他线程进入同一监视器并调用notifynotify:唤醒同一监视器对象中调用wait的第一个线程notifyAll:唤醒同一监视器对象中调用wait的所有线程,具有最高级的线程首先被唤醒并执行5.3.3线程死锁案例5.3.4线程的生命控制不推荐使用的终止线程生命的方法:(1)suse:会导致死锁(2)stop:导致数据不完整正确终止线程生命:课后练习编写程序实现人物动画效果编写一个圆绕四周运动小结5.1线程的概念5.2线程的使用5.3线程同步和通信6输入与输出6输入与输出本章是了解程序与文件系统的交互方式,可以直接对文件进行读写控制课程内容:6.1File类6.2字节流6.3字符流6.4编码6.5随机文件6.1File类6.1.1File类的概述6.1.2File类常用方法6.1.1File类的概述File类:代表磁盘文件本身的对象,通过File类的各种方法,可以创建、删除、重命名文件,及判断文件的读写权限是否存在,设置和查询文件的最近修改时间6.1.2File类常用方法创建文件createNewFile()createTeme()getParent()6.2字节流6.2.1概述6.2.2字节流的父类及常用方法6.2.3文件流6.2.4数据流6.2.5缓冲流6.2.6内存读取流6.2.7对象流6.2.1概述IO流分为两类:字节流和字符流字节流:读写二进制数据字符流:读写字符数据输入流:读取数据输出流:写入数据6.2.2字节流的父类及常用方法Inintread():返回下一个输入字节的整型表示,如果返回-1表示遇到流的末尾,结束intread(byte[]b):中并返回实际读入的字节数intread(byte[]b,intoff,intlen):把流中数据读到数组b中从脚标为off开始的len个数组元素6.2.2字节流的父类及常用方法Inintavailable():返回当前输入流中可读的字节数voidmark(intreadlimit):在输入流的当前位置放上一个标志,允许最多再读入readlimit个字节voidreset():把输入指针返回到以前所做的标志处booleanmarkSuark/reset操作就返回true6.2.2字节流的父类及常用方法Out定义了输出流的抽象类,这个类中所以的方法都返回voidvoidwrite(intb):将一个字节写到输出流voidwirte(byte[]b):将整个字节数组写到输出流voidwirte(byte[]b,intoff,intlen):将字节数组b中的从off开始的len个字节写到输出流voidflush():完成输出并清空缓冲区6.2.3文件流FileIn和FileOut用来操作磁盘文件,在创建一个FileIn对象时通过构造器指定文件的路径和名字,这个文件应该是存在和可读的。在创建FileOut是指定文件若存在则将被覆盖6.2.3文件流FileIn的构造器(1)FileInin=newFileIn(“”);(2)Filef=newFile(“”);FileInin=newFileIn(f);FileOut的构造器(1)FileOutin=newFileOut(“”);(2)Filef=newFile(“”);FileOutin=newFileOut(f);6.2.4数据流DataIn类DataIn有与DataOut对应的read方法DataOut类的三种写入字符串的方法(1)PublicfinalvoidwriteBytes(Strings)throwsIOException(2)PublicfinalvoidwriteChars(Strings)throwsIOException6.2.4数据流DataInDataIn只提供了readUTF方法,而没有与DataOut中的writeBytes和writeChars方法对应的read方法,这是因为在一个连续的字节流中读取一个字符串,如果没有特殊的标志作为一个字符串的结尾,而且事先不知道字符串的长度,那么就无法读取这个字符串。在DataOu类中只有wirteUTF方法写入了字符串的长度6.2.4数据流DataOut类PublicfinalvoidwriteBoolean(booleanb)throwsIOExceptionPublicfinalvoidwriteShort(ints)throwsIOExceptionPublicfinalvoidwriteChar(intc)throwsIOExceptionPublicfinalvoidwriteInt(inti)throwsIOException6.2.4数据流DataOut类可以往IO设备中写入各种类型的数据6.2.5缓冲流当一个简单的写请求产生后,数据不马上写到所连接的输出流和文件中,而是高速写入缓存中,当缓存写满或关闭流时,所有的数据再一次性从缓存中写入输出流或文件中,提高写入文件中的效率6.2.5缓冲流BufferedInBufferedIn类可以对任何In进行带缓冲区的封装以达到性能的改善构造器:(1)BufferedIn(Inin)创建一个带32字节缓冲区的缓冲流(2)BufferedIn(Inin,intsize)创建一个带size字节缓冲区的缓冲6.2.5缓冲流BufferedOutBufferedOut有一个flush方法用来将缓冲区的数据全部强制输出构造器(1)BufferedOut(Outout)创建一个带32字节缓冲区的缓冲流(2)BufferedOut(Outout,intsize)创建一个带size字节缓冲区的缓冲流6.2.6内存读取流ByteArrayIn和ByteArrayOut内存虚拟成硬盘上的文件,从而作用这两个流用IO的方式对字节数组内容提供提高程序的效率,如在通过网络发送截屏图像的应用中6.2.6内存读取流ByteArrayIn的构造方法ByteArrayIn(byte[]buf)将数组buf中的数据读入到ByteArrayIn中ByteArrayIn(byte[]buf,intoffset,intlength)将数组buf中的数据(从offset开始的length个元素)读入到ByteArrayIn中6.2.6内存读取流ByteArrayOut的构造方法ByteArrayOut()创建一个32字节的缓冲区ByteArrayOut(intsize)创建一个指定字节(size)的缓冲区注:缓冲区的大小在数据过多时能够自动增长6.2.7对象流ObjectIn和ObjectOut这两个类用于存储和读取对象的流保存了对象的所有成员变量就等于保存了这个对象,读取了一个对象中的所有成员变量就等于读取到了一个对象ObjectIn和ObjectOut用来完成保存和读取对象成员变量,但读写的对象必须实现serializable接口6.2.7对象流序列化使用ObjectIn和ObjectOut保存和读取对象的机制称作序列化ObjectIn和ObjectOut不会保存和读取对象中的transient和static的成员变量6.2.7对象流序列化的优点序列化可以将任何实现了Serializable接口的对象转换成连续的字节数据,这些数据仍可以被还原成原来的对象状态,即使这些数据通过网络传输也没问题序列化可以处理不同操作系统上的差异,windows上创建的对象,序列化后传输到linux上,该对象仍可以被正确重建出来6.3字符流6.3.1字符流概述6.3.2文件流6.3.3缓冲流6.3.4字节流到字符流的转换6.3.5缓冲流的应用6.3.6打印流6.3.7如何判断文件结束6.3.1字符流概述字符:每个字符由一个或多个字节组成,每个字节都是用-128到127之间的部分数值来表示,也就是说,-128到127之间还有一些数据没有对应任何字符的任何字节文本文件:专门用于存储文本字符的数据,没有包含字符外的其他数据,这种文件就是文本文件二进制文件:除文本文件之外的文件就是二进制文件6.3.1字符流概述字符流:Reader和WriterIn和Out是用来处理字节的,在处理字符文本时不太方便Reader和Writer专门用来处理字符(功能和In和Out相似,在处理字符文本时简化了我们的编程)6.3.2文件流FileReaderFileWriter6.3.3缓冲流BufferedReaderBufferedWriter6.3.4字节流到字符流的转换InReader和OutWriter是字节流和字符流之间的转换InReader可将一个字节流中的字节解码成字符OutWriter可将写入的字符编码成字节后写入一个字节流6.3.4字节流到字符流的转换InReader的构造器InReader(Inin)用默认字符集创建一个InReader对象InReader(Inin,StringcharsetName)接受以指定字符集名的字符串,并用该字符集创建InReader对象6.3.4字节流到字符流的转换OutWriter的构造器OutWriter(Outout)用默认字符集创建一个OutWriter对象OutWriter(Outout,StringcharsetName)接受以指定字符集名的字符串,并用该字符集创建OutWriter对象6.3.5缓冲流的应用为了提高效率,应避免频繁的进行字符与字节的相互转换,最好不要直接使用这两个类来进行读写,应尽量使用BufferedWriter包装OutWriter,用BufferedReader包装InReader,如:BufferedWriterout=newBufferedWriter(newOutWriter())BufferedReaderin=newBufferedReader(newInReader())6.3.5缓冲流的应用读取键盘上输入的一整行字符BufferedReaderin=newBufferedReader(newinReader());Stringline=null;try{line=();}catch(IOExce.(line);6.3.6打印流类的一个实例对象的构造器(1)(Outout)(2)(Outout,boolean,autoflush)(3)(Outout,boolean,autoflush,Stringencoding)6.3.7如何判断文件结束文本文件:由于没有编码为-1的字符,所以操作系统使用-1作为文件的结束标志二进制文件:二进制文件的结束标志也是-1,单由于二进制文件中的每个字节可以是-128到127之间的任意取值,所以不能根据-1判断文件的结束。二进制文件的开始有一个文件头指定文件的大小,程序可以通过文件头中的这个大小来判断文件是否结束6.4编码6.4.1编码概念6.4.2不同字符集之间的转换6.4.1编码概念字节用于表示计算机内存中最原始的数据,不会涉及到编码问题,只有把字节中的内容当作字符来处理时,才会涉及编码问题字符集的编码ASCII(AmericanStandardCodeforInformationInterchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。我们知道英文中经常使用的字符、数字符号被计算机处理时都是以二进制码的形式出现的。这种二进制码的集合就是所谓的ASCII码。每一个ASCII码与一个8位(bit)二进制数对应。其最高位是0,相应的十进制数是0-127。如,数“字0”的编码用十进制数表示就是48。另有128个扩展的ASCII码,最高位都是1,由一些制表符和其它符号组成。ASCII是现今最通用的单字节编码系统。GB2312:GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集-基本集》。主要用于给每一个中文字符指定相应的数字,也就是进行编码。一个中文字符用两个字节的数字来表示,为了和ASCII码有所区别,将中文字符每一个字节的最高位置都用1来表示。GBK:为了对更多的字符进行编码,国家又发布了新的编码系统GBK(GBK的K“”是扩展的汉语拼音第一个字母)。在新的编码系统里,除了完全兼容GB2312外,还对繁体中文、一些不常用的汉字和许多符号进行了编码。ISO-8859-1:是西方国家所使用的字符编码集,是一种单字节的字符集,而英文实际上只用了其中数字小于128的部分。字符集的编码Unicode:这是一种通用的字符集,对所有语言的文字进行了统一编码,对每一个字符都用2个字节来表示,对“于英文字符采取前面加0”字节的策略实现等长兼容。如“a”的ASCII码为0x61,UNICODE就为0x00,0x61。UTF-8:Eight-bitUCSTransformationFormat,(UCS,UniversalCharacterSet,通用字符集,UCS是所有其他字符集标准的一个超集)。一个7位的ASCII码值,对应的UTF码是一个字节。如果字符是0x0000,或在0x0080与0x007f之间,对应的UTF码是两个字节,如果字符在0x0800与0xffff之间,对应的UTF码是三个字节。6.4.2不同字符集之间的转换imReader;ain(String[]args){try{InReaderisr=newInReader(,"ISO8859-1");BufferedReaderbr=newBufferedReader(isr);}6.4.2不同字符集之间的转换StringstrLine=();();(strLine);}catch(Exceptione){();}}6.5随机类RandomAccessFileRandomAccessFile“”类支持随机访问方式,可以跳转到文件的任意位置读写数据RandomAccessFile可以以只读或读写方式打开文件newRandomAccessFile(f,”rw”)newRandomAccessFile(f,”r”)当以读写方式打开不存在的文件时,程序会自动创建该文件课后练习编写程序编写记事本程序,完成功能如下新建文件打开文件保存文件剪切、复制、粘贴基本格式的设定:字体,字号,字的颜色小结6.1File类6.2字节流6.3字符流6.4编码6.5随机文件7Java小应用程序7Java小应用程序本章是介绍Java小应用程序的使用,以及动画的实现课程内容:7.1小应用程序的简介7.2小应用程序的执行过程7.3在小应用程序中的图形和图像控制7.4声音控制7.1小应用程序的简介7.1.1小应用程序的简介7.1.2关于Applet不能运行的问题7.1.1小应用程序的简介Aain方法开始Applet是一个GUI程序,在Applet中只能使用drawString()等awt方法打印字符7.1.2关于Applet不能运行的问题工具--Internet选项--高级--选中“”(需重启)7.2小应用程序的执行过程7.2.1小应用程序的执行过程简介7.2.2执行过程中运行的方法7.2.1小应用程序的执行过程简介1.浏览器装载网页并解释其中的内容文件并创建改类的实例对象7.2.2执行过程中运行的方法init()方法:方法进行初始化对象的生命周期中只会被调用一次3.格式:publicvoidinit(){}7.2.2执行过程中运行的方法start()方法:方法后接着会调用这个方法,浏览器离开创建此applet对象的页面后,applet对象不会消失,当浏览器再次回到此页面时,又会调用start方法。如:当网页显示时启动一个音乐进程,离开是停止音乐进程,则启动进程的代码可放入start方法2.格式:publicvoidstart(){}7.2.2执行过程中运行的方法stop方法:方法中适合放置停止只有网页当前被显示时才要保持运行的功能的代码2.格式:publicvoidstop(){}7.2.2执行过程中运行的方法destroy方法所在的浏览器被关闭时,applet对象会被销毁,在applet对象被销毁前,destroy方法会被调用2.格式:publicvoiddestroy(){}7.3Applet中的图形和图像控制paint方法当applet被重画后,paint方法会被调用7.4声音控制getAudioClip(URLurl)newAudioClip(URLurl)7.5Applet的限制不能调用其他的应用程序执行不能进行文件IO操作不能调用本机代码不能与applet所在的主机之外的其他机器进行网络连接课后练习编写程序利用Applet制作一个游戏界面小结7.1小应用程序的简介7.2小应用程序的执行过程7.3在小应用程序中的图形和图像控制7.4声音控制7.5小应用程序的限制8Java小游戏的实现8Java小游戏的实现本章是掌握对Java小游戏的框架的了解,掌握游戏的编写课程内容:8.1编写游戏8.2调试游戏8Java小游戏的实现8.1编写游戏8.2调试游戏课后练习编写一个小游戏小结8.1编写游戏8.2调试游戏9网络编程9网络编程本章是介绍通过类连接到www,然后讨论如何通过TCP/IP或UDP协议在网络上的两个程序间建立连接并交换数据课程内容:9.1网络概述9.2InetAddress类9.3UDP网络程序9.4TCP网络程序9.1网络概述9.1.1Ip地址9.1.2端口号9.1.3TCP和UDP9.1.4TCP、UDP数据包基本格式9.1.5Socket9.1.6包9.1.1Ip地址IP地址用4个字节,32位二进制数来表示,称为Ipv4正在试验和定制Ipv6,即16个字节表示9.1.2端口号一台计算机上可同时运行多个网络程序,IP地址只能保证把数据送到计算机,无法得知把数据交给哪个网络程序,所以每个被发送“”的数据包的头部都包含一个称为端口的部分,表示数据应交给哪个应用程序端口是0-65535间的一个整数,每个网络程序都有一个端口,0-1023端口是一些知名网络程序使用的,用户的普通网络程序应使用1024以上的端口数端口不能被两个或以上的网络程序重用9.1.3TCP和UDPTCissionControlProtocol,用户数据报协议9.1.3TCP和UDPTCPTCPTCP是面向连接的通信协议,提供两台计算机之间的可靠无差错的数据传输应用程序使用TCP通信时,源和目标之间会建立一个虚拟连接9.1.3TCP和UDPUDPUDP是无连接通信协议,不保证数据的可靠传输,但能够向若干目标发送数据,接受发自若干个源的数据9.1.4TCP、UDP数据包基本格式协议类型源IP目标IP源端口目标端口帧序号帧数据9.1.5SocketSocket是网络驱动层提供给应用程序的接口和一种机制,通过一种绑定机制与驱动程序建立关系,包含IP和Port信息发送数据时,应用程序将数据交给Socket,由Socket交给驱动程序向网络上发送接收数据时,计算机从网络上收到与该Socket绑定的IP+Prot相关的数据后,由驱动程序交给Socket,应用程序可从Socket中提取数据9.1.6包Java分别为UDSocket,与TCP对应的是ServerSocket(用于服务器端)和Socket(用于客户端)InetAddressInetAddress是用于表示计算机地址的一个类InetAddress的getByName(Stringhost)方法可根据条件返回一个InetAddress的实例InetAddress的getHostAddress()可返回IP地址字符串9.3UDP网络程序9.3.1数据报通信的概述9.3.2DatagramSocket的构造方法9.3.3关闭Socket9.3.4DatagramPacket的构造方法9.3.5数据的发送和接收9.3.6数据报通信的注意点9.3.1数据报通信的概述DatagramSocket和DatagramSocket好比一个港口,应用程序只要把装着“”数据的集装箱放到港口上就算完成了数据的发送,剩下的工作由驱动程序完成DatagramPacket就是存放数据的集装箱9.3.2DatagramSocket的构造方法DatagramSocket的构造方法:Socket()throwsSocketExceSocket对象时未指定端口号,系统会自动分配一个还没有被使用的端口号,用于编写发送程序9.3.2DatagramSocket的构造方法Socket(intSocket对象时指定一个端口号,用于编写接受程序Socket(intSocket对象时除了指定一个端口号外,还指定了IP地址,适用于由多块网卡的情况,用于编写接受程序9.3.3关闭Socket但不再使用某个Socket时,()方法关闭这个Socket,释放端口号和其他资源9.3.4DatagramPacket的构造方法Packet对象时指定了数据包的内存空间和大小,以及数据包的目标地址和端口,发送数据时用9.3.5数据的发送和接收发送数据:Packetp)throwsIOException9.3.5数据的发送和接收DatagramPacket的getPort()返回端口号9.3.6注意UDP数据发送时不可靠的,数据可能在传输过程中丢失必须先运行UDP接收程序,再运行发送程序UDP接收程序运行到receive方法时将阻塞,直到网络上有数据到来,如果网络上没有数据发送过来,receive方法也没有阻塞,那么通常情况是使用了一个被其他程序占用的端口号9.4TCP网络程序9.4.1TCP概述9.4.2ServerSocket的构造方法9.4.3Socket的构造方法9.4.5TCP服务器和客户端的连接9.4.6完善TCP程序9.4.1TCP概述使用UDP通信的两个程序没有主次之分使用TCP进行通信的两个程序有主次之分,一个是服务器程序,一个是客户端程序9.4.1TCP概述服务器端与客户端的交互过程服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接客户端程序创建一个Socket,并请求与服务器建立连接服务器接受客户的连接请求,并创建一个薪的Socket与该客户建立专线连接刚才建立了连接的两个Socket在一个单独的线程(由服务器程序创建)上对话服务器开始等待新的连接请求9.4.2ServerSocket的构造方法publicServerSocket()throwsIOException未与任何端口号绑定,不能被直接使用,需要继续调用bind方法才能完成和其他构造方法一样的功能publicServerSocket(intport)throwsIOException创建对象时就将ServerSocket和端口号绑定,如果port为0,则系统会自动分配一个未被使用的端口号,但由于作为服务器9.4.2ServerSocket的构造方法publicServerSocket(intport,intbacklog)throwsIOException在第二个构造方法的基础上,根据backlog参数指定,在服务器忙时,可以与之保持连接请求的等待客户数据量publicServerSocket(intport,intbacklog,InetAddressbindAddr)throwsIOException在第三个构造方法的基础上,根据bindAddr指定IP地址,适用于多个网卡的情况9.4.2ServerSocket的构造方法publicSocket()创建的Socket对象不与任何服务器建立连接,不能被直接使用,需调用connect方法才能完成和其他构造方法一样的功能9.4.3Socket的构造方法publicSocket(Stringhost,intport)throwsUnknownHostException,IOExceptionpublicSocket(InetAddressaddress,intport)throwsIOException这两个构造方法创建Socket对象后,会根据参数连接在特定地址和端口上运行的服务器程序,其中host为主机名,address为IP地址9.4.3Socket的构造方法publicSocket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)throwsIOExceptionpublicSocket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)throwsIOException这两个构造方法在前两个构造方法的基础上还指定了本地Socket所绑定的IP地址和端口号,由于客户端的IP地址和端口号选择并不重要,所以一般情况下不使用9.4.4TCP服务器和客户端的连接方法等待客户的连接请求,一旦acce方法返回Socket的输入流对象,的输出流对象。只要连接的一端向该输出流对象写入了数据,连接的另一段就能从其输入流对象中读取这些数据9.4.5完善的TCP服务器程序能接收多个客户的连接请求,为每个客户连接创建一个单独的线程与客户进行对话思路:方法只接收一个连接,所以accept方法需放置一个循环中,这样才能接收多个连接2.每个连接的数据交换代码也放在一个循环中,保证两者能够不停地交换数据3.每个连接的数据交换代码,必须放在独立的线程中运行,否则在这段代码运行期间无法执行其他的程序代码,accept方法也就得不到调用,新的连接无法进入课后练习编写一个简易的聊天程序小结9.1网络概述9.2InetAddress类9.3UDP网络程序9.4TCP网络程序10数据结构10数据结构本章是了解Java的数据结构,能够灵活应用在游戏编程中课程内容10.1链表10.2堆栈10.3队列10.4递归10.5排序10.1链表10.1.1链表概述10.1.2单向链表10.1.3双向链表10.1.4循环链表10.1.5编历链表10.1.1链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据“”需要开辟内存单元。链表有一个头指针变量,以head表示,它存放一个地址。该地址指“”向一个元素。链表中每一个元素称为结点,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又……指向第二个元素;,直到最后一个元素,10.1.2单向链表单向链表的每个结点中除信息域以外还有一个指针域,用来指出其后续结点,单向链表的最后一个结点的指针域为空(NULL)。单向链表由头指针唯一确定,因此单向链表可以用头指针的名字来命名,例如头指针名为head的单向链表称为表head,头指针指向单向链表的第一个结点。10.1.2单向链表•单向链表中插入结点valuekeyvaluekeyvaluekey……parentcurrent首先,找到待插入位置的前继节点parent.然后,.最后,10.1.2单向链表单向链表中删除结点节点删除过程非常简单,只需要将其前继节点的next指向待删除节点的next就可以.除非有必要,需要对删除节点作相应处理,否则等待垃圾回收处理即可valuekeyvaluekeyvaluekey……parentcurrent10.1.3双向链表每个结点中只包括一个指向下个结点的指针域,这种链表称为单向链表。如果要在单向链表一个指针所指的当前位置插入一个新结点,就必须从链表头指针开始逐个遍历直到当前指针所指结点的前一结点,修改这个结点的指针。双向链表的每个结点中包括两个指针域,分别指向该结点的前一个结点和后一个结点。在双向链表中由任何一个结点都很容易找到其前面的结点和后面的结点,而不需要在上述的插入(及删除)操作中由头结点开始寻找。10.1.4循环链表单向链表的最后一个结点的指针域为空(NULL)。如果将这个指针里利用起来,以指向单向链表的第一个结点,就组成一个单向循环链表10.1.5编历链表由于链表是一个动态的数据结构,链表的各个结点由指针链接在起,访问链表元素时通过每个链表结点的指针逐个找到该结—点的下一个结点,直找到链表尾,链表的最后一个结点的指针为空。10.2堆栈10.2.1堆栈的概念10.2.2堆栈的存储方式10.2.3空栈的判断10.2.4满栈的判断10.2.1堆栈的概念堆栈(Stack)是一种比较重要的线性数据结构,如果对数据结构知识不是很了解的话,我们可以把它简单的看作一维数组。但是对一维数组进行元素的插入、删除操作时,可以在任何位置进行,而对于栈来说,插入、删除操作是固定在一端进行的,这一端称为栈顶(to),向栈中插入数据的操作称为压入(Push),从栈中删除数据称为弹出(Pop)。10.2.2堆栈的存储方式1.对栈中元素的操作是按后进先出(LastInFirstOut,简称LIFO)的原则进行的,即最后压入的元素最先弹出。2.在栈的操作过程中,有一个永远指向栈顶的栈顶指针,在压入和弹出数据时,栈顶指针向上或向下移动。当栈顶指针为零时(即指向栈底的后面),栈为空栈。如果压入的数据过多超出了栈的最大空间,则发生栈上溢。10.2.3空栈的判断空栈BOTTOMtop0SIZE12BOTTOMtopSIZE010.2.3满栈的判断满栈1234567BOTTOMSIZE12BOTTOMtopSIZE非满栈top10.3队列10.3.1队列的概念10.3.2队列空的判断10.3.1队列的概念和栈相反,队列(Queue)是一种先进先出的线性表,它只允许在队列的一端删除元素,在另一端插入元素。这和日常生活中的排队是一致的,最早进入队列的元素最早离开。允许插入的一端叫做队尾,允许删除的一端称为队首。10.3.2队列空的判断无论head与end在什么位置,当head==end时,此时队列为空,否则队列非空.endhead0SIZE空队列非空队列endhead0SIZE10.4递归10.4.1何为递归10.4.2递归的要点10.4.3递归的实例10.4.1何为递归在程序设计中,函数直接或者间接调用其自身的方法叫做递归调用,简称递归.其设计方法被应用到很多特殊问题的解决上函数A函数B函数C10.4.2递归的要点每次递归调用都要使问题简单化当递归达到某种程度后能够的到一个已知解以结束递归调用10.4.3递归的实例据说毕达哥拉斯理论家,又称一群在毕达哥拉斯(以毕达哥拉斯理论闻名)领导下工作的古希腊的数学家,发现了在数字序列1,3,6,10,15,21,..(省略号说明这个序列无限地继续下去)中有一种奇特的联系。你能知道这个序列的下一个数字是什么吗?10.4.3递归的实例这个数列中的第n项是由第n-1项加M得到的。由此,第二项是由第一顶(1)加上2,得3。第三项是由第二项(3)加上3得到6,依此类推。这个序列户的数字被称为三角数字,因为它们可以被形像化地表示成对象的一个三角形排列.10.4.3递归的实例以Sn代表第n项的值,有如下表示:Sn=Sn-1+n当n=1时当n>1时Sn=110.4.3递归的实例10.5排序10.5.1排序的概念10.5.2排序的实例10.5.1排序概念冒泡排序冒泡排序组要的思想是进行相邻的两个元素之间比较并且交换.有利于利用原有元素在集合中的位置优势.冒泡排序的原则是大的下沉小的上浮46537182第一轮的排序首先比较前两个元素,如果顺序与升序相反则交换,否则什么也不作然后,依次比较第二位与第三位,第三位与第四位,…..46537182456371824653718210.5.2冒泡实例10.5.2冒泡实例4536718245367182453617824536178245361728此时,第一轮排序完毕,它能够使最大数沉到最底端.然后进行第二轮的排序.每一轮排序能够确保其最大数沉到相应位置.经过元素个数减一次的排序会生成有序数组.第一轮排序结果课后练习思考题在程序中如何灵活运用链表冒泡排序如何实现小结10.1链表10.2堆栈10.3队列10.4递归10.5排序
提供Java--完整版PPT课件,java基础ppt课件会员下载,编号:1701027095,格式为 xlsx,文件大小为397页,请使用软件:wps,office Excel 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。