Java-object类
·
一、Object类
1. Object类的介绍
(1) Object 类位于 java.lang 包中,是继承关系的根类、超类,是所有类的父类(直接的父类或是间接父类)
(2) Object类型的引用可以用于存储任意类型的对象。
(3) Object类中定义方法,所有类都可以直接使用。
2. 8Object类中常用方法:
(1) getClass() : 返回引用中实际存储的对象类型。【理解】
开发实际应用:用于判断两个引用中实际存储的对象类型是否一致,一致-true;不一致-false。
(2) int hashCode() : 返回对象的整数哈希码值。对象的哈希码值来源是将 十六进制的地址,转换十进制的整
数的结果。
注意:由于不同的对象在堆空间中有不同的十六进制的地址,所有不同的对象具有不同哈希码值。
(3) String toString() : 返回该对象字符串的变现形式。【开发重点】
a. 作用:方便展示对象的信息,子类通常将 toString方法覆盖。toString方法覆盖的原则如下:
通常将所有的属性拼接为一个 字符串进行结果返回。
b. 案例:public String toString(){
return "name="+name+",age="+age; // this. 省略
}
c. get 方法和 toString 方法 区别:
I. get方法是返回对象的单个属性的信息,并且不会改变属性对应数据类型
II. toString 方法获取所有属性的信息,并且将 所有属性拼接为 一个String类型的结果进行返回。
(4) boolean equals(Object o):用于比较对象内容是否相同。【开发应用重点】
a. == 的应用
I. 如果 == 两端 为基本数据类型的变量,则判断变量中数值是否相同
如果 == 两端 为引用类型的变量,则判断引用中存储的地址是否相同。
II. 开发中 == 两端为引用类型的实际应用:通常用于判断两个引用是否指向同一个对象。
引用名1 == 引用名2 : 结果为 true,代表两个引用指向同一个对象;
结果为false,代表两个引用指向不同的对象。
b. equals 方法的应用:
I. 父类 Object类中 equals方法实现原理如下:
public boolean equals(Object obj) {
return (this == obj);
}
注意:父类中的equals方法是用于比较两个引用是否同一个对象,但是开发时,通常用equals方法比
较对象的内容,所以父类中equals方法不足以满足子类的 需求,则需要覆盖父类Object中
equals方法。
II. equals方法覆盖的原则:
面试重点: == 和 equals方法的区别。
解析:
(1) ==的应用
== 两端为基本数据类型,比较变量中数值是否相同
==两端为引用类型的变量,比较引用存储地址是否相同
(2) equals 方法:Object类中方法用于实现用(==)实现,比较对象地址;但是实际开发时,需要将
equals方法进行覆盖,用于比较对象的内容是否相同。
(5) finalize() : JVM进行垃圾回收时,自动调用的方法。(垃圾回收器回收垃圾对象)(JVM性能调优时关注)
【面试】
a. 垃圾对象:没有任何引用指向的对象。
Student s= new Student();
s = null ; // 将 s 指向的对象设置为 垃圾对象
b. 垃圾回收器:用于JVM回收垃圾对象。简称为gc / GC
c. 垃圾回收的目的:清除垃圾对象,释放空间,提高空间利用率。
d. 垃圾回收器回收垃圾对象时机:
① 自动回收机制:当JVM内存耗尽时,不能再为新创建的对象分配空间时,JVM中垃圾回收器会自动
将所有的垃圾对象一次性进行回收,垃圾回收器进行回收垃圾对象时,自动调用finalize方法。
② 手动回收机制:利用 System.gc() ; 通知 垃圾回收器(GC)进行垃圾回收,如果 GC空闲,则进行垃
圾回收,如果GC繁忙,则暂不回收。
注意:开发时,finalize方法中不写任何重要代码,finalize方法的执行节点不可控。
二、包装类(位于 java.lang 包中)
1. 概念:基本数据类型对应引用类型,称之为基本数据类型的包装类。
2. 基本数据类型对应的包装类:【重点】
基本数据类型 包装类类名
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
3. 数据之间转换【了解】
(1) int 和 Integer 之间的转换
int -----> Integer
a. Integer i1 = new Integer(12); // 借助构造方法
b. Integer i2 = Integer.valueOf(12); // 借助Integer类中的静态方法
Integer ----> int a. int a1 = i1.intValue() ; // 借助Integer类中的成员方法 intValue()
(2) String 和 Integer之间的转换
String ----> Integer
a. Integer i3 = new Integer("123"); // 借助Integer类中的构造方法
b. Integer i4 = Integer.valueOf("123"); // 借助Integer类中的静态方法
Integer ----> String
a. String s1 = i4.toString();
b. String s2 = i4+""; //借助字符串的拼接
(3) int 和 String 之间的转换
int ---> String
a. int a = 3;
String s3 = a+"";
String ----> int 【开发应用重点】
int a = Integer.parseInt("123"); // 借助 Integer类中静态方法
注意:将String类型的数据转换为 int/Integer类型的数据,要求要转换的String数据类型必须是纯数
字,否则运行报错,错误信息如下:
java.lang.NumberFormatException (数字格式转换异常)
4. 自动装箱、自动拆箱
(1) JDK5.0之后提供自动装箱和自动拆箱的功能,基本数据类型和对应包装类型之间可以相互自动转换
(2) 自动装箱:基本数据类型可以直接赋值给其对应的包装类型。
自动拆箱:包装类型的引用可以直接赋值给其对应的基本数据类型的变量。
(3) 案例: Integer i = 12; // 自动装箱
int a = i ; // 自动拆箱
(4) 自动装箱实现的原理:自动装箱底层调用的时Integer类中 静态的 valueOf方法: 【面试难点】
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i); // 如果 传入数据不在-128~127之间,则new Integer类型对象
}
注意:Java中将 -128~127常用数据段的内容进行了预先的包装处理,转换数据只要在-128~127之间不
需要每次创建对象,而是从处理结果中直接获取即可,-128~127处理结果存储在缓冲区中、常量池。
面试题目: Integer i1 = 12;
Integer i2 = 12;
System.out.println(i1==i2); // true
Integer i3 = 150;
Integer i4 = 150 ;
System.out.println(i3==i4); // false
5. 包装类实际开发应用【开发重点】(1) 可以用于区分有效数据和无效数据:例如 0 和 null , 0.0 和 null.
(2) 场景:开发时,通常将类中属性定义为基本数据类型对应包装类型。-->区分有效数据和无效数据的
更多推荐



所有评论(0)