收藏 分销(赏)

JAVA从入门到精通整理PPT.ppt

上传人:天**** 文档编号:10509233 上传时间:2025-05-31 格式:PPT 页数:231 大小:2.94MB
下载 相关 举报
JAVA从入门到精通整理PPT.ppt_第1页
第1页 / 共231页
JAVA从入门到精通整理PPT.ppt_第2页
第2页 / 共231页
点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,学习,Java,前的准备工作,主讲人:孙鑫,经典,java,从入门到精通,视频课件,www.sunxin.org,Download:,1,相关概念,老师,什么是,JDK,啊?,即,Java Develop Kit,,,Java,开发工具包。,老师,你们讲的是,Java1,还是,Java2,?,1998,年,12,月,,SUN,公司发布了,JDK1.2,,开始使用,“,Java 2,”,这一名称,目前我们已经很少使用,JDK1.1,版本,所以我们所说的,Java,都是指,Java2,。,J2SDK,当然就是,Java 2 Software Develop Kit,。,老师,什么是,JRE,?,JRE,(,Java Runtime Environment,),即,Java,运行环境,通常已包含在,J2SDK,中了。如果我们仅仅是为了运行,Java,程序,而不是从事,Java,开发,我们可以直接下载,JRE,,在我们的系统上安装。,www.sunxin.org,Download:,2,Java,的开发工具包(,JDK,),J2SE(Java 2 Platform,Standard Edition),标准版,J2EE(Java 2 Platform,Enterprise Edition),企业版,J2ME(Java 2 Platform,Micro Edition),精简版,www.sunxin.org,Download:,3,J2SE v1.4.2,相关下载,Java 2 Platform,Standard Edition,v 1.4.2,v 1.4.2 Documentation,Tutorial,Ardreesen,开发的,Mosaic,和,Netscape,启发了,Oak,项目组成员,他们用,Java,编 制 了,HotJava,浏 览器,得到了,Sun,公司首席执行官,Scott McNealy,的支持,触发了,Java,进 军,Internet,。,Java,的取名也有一则趣闻,有一天,几 位,Java,成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着,Java(,爪哇,),咖 啡,有一个人灵机一动说就叫,Java,怎 样,得到了其他人的赞赏,于是,,Java,这个名字就这样传开了。,Java,的起源,www.sunxin.org,Download:,6,我们为什么要用,Java,因为,Java,是,简单的,面向对象的,健壮的,安全的,解释的,与平台无关的,多线程的,动态的语言,www.sunxin.org,Download:,7,我们为什么要用,Java,简单的,Java,最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。,Java,语言的简单性主要体现在三个方面:,1,、,Java,的风格类似于,C+,,因而,C+,程序员初次接触,Java,语言,就会感到很熟悉。从某种意义上讲,,Java,语言是,C,及,C+,语言的一个变种,因此,,C+,程序员可以很快地掌握,Java,编程技术。,2,、,Java,摒弃了,C+,中容易引发程序错误的一些特性,如指针、结构、枚举以及内存管理等。,3,、,Java,提供了丰富的类库,可以帮助我们很方便的开发,Java,程序。,www.sunxin.org,Download:,8,我们为什么要用,Java,面向对象的,面向对象可以说是,Java,最重要的特性,所以它支持继承、重载、多态等面向对象的特性。,Java,语言的设计是完全面向对象的,它不支持类似,C,语言那样的面向过程的程序设计技术。,www.sunxin.org,Download:,9,我们为什么要用,Java,健壮的,Java,致力于检查程序在编译和运行时的错误。,Java,也是一种强类型的语言,其类型检查比,C+,还要严格。类型检查帮助我们检查出许多开发早期出现的错误。,Java,自己负责内存管理,提供了垃圾内存回收机制,有效的避免了,C+,中最头疼的内存泄漏问题。,www.sunxin.org,Download:,10,我们为什么要用,Java,安全的,Java,的安全性可从两个方面得到保证。一方,面,在,Java,语言里,删除了指针和释放内存等,C+,功能,避免了非法内存操作。另一方面,通过,Java,的安全体系架构来确保,Java,代码的安全性。当我们从网上下载,Java,代码在本地执行时,,Java,的安全架构能确保恶意的代码不能随意访问我们本地计算机的资源,例如:删除文件,访问本地网络资源等操作都是被禁止的。,www.sunxin.org,Download:,11,我们为什么要用,Java,解释的,Java,代码是解释执行的,我们使用,Java,编译器将,Java,代码编译成字节码,这是一种中间代码,然后由,Java,解释器解释执行。而,C+,程序是编译执行的,,C+,程序代码被,编译为本地机器指令,然后执行。,www.sunxin.org,Download:,12,我们为什么要用,Java,与平台无关的,Java,作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有,Java,运行系统的机器都能执行这种中间代码。,Java,源程序被编译成一种与机器无关的字节码格式,在,Java,虚拟机上运行。,www.sunxin.org,Download:,13,我们为什么要用,Java,多线程的,Java,语言的一个重要特性就是在语言级支持多线程的程序设计。多线程就好像我们做一张桌子,如果你一个人完成这张桌子,就好像单线程,那么你需要先做桌面,做完桌面后,再做,4,个桌子腿,如果现在有,5,个人来做桌子,在程序中开辟,5,个线程,其中,1,个人做桌面,另外,4,个人分别做,4,个桌子腿,那么这两种方式效率的高低,相信大家都能区分出来。,www.sunxin.org,Download:,14,我们为什么要用,Java,动态的,Java,的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是我们采用,C+,语言进行面向对象程序设计所无法实现的。在,C+,程序设计过程中,每当在类中增加一个实例变量或一个成员函数后,,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。,Java,从以下几个方面采取措施来解决这个问题。,Java,编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。一个在存储器中生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。,解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。,Java,还简化了使用一个升级的或全新协议的方法。如果你的系统运行,Java,程序时遇到了不知怎样处理的程序,,Java,能自动下载你所需要的功能程序。,www.sunxin.org,Download:,15,Java,跨平台的原理,Java,的跨平台是通过,Java,虚拟机(,JVM,),(,Java Virtual Machine),来实现的。,www.sunxin.org,Download:,16,Java,跨平台的原理,Java,源文件的编译过程,Java,应用程序的开发周期包括编译、下载、解释和执行几个部分。,Java,编译程序将,Java,源程序翻译为,JVM,可执行代码,字节码。这一编译过程同,C/C+,的编译有些不同。当,C,编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。,Java,编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了,Java,的可移植性和安全性。,www.sunxin.org,Download:,17,Java,跨平台的原理,Java,解释器的执行过程,运行,JVM,字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由,“,类装载器,”,(,class loader,)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,,Java,很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。,随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。,www.sunxin.org,Download:,18,Java,跨平台的原理,Java,字节码的两种执行方式,1,、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。,2,、解释执行方式:解释器通过每次解释并执行一小段代码来完成,Java,字节码程 序的所有操作。通常采用的是第二种方法。由于,JVM,规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将,Java,字节码即时编译为机器码,从而很好地保证了,Java,代码的可移植性和高性能。,www.sunxin.org,Download:,19,Java,跨平台的原理,JVM,规格描述,JVM,的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保,Java,代码可在符合该规范的任何系统上运行。,JVM,对其实现的某些方面给出了具体的定义,特别是对,Java,可执行代码,即字节码,(Bytecode),的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及,Java,类文件中的,Java,对象、常量缓冲池在,JVM,的存储映象。这些定义为,JVM,解释器开发人员提供了所需的信息和开发环境。,Java,的设计者希望给开发人员以随心所欲使用,Java,的自由。,JVM,是为,Java,字节码定义的一种独立于具体平台的规格描述,是,Java,平台独立性的基础。,www.sunxin.org,Download:,20,Java,跨平台的原理,Java,程序执行与,C/C+,程序执行的对比分析,如果把,Java,源程序想象成我们的,C+,源程序,,Java,源程序编译后生成的字节码就相当于,C+,源程序编译后的,80 x86,的机器码(二进制程序文件),,JVM,虚拟机相当于,80 x86,计算机系统,,Java,解释器相当于,80 x86CPU,。在,80 x86CPU,上运行的是机器码,在,Java,解释器上运行的是,Java,字节码。,Java,解释器相当于运行,Java,字节码的,“,CPU,”,,但该,“,CPU,”,不是通过硬件实现的,而是用软件实现的。,Java,解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,,Java,字节码就能通过解释器程序在该平台下运行,这是,Java,跨平台的根本。当前,并不是在所有的平台下都有相应,Java,解释器程序,这也是,Java,并不能在所有的平台下都能运行的原因,它只能在已实现了,Java,解释器程序的平台下运行。,www.sunxin.org,Download:,21,Java,开发工具包,(JDK),的下载,下载网址:,www.sunxin.org,Download:,22,Java,的面向对象编程,主讲人:孙鑫,www.sunxin.org,Download:,23,面向对象编程概述,简单的说,面向对象编程(,Object Oriented Programming,,简称,OOP,)描述的是对象之间的相互作用。,面向对象编程与面向过程编程的区别:,过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。,面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;,面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。,www.sunxin.org,Download:,24,对象 对象的状态 对象的行为,我们可以把现实世界的事物抽象成对象。,对象一般都有两个特征:状态(,state,)和行为(,behavior,)。,软件的对象概念是由现实世界对象抽象而来,。,把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。,www.sunxin.org,Download:,25,类和对象,把相似的对象划归成一个类。,在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。,类是创建对象的模板,对象是类的实例。,www.sunxin.org,Download:,26,面向对象程序设计,从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型,。所以我们可以使用类名称来声明对象变量。,声明对象变量之后,还不能使用对象。必须用运算符,new,创建对象实体之后,才能使用对象。,www.sunxin.org,Download:,27,面向对象编程的难点,掌握面向对象的困难之处在于思路的转换。,我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。,www.sunxin.org,Download:,28,一个简单的例子,编写一个驾驶汽车的方法,面向过程的程序设计:,编写一个方法,,void drivecar();,面向对象的程序设计:,将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类,Car,,类中有一个方法,void drive(),,用,Car,这个类实例化一个具体的对象,car,,调用:,car.drive(),。,www.sunxin.org,Download:,29,类的构造方法,构造方法的名字和类名相同,并且没有返回值。,构造方法主要用于为类的对象定义初始化状态。,我们不能直接调用构造方法,必须通过,new,关键字来自动调用,从而创建类的实例。,Java,的类都要求有构造方法,如果没有定义构造方法,,Java,编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。,www.sunxin.org,Download:,30,new,关键字的作用,为对象分配内存空间。,引起对象构造方法的调用。,为对象返回一个引用。,www.sunxin.org,Download:,31,缺省构造方法,当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。,各种数据类型的默认值为:,数值型,0,booleanfalse,char0,对象,null,www.sunxin.org,Download:,32,方法的重载,(overload),重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。,www.sunxin.org,Download:,33,特殊变量,this,this,变量代表对象本身,当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用,this,区分成员变量和局部变量。,使用,this,简化构造函数的调用。,www.sunxin.org,Download:,34,特殊变量,this,关于实例方法和实例数据成员的进一步说明,一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。,this,变量允许相同的实例方法为不同的对象工作。,每当调用一个实例方法时,,this,变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与,this,所代表的对象的特定数据建立关联。,www.sunxin.org,Download:,35,关键字,static,静态方法和静态变量是属于某一个类,而不属于类的对象。,静态方法和静态变量的引用直接通过类名引用。,在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。,可以用类的对象,obj,去调用静态的方法,method(),,如:,obj.method(),。,www.sunxin.org,Download:,36,常量的定义,使用关键字,final,定义常量,例如:,final double PI=3.1415926;,作为一种约定,在定义常量时,通常采用大写形式。,final,常量可以在声明的同时赋初值,也可以在构造函数中赋初值。,为了节省内存,我们通常将常量声明为静态的(,static,)。,www.sunxin.org,Download:,37,类的继承,理解继承是理解面向对象程序设计的关键。,在,Java,中,通过关键字,extends,继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。,在,Java,中,不允许多继承。,www.sunxin.org,Download:,38,方法的覆盖(,override,),在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖。,覆盖发生在子类与父类之间。,www.sunxin.org,Download:,39,特殊变量,super,特殊变量,super,,提供了对父类的访问。,可以使用,super,访问父类被子类隐藏的变量或覆盖的方法。,每个子类构造方法的第一条语句,都是隐含地调用,super(),,如果父类没有这种形式的构造函数,那么在编译的时候就会报错。,www.sunxin.org,Download:,40,多态性,通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。,www.sunxin.org,Download:,41,面向对象的程序设计,问题:求一个长方形的周长和面积。,以面向过程的程序设计方式思考:,1,、确定长方形周长和面积的算法。,2,、编写两个方法(函数)分别计算长方形的周长和面积。,3,、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。,www.sunxin.org,Download:,42,面向过程的程序设计代码:,class Rectangle,static int perimeter(int length,int width),return 2*(length+width);,static int area(int length,int width),return length*width;,public static void main(String args),System.out.println(perimeter=,“,+Rectangle.perimeter(5,4);,System.out.println(area=,“,+Rectangle.area(5,4);,www.sunxin.org,Download:,43,面向对象的程序设计,问题:求一个长方形的周长和面积。,以面向对象的程序设计方式思考:,1,、一个长方形可以看成一个长方形对象。,2,、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。,3,、将所有长方形的共性抽取出来,设计一个长方形类。,4,、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。,www.sunxin.org,Download:,44,面向对象的程序设计,Demo,www.sunxin.org,Download:,45,位运算,主讲人:孙鑫,www.sunxin.org,Download:,46,计算机中数据的表示方法,计算机是一种电子设备,由复杂的电子元器件组合而成,一个电子元器件有带电和不带电两种状态,通常我们将带电状态表示为数值,1,,不带电状态表示为数值,0,,多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,如,000,表示,0,,,001,表示,1,,,010,表示,2,,,011,表示,3,,依此类推,,111,表示,7,,一个元器件可表示一位(,bit,)数据,这种表示数据的方式就叫二进制。在实际的电子设备中,我们将,8,个这样的元器件形成一个单元,这样的单元叫一个字节(,byte,),一个字节能表示多少个数呢?表示数值的范围是,0-255,。,一个字节由,8,个二进位组成,其中最右边的一位称为,“,最低有效位,”,或,“,最低位,”,,最左边的一位称为,“,最高有效位,”,或,“,最高位,”,。每一个二进位的值是,0,或,1,。,www.sunxin.org,Download:,47,计算机中数据的表示方法,二进制计数的缺点,:,书写太长,容易出错,一般计算机的数据位数都是,4,的整数倍,所以,在计算机里通常采用,16,进制计数法。用数字可以表示各种信息,计算机里只有数值,当你在内存中看到一个数值时,这个数值可能代表各种意义,生活中的数值也可以代表其他意义,如,1234,可以代表密码,存款额,电报信息,根据上下线索,我们就能够知道这数值代表的意义。,www.sunxin.org,Download:,48,原码、反码和补码,原码,将最高位作为符号位(以,0,代表正,,1,代表负),其余各位代表数值本身的绝对值(以二进制表示)。,为了简单起见,我们用,1,个字节来表示一个整数。,+7,的原码为:,00000111,-7,的原码为:,10000111,问题:,+0,的原码为:,00000000,-0,的原码为:,10000000,www.sunxin.org,Download:,49,原码、反码和补码,反码,一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为,1,,其余各位是对原码取反。,为了简单起见,我们用,1,个字节来表示一个整数。,+7,的反码为:,00000111,-7,的反码为:,11111000,问题:,+0,的反码为:,00000000,-0,的反码为:,11111111,www.sunxin.org,Download:,50,原码、反码和补码,补码,利用溢出,我们可以将减法变成加法。,对于十进制数,如果从,9,得到结果,5,,可以用减法:,9-4=5,因为,4+6=10,,我们将,6,作为,4,的补数,将上式的减法改写为加法:,9+6=15,去掉高位,1,(也就是减去,10,),得到结果,5,。,对于,16,进制数,如果从,C,得到结果,5,,可以用减法:,C-7=5,因为,7+9=16,,我们将,9,作为,7,的补数,将上式的减法改写为加法:,C+9=15,去掉高位,1,(也就是减去,16,),得到结果,5,。,www.sunxin.org,Download:,51,原码、反码和补码,补码,在计算机中,如果我们用,1,个字节表示一个数,一个字节有,8,位,超过,8,位就进,1,,在内存中情况为:,1 00000000,进位,1,被丢弃。,www.sunxin.org,Download:,52,原码、反码和补码,+1,11111001,补码,一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为,1,,其余各位是对原码取反,然后整个数加,1,。,为了简单起见,我们用,1,个字节来表示一个整数。,+7,的补码为:,00000111,-7,的补码为:第,步,11111000,第,步,www.sunxin.org,Download:,53,原码、反码和补码,补码,0,的补码表示:,+0,的补码:,00000000,-0,的补码:,第,步,11111111,第,步 进位,1,被丢弃,+1,1 00000000,第,步,www.sunxin.org,Download:,54,原码、反码和补码,补码,已知一个负数的补码,将其转换为十进制数,步骤:,1,、先对各位取反;,2,、将其转换为十进制数;,3,、加上负号,再减去,1,。,例如:,11111010,,最高位为,1,,是负数,先对各位取反得,00000101,,转换为十进制数得,5,,加上负号得,-5,,再减,1,得,-6,。,www.sunxin.org,Download:,55,位运算符,为了方便对二进制位进行操作,,Java,给我们提供了四个二进制位操作符:,&,按位与,|,按位或,按位异或,按位取反,www.sunxin.org,Download:,56,位运算符,按位与,一个房间里有两个开关控制房间的灯的明暗。当两个开关同时处于打开状态时,灯才能亮。,开关,1,开关,2,灯的状态,关 关 暗,开 关 暗,关 开 暗,开 开 亮,www.sunxin.org,Download:,57,位运算符,按位与,01101101,00110111,00100101,结论:按位与,只有壹,(1),壹,(1),为,1,。,&,www.sunxin.org,Download:,58,位运算符,按位或,一个房间里有两个开关控制房间的灯的明暗。当任何一个开关处于打开状态时,灯就能亮。,开关,1,开关,2,灯的状态,关 关 暗,开 关 亮,关 开 亮,开 开 亮,www.sunxin.org,Download:,59,位运算符,按位或,01101101,00110111,01111111,结论:按位或,只有零,(0),零,(0),为,0,。,|,www.sunxin.org,Download:,60,位运算符,按位异或,一个房间里有两个开关控制房间的灯的明暗。当两个开关处于不同状态时,灯就能亮。,开关,1,开关,2,灯的状态,关 关 暗,开 关 亮,关 开 亮,开 开 暗,www.sunxin.org,Download:,61,位运算符,按位异或,01101101,00110111,01011010,结论:按位异或,只有零,(0),壹,(1),或壹,(1),零,(0),为,1,。,www.sunxin.org,Download:,62,位运算符,按位取反,01101101,10010010,结论:对二进制数按位取反,即,0,变成,1,,,1,变成,0,。,www.sunxin.org,Download:,63,移位运算符,Java,中有三个移位运算符,左移:,无符号右移:,www.sunxin.org,Download:,64,移位运算符,数,x x2 x2,17 00010001 00 01000100 00000100 01 00000100 01,-17 11101111 11 10111100,数,x x2 x2,17 00010001 00 01000100 00000100 01 00000100 01,-17 11101111 11 10111100 11111011 11 00111011 11,www.sunxin.org,Download:,65,练习,将一个整数,110,从右端开始的,47,位变为,0,。,www.sunxin.org,Download:,66,Lesson3,主讲人:孙鑫,www.sunxin.org,Download:,67,主要内容,包,类的说明符,方法的说明符,对象的销毁(垃圾内存回收的演示),接口,内部类和匿名内部类,异常处理,www.sunxin.org,Download:,68,包(,package,),为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,,Java,引入了包(,package,)。,www.sunxin.org,Download:,69,包(,package,),package,语句必须是文件中的第一条语句。也就是说,在,package,语句之前,除了空白和注释之外不能有任何语句。,如果不加,package,语句,则指定为缺省包或无名包。,包对应着文件系统的目录层次结构。,在,package,语句中,用,“,.,”,来指明包(目录)的层次。,www.sunxin.org,Download:,70,编译并生成包,在当前目录下生成包,javac,d.Test.java,在指定目录下生成包,javac,d E:JavaLesson Test.java,www.sunxin.org,Download:,71,import,语句,引入包中的类。,import java.io.File;,引入整个包。,import java.io.*;,在同一包中的类可以互相引用,无需,import,语句。,www.sunxin.org,Download:,72,类的说明符,类的访问说明符,(,1,),public,(,2,),default,(不加访问说明符时),类的其它修饰符,(,1,),final,(,2,),abstract,www.sunxin.org,Download:,73,方法的说明符,方法的访问说明符,(,1,),public,(,2,),protected,(,3,),default(,不加访问说明符时,),(,4,),private,方法的其它修饰符,(,1,),static,(,2,),final,(,3,),abstract,(,4,),native,(,5,),synchronized,www.sunxin.org,Download:,74,方法的访问控制,public,protected,default,private,同类,同包,子类,通用性,不同,情形下,访问说明符,www.sunxin.org,Download:,75,方法的访问控制,public,protected,default,private,同类,同包,子类,通用性,不同,情形下,访问说明符,www.sunxin.org,Download:,76,方法的访问控制,public,protected,default,private,同类,同包,子类,通用性,不同,情形下,访问说明符,www.sunxin.org,Download:,77,方法的访问控制,public,protected,default,private,同类,同包,子类,通用性,不同,情形下,访问说明符,www.sunxin.org,Download:,78,方法的访问控制,public,protected,default,private,同类,同包,子类,通用性,不同,情形下,访问说明符,www.sunxin.org,Download:,79,final,方法,为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(,overridden,),可以使用,final,方法。,为了效率上的考虑,将方法声明为,final,,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对,final,方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为,final,。,class,中所有的,private,和,static,方法自然就是,final,。,www.sunxin.org,Download:,80,抽象方法和抽象类,在类中没有方法体的方法,就是抽象方法。,含有抽象方法的类,即为抽象类。,如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。,我们可以将一个没有任何抽象方法的类声明为,abstract,,避免由这个类产生任何的对象。,构造方法、静态方法、私有方法、,final,方法不能被声明为抽象的方法。,www.sunxin.org,Download:,81,native,方法,native,方法是用户在,Java,中可以使用,但不能编写的方法。,JNI(Java Native Interface),,它允许,Java,虚拟机,(JVM),内部运行的,Java,代码能够与用其它编程语言,(,如,C,、,C+,、汇编语言,),编写的应用程序和库进行互操作。,JNI,最大的好处是它没有对底层,Java,虚拟机的实现施加任何限制,因此,,Java,虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对,JNI,的支持。程序员只需编写一种版本的本地,(Native),应用程序和库,就能够与所有支持,JNI,的,Java,虚拟机协同工作。,JNI,可以理解为,Java,和本地应用程序之间的中介。,www.sunxin.org,Download:,82,接口,接口中所有的方法都是,public abstract,。,在接口中声明方法时,不能使用,native,、,static,、,final,、,synchronized,、,private,、,protected,等修饰符。,和,public,类一样,,public,接口也必须定义在与接口同名的文件中。,www.sunxin.org,Download:,83,接口,接口中可以有数据成员,这些成员默认都是,public static final,。,www.sunxin.org,Download:,84,Math.java,interface Math,double PI=3.1415926;,class Arithmetic implements Math,double roundArea(double radius),return PI*radius*radius;,class Student,public static void main(String args),Arithmetic a=new Arithmetic();,System.out.println(a.roundArea(3);,System.out.println(Math.PI);/ok,System.out.println(Arithmetic.PI);/ok,System.out.println(a.PI);/ok,85,接口,一个接口可以继承自另一个接口。,Java,中不允许类的多继承,但允许接口的多继承。,www.sunxin.org,Download:,86,Sofa.java,interface Sittable,void sit();,interface Lie,void sleep();,interface Chair extends Sittable,interface Sofa extends Sittable,Lie,www.sunxin.org,Download:,87,接口,在,Java,中,一个类可以实现多个接口。,一个类在继承另外一个类的同时,可以实现多个接口。,www.sunxin.org,Download:,88,Sofa.java,/,实现多个接口,interface Sittable,void sit();,interface Lie,void sleep();,class Sofa implements Sittable,Lie,public void si
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服