2020.10.27(31~34)
31.Java的多态
-
多态性是OOP(面向对象)中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
-
多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。
-
实现多态的三个条件(前提条件,向上转型、向下转型)
1.继承的存在。(继承是多态的基础,没有继承就没有多态。)
2.子类重写父类的方法。(多态下会调用子类重写后的方法)
3.父类引用变量指向子类对象。(涉及子类到父类的类型转换)
-
向上转型 Animal a = new Cat();
- 将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法,此时通过父类引用变量无法调用子类特有的方法.
-
向下转型 Cat a2 = (Cat)a;
-
将一个指向子类对象的引用赋给一个子类的引用,成为向下转型,此时必须进行强制类型转换。向下转型必须转换为父类引用指向的真实子类类型,否则将出现ClassCastException,不是任意的强制转换.
-
向下转型时可以结合使用instanceof运算符进行强制类型转换,比如出现转换异常--ClassCastException.比如:本来是狗,我把它转成猫。就会报这个异常
-
32.Java的垃圾回收机制
- 传统的C/C++语言,需要程序员负责回收已经分配内存。
- 显示回收垃圾回收的特点:
- 程序忘记及时回收,从而导致内存泄露,降低系统性能。
- 程序错误回收程序核心类库的内存,导致系统崩溃。
- Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,称为垃圾回收机制,简称GC;
- 可以提高编程效率
- 保护程序的完整性
- 其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。
- 垃圾回收机制的特点:
-
垃圾回收机制回收JVM堆内存里的对象空间,不负责回收栈内存数据。
-
对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力。
-
垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。
-
可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。
-
垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象)。
-
程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。
-
永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。
-
33.基本数据类型和包装类
- 八个基本数据类型的包装类
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| boolean | Boolean |
| short | Short |
| char | Character |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
-
为什么为基本类型引入包装类
2.1 、基本数据类型有方便之处,简单、高效。
-
2、但是Java中的基本数据类型却是不面向对象的(没有属性、方法),这在实际使用时存在很多的不便(比如集合的元素只能是Object)
为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行包装,这样八个和基本数据类型对应的
类统称为包装类(Wrapper Class)。
-
-
包装类和基本数据类型之间的转换
3.1包装类------ wrapperInstance.xxxValue() ------>基本数据类型
3.2包装类<---new WrapperClass(primitive)-- new WrapperClass(string)------基本数据类型
-
自动装箱和自动拆箱
JDK1.5提供了自动装箱(autoboxing)和自动拆箱(autounboxing)功能, 从而实现了包装类和基本数据类型之间
的自动转换
-
包装类还可以实现基本类型变量和字符串之间的转换
基本类型变量------------String.valueof()------------>字符串
基本类型变量<------------WrapperClass.parseXxx(string)------------字符串
34. Integer与int的区别
-
int是java提供的8种原始数据类型之一,Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。
-
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的
情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为
null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示
时,结果为0,所以,int不适合作为web层的表单数据的类型。
- 在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是
临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。
- 另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的
最大值和最小值的常量。
浙公网安备 33010602011771号