二、Object类:
- 概念:
I. 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
II. 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
III. Object类中所定义的方法,是所有对象都具备的方法。
Object o = new Object();
IV. Object类型可以存储任何对象(多态)
1). 作为参数,可接受任何对象。
2). 作为返回值,可返回任何对象。 - 常用方法: I. public final Class<?> getClass(){} 返回引用中存储的实际对象类型。
Student s = new Student();
System.out.println(s.getClass()); = class objects.Student
if(s.getClass() == s1.GetClass()){} ==判断对象是否一致
应用:通常用于判断两个引用中实际存储对象类型是否一致。
II. public int hashCode(){}
一个对象的整数表现形式(整数型的名字)。
返回该对象的十进制的哈希码值。
哈希算法根据 (物理)对象的地址或字符串或数字计算出来的int类型的数值。
哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码。
Object o = new Object();
System.out.println(o.hashCode());III. public String toString(){}
返回该对象的字符串表示(表现形式,在控制台表现出来)。
通常,toString方法返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object类的toString方法返回一个字符串,该字符串类名(对象该类的一个实例)、at标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于
“
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
可以根据程序需求覆盖该方法,如:展示对象各个属性值。
IV. public boolean equals(Object obj){}
默认实现为(this == obj),比较两个对象地址是否相同。
可进行覆盖,比较两个对象的内容是否相同。
V. 覆盖equals的顺序:
1). 比较两个引用是否指向同一个对象。
2). 判断obj是否为null。
3). 判断两个引用指向的实际对象类型是否一致。
4). 强制类型转换。
5). 依次比较各个属性值是否相同。
VI. protected void finalize() throws Throwable //了解(面试题中可能有坑)
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
垃圾对象:没有有效引用指向此对象时,为垃圾对象。
垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。
附加源代码
:Windows --> Preferences --> Java --> Installed JREs --> 选中JRE --> Edit --> xxx/rt.jar --> Source Attachment --> External Location --> External File 选中src.zip
三、包装类:
- 概念:
I. 基本类型所对应的引用类型
II. Object可统一所有数据,包装类的默认值为null
III. 包装类中实际上就是持有了一个基本类型的属性,作为数据的存储空间(Byte中有一个byte属性),还提供了常用的转型方法,以及常量,
既可以存储值,又具备了一系列的转型方法和常用常量,比直接使用基本类型的功能更强大。
IV. 包装类型中提供了若干转型的方法,可以让自身类型与其他包装类型、基本类型、字符串相互之间进行转换。 - 转型方法: I. 8种包装类型中,有6种是数字型(Byte、Short、Integer、Long、Float、Double),继承自java.lang.Number父类。 II. java.lang.Number父类为所有子类分别提供了6个转型的方法,将自身类型转换成其他数字型。
1. byteValue();
shortValue();
intValue();
longValue();
floatValue();
doubleValue();
III. parseXXX(String s) 静态转型方法,7种包装类型都有,除了Character,都可以通过String进行构建
parseByte(“123”);
parseShort(“123”);
parseInt(“123”);
parseDouble(“123.45”);
…
IV. valueOf(基本类型)、valueOf(字符串类型),静态转型方法,8种包装类型都有
Byte b1 = Byte.valueOf( (byte)10 );
Byte b2 = Byte.valueOf( “20” );
V. 注意:在使用字符串构建包装类型对象时,要保证类型的兼容,否则产生NumberFormatException。
VI. JDK5之后,提供自动装箱、拆箱,简化使用包装类的编程过程
Byte b4 = 40;//自动装箱,将基本类型直接赋值给包装类型,调用valueOf(byte b)
byte b5 = b4;//自动拆箱,将包装类型的值,直接赋值给基本类型,调用byteValue()
VII. 自动装箱时,会调用valueOf方法,Byte、Short、Integer、Long,四种整数包装类型都提供了对应的cache缓冲区,将常用的256个数字提 前创建对象并保存在数组中,实现复用。即在区间的复用已有对象,在区间外创建新对象。
四、String:
- 概念:
I. 字符串是常量,创建之后不可改变。
II. 字符串字面值存储在字符串池中,可以共享。
III. String s = “Hello”; 产生一个对象,保存在池中
IV. String s2 = new String(“World”); 产生两个对象,池、堆各一个 - 常用方法:参考API文档