目录
P287 向下转型的使用
还没看,有时间补
P288 instanceof关键字
为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先
进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
P289向下转型注意的几个问题
子类是可以向上转型的。
P290多态练习调用属性和方法
1.若子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法,
系统将不可能把父类里的方法转移到子类中:编译看左边,运行看右边
2.对于实例变量则不存在这样的现象,即使子类里定义了与父类完全相同的实例变量,
这个实例变量依然不可能覆盖父类中定义的实例变量:编译运行都看左边
class Base{
int count = 10;
public void display(){
System.out.println(this.count);
}
}
class Sub extends Base(){
int count = 20;
public void display(){
System.out.println(this.count);
}
}
public class FieldMethodTest {
public static void main(String[] args) {
Sub s = new Sub();
System.out.println(s.count);//20
s.display();//20
Base b = s;//多态性
//==:对于引用数据类型来讲,比较的是两个引用数据类型变量的地址值是否相同
System.out.println(b == s);//true
System.out.println(b.count);//10
b.display();//20
}
}
P291/292/293 多态练习
class Base{
public void add(int a, int... arr){
System.out.println("Base");
}
}
class Sub extends Base {
public void add(int a, int[] arr){
System.ou.println("Sub1");
}
public void add(int a,int b, int c){
System.out.println("Sub2");
}
}
public void main(String[] args){
Base base = new Sub;
base.add(1, 2, 3);//Sub1,
//add(int a,int[] arr)看成是父类当中的重写,而add(int a,int b,int c)
//是没法当成父类方法的重写的
Sub s = (Sub) base;//当向下类型转换后,就可以看成同一个类中的重载,三个参数更加准确
s.add(1, 2, 3)//Sub2
}
P294 Object类结构剖析
如果一个类没有显示使用extends关键字声明父类,默认父类是Object
java.lang.Object类
属性:无
方法:空参构造器,toString() equals() getClass() hashCode() clone() finalize() 以及 wait() notify() notifyAll()
查看一个类的父类的显示代码方法
//Order 是一个定义的类,order是他的一个对象
System.out.println(order.getCass().getSuperclass());
当一个对象没有引用指向它时,在对象被回收之前会先调用finalize()方法
System.gc();//通知JVM使用垃圾回收机制,但何时回收仍不确定
P295 运算符的回顾
int i = 10
char c = 10;
System.out.println(c == i); //true, == 运算符和+ 一样存在自动类型提升,所以是true
System.out.println(i == 10.0);//true 同上自动类型提升
P296/298 == equals
自动生成重写的equals方法source - generate hashcode and equals
P299/300 == equals练习
String s1 = "aa";
String s2 = "aa";
s1 == s2 //true string类型存储在常量池当中,当发现引用的数据相同的时候,就自动指向了同一个地址
P301 toString()
P303 单元测试方法的使用(包装类的前提知识)
- Java中的JUnit单元测试
- 步骤:
- 1.选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步
- 2.创建Java类,进行单元测试。
- 此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器
- 3.此类中声明单元测试方法。
- 此时的单元测试方法:方法的权限是public,没有返回值,没有形参
- 4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
- 5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。
- 6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test
- 说明:
- 1.如果执行结果没有任何异常:绿条
- 2.如果执行结果出现异常:红条
P304包装类的理解
基本数据类型、包装类 和 String的相互转换在JDK5.0 之后增加了新特性,自动装箱和自动拆箱
String 类型转换成基本数据类型要注意,string中不能包含eg:‘123ac’等非法字符,会报NumberFormatExcettion
int num1 = 10;Integer i1 = num1;//自动装箱
Integer i2 = new Integer(10);int num2 = i2;//自动拆箱
//以前的话需要显式调用方法
Integer i2 = new Integer(10);
int num2 = i2.intValue();//在Integer当中没有floatValue方法。
int num3 = 10;
Integer i3 = new Integer(num3);
//基本数据类型、包装类-->String 的转换
int num1 = 123;//方式一
String str1 = num1 + "";
//方式二
String str2 = String.valueOf(num1);
//String-->基本数据类型 包装类
//方式一
String str2 = "123.3f";
float num1 = Float.parserFloat(srt2)//如果要转化成int//int num2 = Integer.parseInt(str1);```
```java
public void test3() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
//Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
//保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
//-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;//相当于new了一个Integer对象
Integer y = 128;//相当于new了一个Integer对象
System.out.println(x == y);//false
}