资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,李 粤,liyue,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,JAVA,程序设计,教程,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,第 四 讲,第七章(续,)+,复习,+,自动装箱拆箱,学习目标,掌握,Final,类,掌握主要方法的作用,温故,理解自动装箱,+,自动拆箱,2,final(1),final,关键字,这是无法改变的;,适用范围:数据、方法和类,对基本数据类型而言,数值恒定不变;,对对象而言,引用恒定不变;,3,final(2),final,数据,一个永不改变的编译时常量,常量必须是基本数据类型;,常量必须赋值;,可以在编译时执行包含该常量的计算式。,一个在运行时被初始化的值,不希望被改变;,对象,恒定应用不变;,对象的数据本身可以修改;,数组也是一种对象。,static+final,意味着只占据一个不能改变的存储空间,变量名全部大写,并用下划线分割各个单词;,4,5,final(3),空白,Final,被声明为,final,但又没给定初值的数据。,但是数据在被使用前必须被初始化。,一个类中的,final,域可以做到根据对象而又所不同,却又保持其恒定不变的特性。,6,7,final(4),final,参数,允许在参数列表中以声明的方式将参数指明为,final,;,无法在方法中更改参数引用所指向的对象;,8,9,final(5),final,方法,为啥用:,锁定方法。防止任何继承类修改它的含义,即改方法不能被覆盖。,Private,方法都隐式地指定为,final,。,private,方法加,final,是多余。,10,final(6),final,类,该类不允许被继承,或者说不允许该类有子类(或导出类);,11,12,?,初始化温故环节,13,14,15,16,17,初始化顺序总结(,1,),初始化顺序,静态定义初始化,(包括静态块),;,非静态定义初始化;,构造器初始化;,变量定义的初始化在任何方法(包括构造器)被调用前。,一个类只初始化一次,18,19,20,21,初始化顺序总结(,2,),初始化顺序,编译时就初始化主类的静态定义(包括静态块);,执行主类的,main,方法,声明主类对象,依次初始化非静态定义和构造器;,声明其他类对象,依次初始化静态定义、非静态定义和构造器;,一个类只初始化一次,22,初始化顺序总结,-,继承(,3,),初始化顺序,编译时先初始化主类的基类的静态定义(包括静态块),再初始化主类的;,执行主类的,main,方法,声明主类对象,先依次初始化主类的基类的非静态定义和构造器,再初始化主类的;,声明其他类对象,先依次初始化其他类的基类的静态定义、非静态定义和构造器,再初始化其他类;,23,24,WHATJAVA,(,6,),2004,至今,JDK,的壮年期,易用(相对复杂),加了诸如泛型、增强的,for,语句、可变数目参数、注释,(Annotations),、自动拆箱(,unboxing,)和装箱等功能,;,也更新的企业级规范,如通过注释等新特性改善了,EJB,的复杂性,并推出了,规范。,又针对,JSP,的前端界面设计而推出了,JSF,。这个,JSF,类似于,的服务端控件。通过它可以很快地建立起复杂的,JSP,界面。,25,对象,vs,类,对象就像是一个具体的工具;,类定义了这个工具如何产生;,一张剪刀的设计图,根据图设计出来的剪刀,26,P23,Char c = x;,Character ch = new Character(x);,Character ch = x;,Char c = ch;,27,打包基本数据类型,Long,、,Integer,、,Double,、,Float,、,Boolean,等类就是所谓的,Wrapper,类。,目的:提供一个对象实例作为“壳”,将基本数据类型包到这个对象中。可以将基本数据类型当作对象一样操作。,28,打包:对这种基本数据类型的主要操作进行了打包,29,自动装箱,Integer integer = new Integer(10);,Integer integer = 10;,int i = 10;,Integer integer = I;,Number number = 3.14f;,类,30,自动拆箱,将对象中的基本数据形态信息从对象中自动取出。,Integer fooInteger = 10;,int fooPrimitive = fooInteger;,fooInteger,变量在自动装箱为,Integer,的实例后,如果被指定给一个,int,类型的变量,fooPrimitive,,则会自动变为,int,类型,再指定给,fooPrimitive,。,31,自动拆箱(,2,),Integer i = 10;,System.out.println(i + 10);,System.out.println(i+);,运算时也能自动装箱与拆箱,Boolean boo = true;,System.out.println(boo ,32,自动装箱,+,自动拆箱,编译器在编译时依据语法,决定是否进行装箱或拆箱动作。,Integer integer = 10;,Integer integer = new Integer(10);,Integer i = null;,int j = i;,Integer i = null;,int j = i.intvalue();,33,?,i1 = i2,34,?,i1 !S= i2,35,自动装箱,+,自动拆箱,-128127,:装箱为,Integer,对象后,,会,在内存中被重用;,AuboxDemo2,中,=,比较,,i1,和,i2,实际上参考至同一个对象;,超过,-128127,:装箱为,Integer,对象后,,不会,在内存中被重用,即每次装箱时都新建一个,Integer,对象;,AuboxDemo3,中,=,比较,,i1,和,i2,参考至不同一个对象;,36,37,
展开阅读全文