孙鑫老师-JAVA课件PPT整理.ppt

上传人:牧羊曲112 文档编号:6268115 上传时间:2023-10-11 格式:PPT 页数:187 大小:1.84MB
返回 下载 相关 举报
孙鑫老师-JAVA课件PPT整理.ppt_第1页
第1页 / 共187页
孙鑫老师-JAVA课件PPT整理.ppt_第2页
第2页 / 共187页
孙鑫老师-JAVA课件PPT整理.ppt_第3页
第3页 / 共187页
孙鑫老师-JAVA课件PPT整理.ppt_第4页
第4页 / 共187页
孙鑫老师-JAVA课件PPT整理.ppt_第5页
第5页 / 共187页
点击查看更多>>
资源描述

《孙鑫老师-JAVA课件PPT整理.ppt》由会员分享,可在线阅读,更多相关《孙鑫老师-JAVA课件PPT整理.ppt(187页珍藏版)》请在三一办公上搜索。

1、Java技术与应用,主讲人:孙鑫,http:/www.sunxin.org Download:http:/,Java的起源,Java来自于Sun公司的一个叫Green的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流。开始,准备采用C+,但C+太复杂,安全性差,最后基于C+开发了一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,但结果被SGI打败。可怜的Oak几乎无家可归,恰巧这时Mark Ardreesen开发的Mosai

2、c和Netscape启发了Oak项目组成员,他们用Java编 制 了HotJava浏 览器,得到了Sun公司首席执行官Scott McNealy的支持,触发了Java进 军Internet。Java的取名也有一则趣闻,有一天,几 位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖 啡,有一个人灵机一动说就叫Java怎 样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。,Java的起源,http:/www.sunxin.org Download:http:/,我们为什么要用Java,因为Java是简单的面向对象的健壮的安全的解释的与平台无关

3、的多线程的动态的语言,http:/www.sunxin.org Download:http:/,我们为什么要用Java,简单的 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在三个方面:1、Java的风格类似于C+,因而C+程序员初次接触Java语言,就会感到很熟悉。从某种意义上讲,Java语言是C及C+语言的一个变种,因此,C+程序员可以很快地掌握Java编程技术。2、Java摒弃了C+中容易引发程序错误的一些特性,如指针、结构、枚举以及内存管理等。3、Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。,http:/ww

4、w.sunxin.org Download:http:/,我们为什么要用Java,面向对象的 面向对象可以说是Java最重要的特性,所以它支持继承、重载、多态等面向对象的特性。Java语言的设计是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,健壮的 Java致力于检查程序在编译和运行时的错误。Java也是一种强类型的语言,其类型检查比C+还要严格。类型检查帮助我们检查出许多开发早期出现的错误。Java自己负责内存管理,提供了垃圾内存回收机制,有效的避免了C+中最头疼的内存泄漏问

5、题。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,安全的 Java的安全性可从两个方面得到保证。一方 面,在Java语言里,删除了指针和释放内存等C+功能,避免了非法内存操作。另一方面,通过Java的安全体系架构来确保Java代码的安全性。当我们从网上下载Java代码在本地执行时,Java的安全架构能确保恶意的代码不能随意访问我们本地计算机的资源,例如:删除文件,访问本地网络资源等操作都是被禁止的。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,解释的 Java代码是解释执行的,我们使用J

6、ava编译器将Java代码编译成字节码,这是一种中间代码,然后由Java解释器解释执行。而C+程序是编译执行的,C+程序代码被编译为本地机器指令,然后执行。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,与平台无关的 Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,多线程的 Java语言的一个重要特性

7、就是在语言级支持多线程的程序设计。多线程就好像我们做一张桌子,如果你一个人完成这张桌子就好像单线程,那么你需要先做桌面,做完桌面后,再做4个桌子腿,如果现在有5个人来做桌子在程序中开辟5个线程,其中1个人做桌面,另外4个人分别做4个桌子腿,那么这两种方式效率的高低,相信大家都能区分出来。,http:/www.sunxin.org Download:http:/,我们为什么要用Java,动态的 Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是我们采用C+语言进行面向对象程序设计所无法实现的。在C+程序设计过程中,每当在类中增加一个实例变量或一个成员函数

8、后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。Java从以下几个方面采取措施来解决这个问题。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。一个在存储器中生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连

9、接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java还简化了使用一个升级的或全新协议的方法。如果你的系统运行Java程序时遇到了不知怎样处理的程序,Java能自动下载你所需要的功能程序。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,Java的跨平台是通过Java虚拟机(JVM)来实现的。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,Java源文件的编译过程 Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序

10、将Java源程序翻译为JVM可执行代码字节码。这一编译过程同C/C+的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,

11、Java解释器的执行过程 运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装

12、入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,Java字节码的两种执行方式 1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。2、解释执行方式:解释器通过每次解释并

13、执行一小段代码来完成Java字节码程 序的所有操作。通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,JVM规格描述 JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对

14、Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基础。,http:/www.sunxin.org Download:http:/,Java跨平台的原理,Java程序执行与C/C+程序执行的对比分析 如果把Java源程序想象成我们的C+源程序,Jav

15、a源程序编译后生成的字节码就相当于C+源程序编译后的80 x86的机器码(二进制程序文件),JVM虚拟机相当于80 x86计算机系统,Java解释器相当于80 x86CPU。在80 x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的

16、平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。,http:/www.sunxin.org Download:http:/,Java开发工具包(JDK)的下载,下载网址:http:/,http:/www.sunxin.org Download:http:/,Java的面向对象编程,主讲人:孙鑫,http:/www.sunxin.org Download:http:/,面向对象编程概述,简单的说,面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之间的相互作用。面向对象编程与面向过程编程的区别:过程化程序设计先确定算法,再确定数据

17、结构;面向对象编程先确定数据结构,再确定运算。面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。,http:/www.sunxin.org Download:http:/,对象 对象的状态 对象的行为,我们可以把现实世界的事物抽象成对象。对象一般都有两个特征:状态(state)和行为(behavior)。软件的对象概念是由现实世界对象抽象而来。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。,http:/www.sunxin.org Download:ht

18、tp:/,类和对象,把相似的对象划归成一个类。在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。类是创建对象的模板,对象是类的实例。,http:/www.sunxin.org Download:http:/,面向对象程序设计,从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象变量。声明对象变量之后,还不能使用对象。必须用运算符new创建对象实体之后,才能使用对象。,http:/www.sunxin.org Download:http:/,面向对象编程的难点,

19、掌握面向对象的困难之处在于思路的转换。我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。,http:/www.sunxin.org Download:http:/,一个简单的例子,编写一个驾驶汽车的方法面向过程的程序设计:编写一个方法,void drivecar();面向对象的程序设计:将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void drive(),用Car这个类实例化一个具体的对象car,调用:car.drive()。,http:/www.sunxin.org Download:http:/,类的构造方法,构造方法的名字和

20、类名相同,并且没有返回值。构造方法主要用于为类的对象定义初始化状态。我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。,http:/www.sunxin.org Download:http:/,new关键字的作用,为对象分配内存空间。引起对象构造方法的调用。为对象返回一个引用。,http:/www.sunxin.org Download:http:/,缺省构造方法,当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。各种数据类型

21、的默认值为:数值型0booleanfalsechar0对象null,http:/www.sunxin.org Download:http:/,方法的重载(overload),重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。,http:/www.sunxin.org Download:http:/,特殊变量this,this变量代表对象本身当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量。使用this简化构造函数的调用。,http:/www.sunxin.org Download:h

22、ttp:/,特殊变量this,关于实例方法和实例数据成员的进一步说明 一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。this变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联。,http:/www.sunxin.org Download:http:/,关键字static,静态方法和静态变量是属于某一个类,而不属于类的对象。静态方法和静态变量的引用直接通过类名引用。在静态方法中不能调

23、用非静态的方法和引用非静态的成员变量。反之,则可以。可以用类的对象obj去调用静态的方法method(),如:obj.method()。,http:/www.sunxin.org Download:http:/,常量的定义,使用关键字final定义常量,例如:final double PI=3.1415926;作为一种约定,在定义常量时,通常采用大写形式。final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。为了节省内存,我们通常将常量声明为静态的(static)。,http:/www.sunxin.org Download:http:/,类的继承,理解继承是理解面向对象程序设计的关

24、键。在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Java中,不允许多继承。,http:/www.sunxin.org Download:http:/,方法的覆盖(override),在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖。覆盖发生在子类与父类之间。,http:/www.sunxin.org Download:http:/,特殊变量super,特殊变量super,提供了对父类的访问。可以使用super访问父类被子类隐藏的变量或覆盖的方法。每个子类构造方法的第一条语句,都是隐含地调用su

25、per(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。,http:/www.sunxin.org Download:http:/,多态性,通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。,http:/www.sunxin.org Download:http:/,面向对象的程序设计,问题:求一个长方形的周长和面积。以面向过程的程序设计方式思考:1、确定长方形周长和面积的算法。2、编写两个方法(函数)分别计算长方形的周长和面积。3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。,http:/www.sunxin.org Dow

26、nload:http:/,面向过程的程序设计代码:class Rectanglestatic 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)

27、;,http:/www.sunxin.org Download:http:/,面向对象的程序设计,问题:求一个长方形的周长和面积。以面向对象的程序设计方式思考:1、一个长方形可以看成一个长方形对象。2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。3、将所有长方形的共性抽取出来,设计一个长方形类。4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。,http:/www.sunxin.org Download:http:/,面向对象的程序设计,Demo,http:/www.sunxin.org Download:http:/,Lesson3,主讲人:孙鑫,ht

28、tp:/www.sunxin.org Download:http:/,主要内容,包类的说明符方法的说明符对象的销毁(垃圾内存回收的演示)接口内部类和匿名内部类异常处理,http:/www.sunxin.org Download:http:/,包(package),为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。,http:/www.sunxin.org Download:http:/,包(package),package语句必须是文件中的第一条语句。也就是说,在package语句之前,除了空白和注释之外不能有任何语句。如果不加package语句

29、,则指定为缺省包或无名包。包对应着文件系统的目录层次结构。在package语句中,用“.”来指明包(目录)的层次。,http:/www.sunxin.org Download:http:/,编译并生成包,在当前目录下生成包 javac d.Test.java在指定目录下生成包 javac d E:JavaLesson Test.java,http:/www.sunxin.org Download:http:/,import语句,引入包中的类。import java.io.File;引入整个包。import java.io.*;在同一包中的类可以互相引用,无需import语句。,http:/ww

30、w.sunxin.org Download:http:/,类的说明符,类的访问说明符(1)public(2)default(不加访问说明符时)类的其它修饰符(1)final(2)abstract,http:/www.sunxin.org Download:http:/,方法的说明符,方法的访问说明符(1)public(2)protected(3)default(不加访问说明符时)(4)private方法的其它修饰符(1)static(2)final(3)abstract(4)native(5)synchronized,http:/www.sunxin.org Download:http:/,方

31、法的访问控制,不同情形下,访问说明符,http:/www.sunxin.org Download:http:/,方法的访问控制,不同情形下,访问说明符,http:/www.sunxin.org Download:http:/,方法的访问控制,不同情形下,访问说明符,http:/www.sunxin.org Download:http:/,方法的访问控制,不同情形下,访问说明符,http:/www.sunxin.org Download:http:/,方法的访问控制,不同情形下,访问说明符,http:/www.sunxin.org Download:http:/,final方法,为了确保某个函数

32、的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。class中所有的private和static方法自然就是final。,http:/www.sunxin.org Download:http:/,抽象方法和抽象类,在类中没有方法体的方法,就是抽象方法。含有抽象方法的类,即为抽象类。如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为

33、一个抽象类。我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。,http:/www.sunxin.org Download:http:/,native方法,native方法是用户在Java中可以使用,但不能编写的方法。JNI(Java Native Interface),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C+、汇编语言)编写的应用程序和库进行互操作。JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影

34、响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。JNI可以理解为Java和本地应用程序之间的中介。,http:/www.sunxin.org Download:http:/,接口,接口中所有的方法都是public abstract。在接口中声明方法时,不能使用native、static、final、synchronized、private、protected等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。,http:/www.sunxin.org Downloa

35、d:http:/,接口,接口中可以有数据成员,这些成员默认都是public static final。,http:/www.sunxin.org Download:http:/,Math.javainterface Mathdouble PI=3.1415926;class Arithmetic implements Mathdouble roundArea(double radius)return PI*radius*radius;class Studentpublic static void main(String args)Arithmetic a=new Arithmetic();Sy

36、stem.out.println(a.roundArea(3);System.out.println(Math.PI);/okSystem.out.println(Arithmetic.PI);/okSystem.out.println(a.PI);/ok,接口,一个接口可以继承自另一个接口。Java中不允许类的多继承,但允许接口的多继承。,http:/www.sunxin.org Download:http:/,Sofa.javainterface Sittablevoid sit();interface Lievoid sleep();interface Chair extends Sit

37、tableinterface Sofa extends Sittable,Lie,http:/www.sunxin.org Download:http:/,接口,在Java中,一个类可以实现多个接口。一个类在继承另外一个类的同时,可以实现多个接口。,http:/www.sunxin.org Download:http:/,Sofa.java/实现多个接口interface Sittablevoid sit();interface Lievoid sleep();class Sofa implements Sittable,Liepublic void sit()public void slee

38、p(),http:/www.sunxin.org Download:http:/,Sofa.java/在继承类的同时,实现多个接口interface Sittablevoid sit();interface Lievoid sleep();interface HealthCarevoid massage();class Chair implements Sittablepublic void sit();class Sofa extends Chair implements Lie,HealthCarepublic void sleep();public void massage();,内部类

39、,在一个类中定义另外一个类,这个类就叫做内部类或内置类(inner class)。内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性。当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。,http:/www.sunxin.org Download:http:/,class Outerprivate int index=100;void print()Inner i=new Inner();i.print();cl

40、ass Innervoid print()System.out.println(index);class Testpublic static void main(String args)Outer o=new Outer();o.print();,o,this,i,main,o.print,i.print,this,栈内存,堆内存,Outer类对象,Inner类对象,Outer.this,http:/www.sunxin.org Download:http:/,内部类,在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明final。内部类可以声明为private或

41、protected;还可以声明为abstract或final。内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员。,http:/www.sunxin.org Download:http:/,内部类,我们为什么使用内部类1、在内部类(inner class)中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的代码,增强代码的可读性。2、内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口

42、,可以更好地定位与接口关联的方法在代码中的位置。3、内部类的更多用法。,http:/www.sunxin.org Download:http:/,异常类的层次结构,http:/www.sunxin.org Download:http:/,异常处理,打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。Java中的异常类定义了程序中遇到的轻微的错误条件。Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要我们去处理。,http:/www.sunxin.org Download:http:/,异

43、常处理,Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。try/catch/finally语句。,http:/www.sunxin.org Download:http:/,异常处理,对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理

44、。如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract base class和interface中。,http:/www.sunxin.org Download:http:/,Java编程规范,package的命名 package 的名字由全部小写的字母组成,例如:cn.mybole。class和interface的命名 class和interface的名字由大写字母开头而其他字母都小写的单

45、词组成,例如:Person,RuntimeException。class变量的命名 变量的名字用一个小写字母开头,后面的单词用大写字母开头,例如:index,currentImage。class方法的命名 方法的名字用一个小写字母开头,后面的单词用大写字母开头,例如:run(),getBalance()。static final变量的命名 static final变量的名字所有字母都大写,并且能表示完整含义。例如:PI,PASSWORD。参数的命名 参数的名字和变量的命名规范一致。数组的命名 数组应该总是用这样的方式来命名:byte buffer。,http:/www.sunxin.org D

46、ownload:http:/,附:JVM 规格描述,JVM定义了控制Java代码解释执行和具体实现的五种规格JVM指令系统JVM寄存器JVM栈结构JVM碎片回收堆JVM存储区,http:/www.sunxin.org Download:http:/,附:JVM 规格描述,JVM指令系统 JVM指令系统同其他计算机的指令系统极其相似。Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,操作数紧随在操作码的后面,其长度根据需要而不同。操作码用于指定一条指令操作的性质(在这里我们采用汇编符号的形式进行说明),如iload表示从存储器中装入一个整数,anewarray表示为一个新数组分配

47、空间,iand表示两个整数的“与”,ret用于流程控制,表示从对某一方法的调用中返回。当长度大于8位时,操作数被分为两个以上字节存放。JVM采用了“big endian”的编码方式来处理这种情况,即高位bits存放在低字节中。这同 Motorola及其他的RISC CPU采用的编码方式是一致的,而与Intel采用的“little endian”的编码方式即低位bits存放在低位字节的方法不同。Java指令系统是以Java语言的实现为目的设计的,其中包含了用于调用方法和监视多线程系统的指令。,http:/www.sunxin.org Download:http:/,附:JVM 规格描述,JVM寄

48、存器 所有的CPU均包含用于保存系统状态和处理器所需信息的寄存器组。如果虚拟机定义较多的寄存器,便可以从中得到更多的信息而不必对栈或内存进行访问,这有利于提高运行速度。然而,如果虚拟机中的寄存器比实际CPU的寄存器多,在实现虚拟机时就会占用处理器大量的时间来用常规存储器模拟寄存器,这反而会降低虚拟机的效率。针对这种情况,JVM只设置了4个最为常用的寄存器。它们是:pc程序计数器 optop操作数栈顶指针 frame当前执行环境指针 vars指向当前执行环境中第一个局部变量的指针 所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。,ht

49、tp:/www.sunxin.org Download:http:/,附:JVM 规格描述,JVM栈结构 作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:局部变量 执行环境 操作数栈局部变量用于存储一个类的方法中所用到的局部变量。vars寄存器指向该变量表中的第一个局部变量。执行环境用于保存解释器对Java字节码进行解释过程中所需的信息。它们是:上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。执行环境是执行一个方法的控制中心。例如:如

50、果解释器要执行iadd(整数加法),首先要从frame寄存器中找到当前执行环境,而后便从执行环境中找到操作数栈,从栈顶弹出两个整数进行加法运算,最后将结果压入栈顶。操作数栈用于存储运算所需操作数及运算的结果。,http:/www.sunxin.org Download:http:/,附:JVM 规格描述,JVM碎片回收堆 Java类的实例(对象)所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号