




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章:开始一)基础实验:1. 在Linux下安装JDK,配置环境变量安装JDK:sudo chmod 777 /optcp jdk-6u24-linux-i586.bin/optcd /optchmod a+x jdk-6u24-linux-i586.bin./jdk-6u24-linux-i586.bin配置环境变量:cp /.bahsrc /.bashrc.bakvi /.bashrcG=到文件结尾o=下一行输入JAVA_HOME=/opt/jdk1.6.0_24PATH=JAVA_HOME$/bin:$PATHCLASSPATH=.export JAVA_HOME PATH CLASSPATH:wq. /.bashrcjavacecho $JAVA_HOME2. 编辑、编译、运行一个带有包名的Hello.java,输出Hello World!vi Hello.java(example/chap01/src/Hello.java)javac d bin src/Hello.javajava cp bin com.briup.chap01.Hello3. 编辑、编译、运行一个带有包名的MymathTest.java,完成整数的加减运算vi MymathTest.java(example/chap01/src/MymathTest.java)javac d bin src/ MymathTest.javajava cp bin com.briup.chap01. MymathTest二)扩展实验:1. JVM组成类装载器:将java字节码加载到内存运行时数据区:方法区:类型信息堆区:对象栈区:保存方法调用状态,如局部变量、参数、返回值PC寄存器:指向下一条将要执行的指令本地方法栈:保存本地方法调用状态执行引擎:运行类方法中的指令三)作业:1. 什么是JDK,其包括哪些内容Java Development Kit(Java开发工具包),JDK主要包括内容:a. Java虚拟机:负责解析和执行Java程序,Java虚拟机可运行在各种平台上;b. JDK类库:提供最基础的Java类及各种实用类,java.lang、java.io、java.util,、javax.swing、java.sql等包中的类都位于JDK类库中。c. 开发工具:这些开发工具都是可执行程序,主要包括:javac编译工具;java运行工具;javadoc生成JavaDoc文档的工具jar打包工具2. 和java相关的环境变量有那几个,它们有什么作用JAVA_HOME:简化其它变量设置过程中的内容输入。可先行将JDK的安装路径定义为一变量,以后凡使用到JDK安装路径的地方均使用该变量进行替换。 PATH:指定执行外部命令时找寻对应可执行文件的路径范围。CLASSPATH:代表Java类的根路径,java命令会从CLASSPATH中寻找所需的Java类;Java编译器编译Java类时,也会从CLASSPATH中寻找所需的Java类;classpath的默认值为当前路径。3. java的优秀特性跨平台:字节码跨平台,在任何平台上字节码都一样,但不同平台有不同平台的JVM易编程:没有指针(垃圾回收器)、面向对象(符合人类思考方式)代码安全:有字节码校验器,适合在网络传输4. 字节码校验器验证哪些内容代码和jvm规范一致代码不能破坏系统的完整性没有堆栈的上溢和下溢参数类型是正确的类型转换是正确的5. java程序编辑、编译、运行过程vi xxx.javajavac xxx.javajava xxx6. java中包的作用将有关联关系的类组织在一起,便于管理;解决命名冲突问题7. 什么是API,如何查看APIApplication Programming Interface先查看packageclass/interfacefield/constructor/method8. 修正Test1.java、Test2.java、Test3.java、Test4.java四个java源文件中的错误,使其能够编译和运行(exercise/chap01)第二章:标识符、关键字、类型1) 基础实验:1. 单行、多行注释例子example/chap02/src/CommentTest.java2. 写一java程序添加文档注释,通过javadoc产生API文档(包含作者、版本等信息)example/chap02/src/CommentTest2.javajavadoc -d ./doc -author -version src/CommentTest2.java3. 数据类型测试例子example/chap02/src/TypeTest.java4. 类、对象测试例子example/chap02/src/Teacher.javaexample/chap02/src/TeacherTest.java二)扩展实验:1. 找零问题:有2元,买东西花了1.1元,问找零多少?System.out.println(2.00-1.10);注意:在需要精确答案的地方,要避免使用float或double;对于货币计算,要使用int、long或BigDecimal2. 长整除问题:long micros_per_day = 24 * 60 * 60 * 1000 * 1000;long millis_per_day = 24 * 60 * 60 * 1000;System.out.println(micros_per_day / millis_per_day);输出结果。注意:当你操作很大的数字时,一定要提防溢出;较大整数运算可使用BigInteger3. 初级问题System.out.println(12345 + 5432l)输出结果。注意:做题要细心;在long类型字面常量中,一定要用大写的L三)作业:1. java中注释的分类java中注释分三类/:单行注释,如描述一个变量的作用/* */:多行注释,如描述类的作用、方法的作用、复杂算法的描述/* */:文档注释,需产生API文档时使用2. java中标示符的命名规则1) 以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合2) 大小写敏感3) 没有长度限制4) 不能使用关键字3. java中有哪些常用的基本数据类型boolean、整型族(byte、short、int、long)、浮点型(float、double)、字符型(char)4. 类和对象的概念类是现实世界中,具有相同属性和行为的事物的抽象(如鸟类、鱼类、人类)。对象是类的具体化(万物皆对象、每个对象都是唯一的)。5. 基本数据类型和引用类型的区别1) 基本类型代表简单的数据类型,比如整数和字符。引用类型代表复杂数据类型,引用类型所引用的实例包括操纵这种数据类型的行为。通过.运算符,就能访问引用变量所引用的实例的方法.2) 基本类型Java虚拟机会为其分配数据类型实际占用的内存空间;引用类型仅是一个指向堆区中某个实例的指针。例:public class Counter int count = 13;Counter counter = new Counter();counter引用变量- Counter实例count变量(占4个字节,值为13)counter引用变量的取值为Counter实例的内存地址。counter引用变量本身也占一定的内存空间,到底占用多少内存空间取决于Java虚拟机的实现,这对Java程序是透明的。注:counter引用变量到底位于Java虚拟机的运行时数据区的哪个区?取决于counter变量的作用域,如果是局部变量,则位于Java栈区;静态成员变量,则位于方法区;实例成员变量,则位于堆区;6. 编程(exercise/chap02/exercise1)1)模仿Teacher类创建Student类要求:Student类要描述姓名、性别、年龄2)模仿TeacherTest类创建StudentTest类要求: a) 在StudentTest类中创建Student的对象 b) 为该对象的属性(姓名、性别、年龄)赋值 c) 将该对象的属性(姓名、性别、年龄)输出7. 编程(exercise/chap02/exercise2)1)为Teacher类添加一个方法,用于在教师原有薪水的基础上增加50002)修改TeacherTest类,增加对教师增加薪水方法的调用,并将增加后的薪水值输出8. 编程(exercise/chap02/exercise3)已知类MyPoint表示一个二维的点,其定义如下:public class MyPoint public int x; public int y; public String toString() return ( + x + , + y + ); 使用上面已提供的MyPoint类,建立一个TestMyPoint程序,该程序执行下列操作:1)定义两个类型为MyPoint的变量,变量名为:start 和 end。每个变量赋值一个新的MyPoint的对象。2)将start 的 x 和 y 值设置为10,end的 x值设置为20,y值为30。3)打印输出这两点变量,使用类似于如下的代码:System.out.println(“Start point is ”+start);4)编译运行TestMyPoint。5)声明一个类型为MyPoint的新变量,名为stray 将现有变量end 的引用值赋值给stray。6)打印输出stray 和 end 。7)将新值赋值给stray 变量的 x 和 y成员。打印输出stray end start。8)编译运行TestMyPoint。end报告的值反映了stray中的变化,说明这两个变量引用的似同一个MyPoint对象。但是,start并没有改变,说明start与另两个变量无关。输出结果应与下面类似:Start point is 【10,10】End point is 【20,30】 Stray point is 【20,30】End point is 【20,30】 Stray point is 【47,50】End point is 【47,50】Start point is 【10,10】第三章:表达式和流程控制一)基础实验:1. 局部变量和实例变量测试例子example/chap03/src/VariableTest.java2. 操作符测试例子example/chap03/src/OperatorTest.javaexample/chap03/src/BitTest.java位运算3. if语句测试例子example/chap03/src/IfTest1.javaexample/chap03/src/IfTest2.java判断闰年4. switch语句测试例子example/chap03/src/SwitchTest.javaexample/chap03/src/Days.java某一年月有多少天5. for、while、do while循环语句测试例子example/chap03/src/LoopTest.java三种循环实训1累加到100example/chap03/src/LoopRandom.java产生10个200,500间的随机数example/chap03/src/GcdLcm.java求两个数的最大公约数和最小公倍数6. break、continue关键字测试例子example/chap03/src/BreakContinueTest.java2) 扩展实验:1. 复合赋值short x = 0;int i = 123456;x += i;/编译通过,x = -7616x = x + i;/编译错误注意:复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型2. 判断奇数public boolean isOdd(int i)return i % 2 = 1;/return i % 2 != 0;注意:当取余操作返回一个非零的结果时,它与左操作数具有相同的正负符号3. 逻辑操作符&和位运算符&区别注意:&是位运算符,可以进行逻辑运算,但不会逻辑短路4. 条件运算符int a = 20;int b = 10;char c = x;int i = 0;System.out.println(a b ? c : 0);System.out.println(a b ? i : c);注意:除非彻底理解表达式行为的复杂规范,通常最好在条件表达式中使用类型相同的第二和第三操作数5. 类型转换System.out.println(int)(char)(byte) - 1);注意:计算机中,数都以补码的形式存放,正数的补码是其本身,负数的补码是其绝对值取反加1;如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码;如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1.类型转换时,如果最初的数值类型是有符号的,那么就执行符号扩展;如果它是char,那么不管将要被转换成什么类型,都执行零扩展三)作业:1. 编程exercise/chap03第四章:数组一)基础实验:1. 数组基础(声明、创建、初始化、赋值)测试例子example/chap04/src/ArrayTest.javaexample/chap04/src/ArrayTest2.java2. 求一组数的平均值example/chap04/src/ArrayAvgTest.java3. 求一组数的最大值example/chap04/src/ArrayMaxTest.java4. 冒泡排序example/chap04/src/ArraySortTest.java5. java辅助类java.util.Arrays辅助类的sort(int n)以及binarySearch(int n,int key)example/chap04/src/ArraySortTest2.java6. 随机抽取中奖手机号码example/chap04/src/RandomTelphone.java7. 产生4位验证码example/chap04/src/ValidateCode.java8. 多维数组测试例子example/chap04/src/MultiArray.java9. 填充二维方阵example/chap04/src/Martrix.java10. 数组拷贝example/chap04/src/ArrayCopy.java二)扩展实验:1. 产生100个1,6的整数,并统计每个整数出现的频率example/chap04/src/Frequency.java三)作业:1. 编程exercise/chap04第五章:面向对象编程1) 基础实验:1) java的三大特性是哪些?每个特性的具体含义是什么?2) 范围修饰符有几种?分别代表什么范围?3) 什么是构造器?a) 构造器就是和类名相同但无返回类型的方法4) 重写和重载的区别?a) 重写是子类的方法覆盖父类的方法,要求方法名和参数都相同b) 重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数5) 类的创建和初始化i.example/chap05/Employee.java ii.example/chap05/EmployeeTest.java6) 参数传递i. example/ch05/ParamterTest.javaii. example/chap05/Student.java7) this关键字的使用a) example/ch05/Student.javab) example/ch05/StudentTest.java8) 类的创建顺序a) example/ch05/ObjectInit.java9) 重载的构建a) example/ch05/OverloadTest.java10) 继承的使用a) example/ch05/Person.javab) example/ch05/Employee.javac) example/ch05/EmployeeTest.java11) 说明super关键字的使用情况a) 可以调用父类的属性和方法b) 可以区分子类和父类的属性和方法c) 调用父类构造器12) 多态的练习a) example/ch05/Shape.javab) example/ch05/ShapeTest.java2) 扩展实验:a) 参考值传递和引用传递的不同方式来分析书上ParamterTest.java程序i. 前两个输出i值都为2 基本类型参数值传递的过程是参数拷贝过程ii. 第三个输出是”zhao”,”male”,20,第四个输出是”larry”,”male”,20引用类型参数值传递的过程是堆区地址传递的过程 iii. 最后两个输出都是”zhao”,”male”,20.最后一个的参数又重新开辟的 一段内存,与原来的不是同一个地址,所以互不影响.b) 通过实例说明一下重载的二义性,提出解决办法i. 处理结果存在不确定性eg:add(int a,float b)add(float a,int b)add(10,10) ii. 强制类型转换或者精确对应参数c) 什么时候使用instanceof关键字i. 当一个变量没办法说明在哪一个类域时,通过使用instanceof关键字可以进行判断ii. if(kevin instanceof Manager) Manager manager = (Manager)kevin;.三)作业:1.编程exercise/chap05第六章:高级语言特性1) 基础实验:1).static变量和实例变量的区别?a) static变量对于每个类而言在内存中只有一个,能被类的所有实例所共享;实例变量对于每个类的每个实例都有一份,它们之间互不影响;b) Java虚拟机在加载类的过程中为static变量分配内存,实例变量在加载完类后创建对象时分配内存;c) static变量存在方法区,实例变量存在堆区;d) static变量可以直接通过类名访问,实例变量通过引用类型变量访问;2) 分析Count.java代码,说明里面所对应的值.a) 第一次count值为1 serialName值为1 b) 第二次count值为2,serialName值为23) Static的使用a) example/ch06/DogTest.java 4) 利用static实现单例模式example/ch06/SingletonTest.java4) Final修饰符的作用?a) Final修饰的变量是不能被更改b) Final修饰的class不能被继承c) Final修饰的方法不能被重写5) Final的使用a) examle/ch06/FinalTest.java6) abstract修饰符的作用?a) 可用来修饰类和成员方法。i. 用abstract修饰的类表示抽象类,抽象类不能实例化,即不允许创建抽象类本身的实例。没有用abstract修饰的类称为具体类,具体类可以被实例化。ii. 用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。iii. 没有abstract修饰的方法称为具体方法,具体方法具有方法体。b) 语法规则;1) 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类; 2) 没有抽象构造方法,也没有抽象静态方法; 3) 抽象类中可以有非抽象的构造方法;4) 抽象类及抽象方法不能被final修饰符修饰。7) abstract的使用example/ch06/AnimalTest.java8) 描述接口a) 一个类只能继承一个直接的父类,但能实现多个接口b) 接口是抽象类的抽象,抽象类可存在有方法体的方法,接口中的方法全部为抽象方法c) 接口中的所有方法均是抽象方法, 默认都是public、abstract类型的d) 接口中的成员变量默认都是public, static, final类型,必须被显式初始化e) 接口中没有构造方法,不能被实例化9) 接口的使用a) example/ch06/Runner.javab) example/ch06/PersonTest.javac) example/ch06/Test.javad) example/ch06/CatTest.javae) example/ch06/DriverTest.java10) 内部类的使用a)静态内部类:i. 静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例ii. 静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,就必须通过外部类的实例去访问。iii. 在静态内部类中可以定义静态成员和实例成员iv. 可以通过完整的类名直接访问静态内部类的静态成员b) 实例内部类:i. 在创建实例内部类的实例时,外部类的实例必须已经存在ii. 实例内部类的实例自动持有外部类的实例的引用。在内部类中, 可以直接访问外部类的所有成员,包括成员变量和成员方法iii. 外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例对应零个或多个内部类实例。在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问。iv. 实例内部类中不能定义静态成员,而只能定义实例成员v. 如果实例内部类B与外部类A包含同名的成员,那么在类B中, this.v表示类B的成员, A.this.v表示类A的成员。 vi. 局部内部类和实例内部类一样,可以访问外部类的所有成员,此外,局部内部类还可以访问所在方法中的final类型的参数和变量 c) 局部内部类;i. 在一个方法中定义的内部类,它的可见范围是当前方法。和局部变量一样,局部内部类不能用访问控制修饰符(public, private和protected)及static修饰符来修饰ii. 局部内部类和实例内部类一样,不能包含静态成员11) 内部类的使用a) 实例内部类:example/ch06/InstanceInnerClass.javab) 静态内部类:example/ch06/StaticInnerClass.javac) 局部内部类example/ch06/LocalInnerClass.javad) 匿名内部类example/ch06/AnonymousInnerClass.javae) 内部类example/ch06/ RobotTest.java12) 封装类的作用1) 用引用类型表示数值;例如表示一个缺考学生的成绩;2) 有些场合必须要引用类型;例如集合中只能存储引用类型;3) 实现基本类型间以及与字符串间转换;example/ch06/IntegerTest.java 13) 集合a) Collection和Iterator接口1).在Collection接口中声明了适用于Set和List的通用方法: boolean add(Object o): 向集合中加入一个对象的引用; void clear(): 删除集合中的所有对象引用,即不再持有这些对象的引用; boolean contains(Object o): 判断在集合中是否持有特定对象的引用; boolean isEmpty(): 判断集合是否为空; Iterator iterator(): 返回一个Iterator对象,可用它来遍历集合中的元素; boolean remove(Object o): 从集合中删除一个对象的引用; int size(): 返回集合中元素的数目; Object toAttray(): 返回一个数组,该数组包含集合中的所有元素; 2) Iterator接口隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一方法。Iterator接口中声明方法: hasNext(): 判断集合中的元素是否遍历完毕,如没有,就返回true; next(): 返回下一个元素; remove(): 从集合中删除上一个由next()方法返回的元素; b) List接口及其实现类的使用 主要特征是其元素以线性方式存储,集合中允许存放重复对象。 主要实现类包括:1)ArrayList: 代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢;2)LinkedList: 在实现中采用链表结构。对顺序访问进行了优化,向List中插入和删除元素的速度较快,随机访问速度则相对较慢。随机访问是指检索位于特定索引位置的元素。3)Vector类:与ArrayList一样也实现了List接口,表示一个可变的对象数组;与ArrayList的差别:Vector是同步(线程安全)的,占用的资源多一些,运行效率要低一些,主要用在多线程环境下,ArrayList是不同步的,适合在单线程环境下使用4)使用:example/ch06/ArrayListTest.java c) Set接口及其实现类的使用 Set集合中存放的是对象的引用,并且没有重复对象。 主要实现类包括: 1)HashSet: 按照哈希算法来存取集合中的对象,存取速度比较快; 2)LinkedHashSet: HashSet子类,不仅实现Hash算法,还实现链表数据结构,链表数据结构能提高插入和删除元素的性能; 3)TreeSet: 实现SortedSet接口,具有排序功能; 4)使用:example/ch06/HashSetTest.javaexample/ch06/Student.javaexample/ch06/HashSetTest2.javaexample/ch06/TreeSetTest.javaexample/ch06/TreeSetTest1.java d)Map接口及其实现类的使用 Map是一种把键对象和值对象进行映射的集合,它的每一个元素都包含一对键对象和值对象。向Map集合中加入元素时,必须提供一对键对象和值对象,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。主要实现类包括:1)HashMap 按哈希算法来存取键对象,有很好的存取性能,为了保证HashMap能正常工作,和HashSet一样,要求当两个键对象 通过equals()方法比较为true时,这两个键对象的hashCode()方法返回的哈希码也一样。 2)TreeMap 实现了SortedMap接口,能对键对象进行排序。和TreeSet一样,TreeMap也支持自然排序和客户化排序两种方式。 3)使用 example/ch06/HashMapTest.java 14) 反射 a)一个对象或者类获得自身的Class对象的过程称为反射。b)有两种方法可以获得自身的Class对象引用(对每一个被装载的类型(类或接口),虚拟机都会为它创建一个 java.lang.Class的实例): i) Class c = Class.forName(“com.briup.ch06.Student”); /虚拟机中没有该类的Class的实例对象 ii) Class c = stu.getClass(); /虚拟机已经存在Class的实例对象 Class c = this.getClass(); /虚拟机已经存在Class的实例对象c) 利用反射编程的基本步骤i) 获得Class对象;ii) 利用Class对象的方法获得类型的相关信息;iii) 访问/操作类型成员。d)使用example/ch06/ReflectTest1.javaexample/ch06/User.javaexample/ch06/ReflectTest2.javaexample/ch06/ReflectTest3.java2) 扩展实验:1)抽象类和接口比较1. 相同点: a. 都不能被实例化; b. 都能包含抽象方法;2. 不同点; a. 抽象类中可以为部分方法提供默认的实现,从而避免子类中重复实现它们,提高代码的可重用性,而接口中只能包含抽象方法; b. 一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现多个接口,这是接口的优势所在。2)几种内部类的区别a. 声明的位置: 静态内部类:类的内部,方法的外部,用static关键字修饰;实例内部类:类的内部,方法的外部,不用static关键字修饰;局部内部类:方法的内部;匿名内部类:既可以在类的内部,方法的外部,也可以在方法的内部;b. 实例化方式:静态内部类:new Outer.Inner(); /在外部类外创建; new Inner(); /在外部类内内部类外创建实例内部类:new Outer().new Inner(); /在外部类外创建; this.new Inner(); /在外部类内内部类外创建 局部内部类:new Inner(); /只能在方法内部创建; 匿名内部类:new 类名() ; 强制类型转换或者精确对应参数c) HashMap和HashTable的区别i).hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。ii).hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。iii).hashMap允许空键值,而hashTable不允许。三)作业:1.编程exercise/chap06第七章:异常一) 基础实验:1.异常基本概念 a). 异常产生的条件, 或者称为异常情况。在Java代码中哪些是异常情况呢? 例如: i. 整数相除运算中,分母为0; ii. 通过一个没有指向任何具体对象的引用去访问对象的方法; iii. 使用数组长度作为下标访问数组元素; iv. 将一个引用强制转化成不相干的对象;等等; b). 异常会改变正常程序流程; 异常产生后,正常的程序流程被打破了,要么程序中止,要么程序被转向异常处理的语句;c). 当一个异常的事件发生后,该异常被虚拟机封装形成异常对象抛出。 d). 用来负责处理异常的代码被称为异常处理器 f). 通过异常处理器来捕获异常2.trycatch语句 在Java语言中,用try.catch语句来捕获处理异常。格式如下: try 可能会出现异常情况的代码; catch(异常类型 异常参数) 异常处理代码 catch(异常类型 异常参数) 异常处理代码 1). 如果try代码块中没有抛出异常,try代码块中语句会顺序执行完,catch代码块内容不会被执行; 2). 如果try代码块中抛出catch代码块所声明的异常类型对象,程序跳过try代码块中接下来代码,直接执行catch代码块中对应内容; a. 可以存在多个catch代码块,究竟执行哪个,看抛出的异常对象是否是catch代码块中异常类型; b. 异常只能被一个异常处理器所处理, 不能声明两个异常处理器处理相同类型的异常; c. 多个catch语句块所声明的异常类型不能越来越小; d. 不能捕获一个在try语句块中没有抛出的异常; 3). 如果try代码块中抛出catch代码块未声明的异常类型对象,异常被抛给调用者;哪个调用了这段语句块哪个负责处理这个异常;4)使用example/ch07/PropertiesTest.java3.finally语句 任何情况下都必须执行的代码 Example/ch07/ExceptionTest.java4.异常层级关系 所有异常类的祖先类为java.lang.Throwable类。它有两个直接的子类: 1). Error类:表示仅靠程序本身无法恢复的严重错误,比如内存空间不足,或者Java虚拟机的方法调用栈溢出。在大多数情况下,遇到这样的错误时,建议让程序终止。 2). Exception类:表示程序本身可以处理的异常。Exception还可以分为两种:运行时异常和受检查异常。a).运行时异常RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常时,即使没有用try.catch语句捕获它,也没有用throws子句声明抛出它,还是会编译通过。例如divide()方法的参数b为0, 执行a/b操作时会出现ArithmeticException异常,它属于运行时异常,Java编译器不会检查它。b). 受检查异常 除了RuntimeException及其子类以外, 其他的Exception类及其子类都属于受检查异常(Checked Exception)。 这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常时,要么用try.catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。5. 异常声明和处理 1). 使用throw声明代码会倒致异常; 2). 使用try-catch-finally语句结构处理或在方法声明上声明throws继续抛出;异常处理语句的语法规则: i). try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块。 ii). try代码块后面可以有零个或多个catch代码块,还可以有零个或至多一个finally代码块。如果catch代码块和finally代码块并存,finally代码块必须在catch代码块后面。 iii). try代码块后面可以只跟finally代码块。 iv). 在try代码块中定义的变量的作用域为try代码块,在catch代码块和finally代码块中不能访问该变量。 v). 当try代码块后面有多个catch代码块时,Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常或其子类的实例,就执行这个catch代码块,而不会再执行其他的catch代码块。 vi). 如果一个方法可能出现受检查异常,要么用try.catch语句捕获,要么用throws子句声明将它抛出。 vii). throw语句后面不允许紧跟其它语句,因为这些语句永远不会被执行。6.自定义异常 可以定义自己的异常类,继承Exception,必须人工抛出; example/ch07/SelfException 7.断言 JDK1.4引入,在java程序中加入检查语句,主要用于程序调试; 断言机制 在程序中定义的boolean表达式(假定条件)不成立时(即返回false),系统将产生一个Error对象,类型为AssertionError类型;在约定条件不成立的情况下需要终止程序操作时使用断言;断言作为Error的一种,断言失败不必进行铺获处理或者声明抛出,一旦出现终止程序,不必进行补救和恢复。 使用 assert boolean表达式:表达式 断言用于程序调试,java运行时环境默认关闭断言功能; 开启断言功能:java -ea classname或者java -enableassertions classname 关闭断言功能:java -da classname或者java -disableassertions classname二)扩展实验: 1. 异常调用栈 异常处理时所经过的一系列方法调用过程被称为异常调用栈。 1). 异常的传播 哪个调用,哪个处理; a. 异常情况发生后,发生异常所在的方法可以处理; b. 异常所在的方法内部没有处理,该异常将被抛给该方法调用者,调用者可以处理; c. 如调用者没有处理,异常将被继续抛出;如一直没有对异常处理,异常将被抛至虚拟机; 2). 如果异常没有被捕获,那么异常将使你的程序将被停止。 异常产生后,如果一直没有进行捕获处理,该异常被抛给虚拟机。程序将被终止。 3). 经常会使用的异常API getCause():返回类型是Throwable,该方法获得Throwable的异常原因或者null。 getMessage():获得具体的异常出错信息,可能为null。 printStatckTrace():打印异常在传播过程中所经过的一系列方法的信息,简称异常处理方法调用栈信息;在程序调试阶段,此方法可用于跟踪错误。 举例:example/ch07/CallStackTraceTest 2.常见的未检查的异常RuntimeException有哪些?分别代表什么含义? 1). java.lang.ArithmeticException 算术异常如:除0; 2). java.lang.NullPointerException 空指针引用 如:没初始化一个References便使用; 3). java.lang.ArrayIndexoutofBoundsException 数组越界如:调用一个有十个元素的Array的第十一个元素的内容; 4). java.lang.SecurityE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年国际专利市场的考试试题及答案
- 2025年度第一季度二手车交易衍生金融服务风险告知书
- 2024文化产业管理证书考试的备考策略与试题及答案
- 深入研究护士资格证考试试题及答案
- 交通协管员试题及答案
- 专利代理人资格证书的职场应用试题及答案
- 挑战光电工程师证书考试试题及答案
- 学术背景与育婴师考试的关系试题及答案
- 光电市场的竞争格局分析试题及答案
- 卫生管理呼吸系统疾病管理知识试题及答案
- 燃气工程专业中级职称理论考试题库-建设工程专业中级职称理论考试题库
- 十二指肠球部溃疡PPT课件
- 铁路建设项目施工企业信用评价办法(铁总建设〔2018〕124号)
- 诱导公式练习题-(中职)
- 2016年浦东新区公办小学招生地段
- 鸽巢问题(例1、例2)[1]
- 01戴明十四条
- 完整版佛教葬礼仪式
- 【课件】第六章 模型或原型的制作课件-高中通用技术苏教版(2019)必修《技术与设计1》
- 锅炉除氧器过程控制课程设计
- 统计法培训课PPT课件
评论
0/150
提交评论