Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > PPT课件 > 其他课件 > Java--完整版PPT课件,java基础ppt课件

Java--完整版PPT课件,java基础ppt课件

收藏

Java--完整版PPT课件

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的开发环境什么是JDKsun公司将java的开发工具和运行环境所涉及到的应用程序和相关文件放在一起,称之为JDK(javadevelo1.1.3Java的开发环境JDK的安装目录JDK的目录结构(1)bin目录javacjava(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-1short占用两个字节,数字大小为-215—215-1int占用四个字节,数字大小为-231—231-1long占用八个字节,数字大小为-263—263-1float占用四个字节,-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静态属性不能把方法体内的变量声明为staticfun(){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何为异常异常定义了程序中遇到的非致命错误,而不是编译时的语法错误,如:打开一个不存在的文件、数组越界等,catchtry中的代码抛出异常后,程序跳入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+6Strings2=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中基本数据类型都有其对应的包装类booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble课后练习编写程序输入字符串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事件监听器处理事件ActionListenerMouseListenerKeyListenerWindowListenerMouseMotionListener4.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图形操作drawLinedrawOvaldrawRectdrawRoundRectfill3DRectfillArcfillOvalfillRectfillRoundRect4.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容器类PanelPanel可作为容器容纳其他组件,但不能独立存在,必须被添加到其他的容器中4.4.3容器类ScrollPaneScrollPane是一种容器,不能单独使用,显示较大部件时会出现滚动条ScrollPane中只能放置一个组件,无布局管理器,需放置多个组件时,可将这些组件嵌套在一个Panel中,再将Panel放置到ScrollPane中4.4.4布局管理边框布局流布局网格布局卡片布局取消布局4.4.4布局管理BorderLayoutFrame和Dialog的默认布局管理器就是BorderLayout位置参数严格区分大小写4.4.4布局管理FlowLayout组件从左到右,从上到下依次排列,如果一个组件在本行放不下,则自动换到下一行FlowLayout是Panel和applet的默认布局管理器4.4.4布局管理GridLayoutGridLayout将容器分成若干行列的网格,在容器上添加组件时,会按从左到右、从上到下的顺序在网格中排列4.4.4布局管理CardLayoutCardLayout能够实现将多个组件放在同一容器区域内的交替显示,在任何时候只有最上面的一个可见。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包中的组件介绍JScrollboboxJList课后练习编写程序实现计算器的功能编写万年历小结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:使当前线程放弃监视器进入睡眠状态,直到其他线程进入同一监视器并调用notifynotify:唤醒同一监视器对象中调用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字节流的父类及常用方法Inintread():返回下一个输入字节的整型表示,如果返回-1表示遇到流的末尾,结束intread(byte[]b):中并返回实际读入的字节数intread(byte[]b,intoff,intlen):把流中数据读到数组b中从脚标为off开始的len个数组元素6.2.2字节流的父类及常用方法Inintavailable():返回当前输入流中可读的字节数voidmark(intreadlimit):在输入流的当前位置放上一个标志,允许最多再读入readlimit个字节voidreset():把输入指针返回到以前所做的标志处booleanmarkSuark/reset操作就返回true6.2.2字节流的父类及常用方法Out定义了输出流的抽象类,这个类中所以的方法都返回voidvoidwrite(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数据流DataInDataIn只提供了readUTF方法,而没有与DataOut中的writeBytes和writeChars方法对应的read方法,这是因为在一个连续的字节流中读取一个字符串,如果没有特殊的标志作为一个字符串的结尾,而且事先不知道字符串的长度,那么就无法读取这个字符串。在DataOu类中只有wirteUTF方法写入了字符串的长度6.2.4数据流DataOut类PublicfinalvoidwriteBoolean(booleanb)throwsIOExceptionPublicfinalvoidwriteShort(ints)throwsIOExceptionPublicfinalvoidwriteChar(intc)throwsIOExceptionPublicfinalvoidwriteInt(inti)throwsIOException6.2.4数据流DataOut类可以往IO设备中写入各种类型的数据6.2.5缓冲流当一个简单的写请求产生后,数据不马上写到所连接的输出流和文件中,而是高速写入缓存中,当缓存写满或关闭流时,所有的数据再一次性从缓存中写入输出流或文件中,提高写入文件中的效率6.2.5缓冲流BufferedInBufferedIn类可以对任何In进行带缓冲区的封装以达到性能的改善构造器:(1)BufferedIn(Inin)创建一个带32字节缓冲区的缓冲流(2)BufferedIn(Inin,intsize)创建一个带size字节缓冲区的缓冲6.2.5缓冲流BufferedOutBufferedOut有一个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和WriterIn和Out是用来处理字节的,在处理字符文本时不太方便Reader和Writer专门用来处理字符(功能和In和Out相似,在处理字符文本时简化了我们的编程)6.3.2文件流FileReaderFileWriter6.3.3缓冲流BufferedReaderBufferedWriter6.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随机类RandomAccessFileRandomAccessFile“”类支持随机访问方式,可以跳转到文件的任意位置读写数据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和UDPTCissionControlProtocol,用户数据报协议9.1.3TCP和UDPTCPTCPTCP是面向连接的通信协议,提供两台计算机之间的可靠无差错的数据传输应用程序使用TCP通信时,源和目标之间会建立一个虚拟连接9.1.3TCP和UDPUDPUDP是无连接通信协议,不保证数据的可靠传输,但能够向若干目标发送数据,接受发自若干个源的数据9.1.4TCP、UDP数据包基本格式协议类型源IP目标IP源端口目标端口帧序号帧数据9.1.5SocketSocket是网络驱动层提供给应用程序的接口和一种机制,通过一种绑定机制与驱动程序建立关系,包含IP和Port信息发送数据时,应用程序将数据交给Socket,由Socket交给驱动程序向网络上发送接收数据时,计算机从网络上收到与该Socket绑定的IP+Prot相关的数据后,由驱动程序交给Socket,应用程序可从Socket中提取数据9.1.6包Java分别为UDSocket,与TCP对应的是ServerSocket(用于服务器端)和Socket(用于客户端)InetAddressInetAddress是用于表示计算机地址的一个类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,IOExceptionpublicSocket(InetAddressaddress,intport)throwsIOException这两个构造方法创建Socket对象后,会根据参数连接在特定地址和端口上运行的服务器程序,其中host为主机名,address为IP地址9.4.3Socket的构造方法publicSocket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)throwsIOExceptionpublicSocket(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排序


  • 编号:1701027095
  • 分类:其他课件
  • 软件: wps,office Excel
  • 大小:397页
  • 格式:xlsx
  • 风格:其他
  • PPT页数:1333022 KB
  • 标签:

广告位推荐

相关其他课件更多>