一、Object类

 1. Object类的介绍

- Object 类位于  java.lang  包中,是所有类的超类,任何类都直接或间接继承自它。

- Object类型的引用可以指向任何类型的对象。

- Object类中定义的方法,所有类都可以直接使用。

2. Object类中常用方法

- getClass(): 返回对象的实际类型。

- 应用:判断两个引用指向的对象是否属于同一类型。

 

java

class Animal{}

class Dog extends Animal{}

class Cat extends Animal{}

 

Animal a1 = new Cat();

Animal a2 = new Dog();

System.out.println(a1.getClass() == a2.getClass()); // 输出 false

 

- hashCode(): 返回对象的哈希码值。

- 哈希码由对象的内存地址转换而来,不同对象通常有不同的哈希码。

- toString(): 返回对象的字符串表示。【开发重点】

- 作用:方便打印对象信息,子类通常会重写此方法。

- 重写原则:通常将所有属性拼接成一个字符串返回。

 

java

public String toString() {

    return "name=" + name + ", age=" + age;

}

 

 

- 与get方法的区别:get方法获取单个属性,不改变类型;toString获取所有属性,返回字符串。

- equals(Object o): 比较对象内容是否相同。【开发应用重点】

- == 的作用:

- 比较基本类型时,判断数值是否相等。

- 比较引用类型时,判断地址是否相同。

- equals方法的重写:

- Object类的equals默认比较地址,开发中通常需要重写以比较内容。

- 重写原则:

java

public boolean equals(Object obj) {

    // 1. 自反性:引用是否指向同一对象

    if (this == obj) return true;

    // 2. 非空性:判断对象是否为null

    if (obj == null) return false;

    // 3. 类型一致性:判断是否为同一类型

    if (this.getClass() != obj.getClass()) return false;

    // 4. 强制类型转换

    Student s = (Student) obj;

    // 5. 属性比较:基本类型用==,引用类型用equals

    return this.age == s.age && 

           this.score == s.score && 

           this.name.equals(s.name);

}

 

- finalize(): JVM垃圾回收时自动调用的方法。【面试】

- 垃圾对象:没有任何引用指向的对象。

- 垃圾回收器(GC):负责回收垃圾对象,释放内存。

- 回收时机:JVM内存不足时自动回收,或通过 System.gc() 手动建议回收。

- 注意: finalize() 方法的执行时机不确定,不建议在其中编写重要逻辑。

 

二、包装类 (位于  java.lang  包中)

 

1. 概念:基本数据类型对应的引用类型,便于在需要对象的场景中使用。

2. 基本数据类型与包装类对应关系:【重点】

基本数据类型 包装类类名 

byte Byte 

short Short 

int Integer 

long Long 

float Float 

double Double 

char Character 

boolean Boolean 

3. 数据之间转换:【了解】

- int 和 Integer 之间的转换

-  int  ->  Integer :  Integer i = new Integer(12);  或  Integer.valueOf(12); 

-  Integer  ->  int :  int a = i.intValue(); 

- String 和 Integer 之间的转换

-  String  ->  Integer :  Integer i = new Integer("123");  或  Integer.valueOf("123"); 

-  Integer  ->  String :  String s = i.toString();  或  String s = i + ""; 

- String 和 int 之间的转换

-  int  ->  String :  String s = 123 + ""; 

-  String  ->  int :  int a = Integer.parseInt("123");  【开发应用重点】

- 注意:字符串必须是纯数字,否则会抛出  NumberFormatException 。

4. 自动装箱、自动拆箱

- JDK5.0后引入,允许基本类型和包装类型之间自动转换。

- 自动装箱: Integer i = 12;  (基本类型 -> 包装类型)

- 自动拆箱: int a = i;  (包装类型 -> 基本类型)

- 实现原理:自动装箱调用  valueOf()  方法,自动拆箱调用  xxxValue()  方法。

5. 包装类实际开发应用:【开发重点】

- 用于区分有效数据和无效数据。例如, 0  是有效年龄,而  null  表示年龄未填写。

- 通常将类的属性定义为包装类型。

 

三、String类 【开发重点】

 

1. 创建字符串的方式:【面试重点】

-  String s1 = "hello"; :在字符串常量池中创建对象,若已存在则直接引用。

-  String s2 = new String("world"); :在堆内存中创建对象,同时检查常量池。

2. String类中常用方法

- charAt(int index): 根据下标获取字符。

- 下标范围: 0  到  length()-1 ,超出会抛出  StringIndexOutOfBoundsException 。

- contains(String str): 判断是否包含指定子串。

- equals(String str): 比较字符串内容是否相同。【开发重点】

- 注意:比较字符串内容必须使用  equals()  方法,不能用  == 。

- length(): 获取字符串长度。

- 与数组的区别:数组长度是  数组名.length  (属性),字符串长度是  字符串名.length()  (方法)。

- trim(): 去除字符串前后的空白字符。

- 应用场景:处理用户输入,如  Integer.parseInt(age.trim()) 。

- split(String regex): 根据指定规则拆分字符串,返回字符串数组。

3. String的不可变性:【面试题目】

- String对象一旦创建,其内容就不可改变。

- 字符串拼接操作会创建新的String对象,原有对象不变。

- 效率问题:大量字符串拼接时,String的效率很低。

- 编译优化: String s = "a" + "b";  编译后直接变为  String s = "ab"; 。

 

四、可变长的字符串 (位于  java.lang  包)

 

为解决String拼接效率低的问题,引入了可变长字符串类。

 

- StringBuffer: JDK1.0版本,线程安全,但效率较低。

- StringBuilder: JDK5.0版本,线程不安全,但效率较高。【开发首选】

 

1. 常用构造方法

-  public StringBuilder() : 创建一个空的可变字符串。

-  public StringBuilder(String str) : 根据指定字符串创建。

2. 常用功能方法

- append(String str): 追加字符串,这是最核心的方法。

java

StringBuilder sb = new StringBuilder();

sb.append("Hello").append(" World"); // 链式调用

System.out.println(sb.toString()); // 输出 "Hello World"

 

3. 面试题目:String、StringBuilder、StringBuffer的区别。

- String:不可变,拼接效率低,线程安全。

- StringBuilder:可变,拼接效率高,线程不安全。

- StringBuffer:可变,拼接效率高,线程安全。

 

五、BigDecimal类 【了解】

 

1. BigDecimal类:位于  java.math  包中。

2. 作用:精确表示和计算浮点数,解决  float  和  double  的精度丢失问题。

3. 常用构造方法

-  public BigDecimal(String val) : 推荐使用字符串构造,避免精度问题。

4. 常用方法

- 加法:  BigDecimal result = bd1.add(bd2); 

- 减法:  BigDecimal result = bd1.subtract(bd2); 

- 乘法:  BigDecimal result = bd1.multiply(bd2); 

- 除法:  BigDecimal result = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP); 

- 参数1: 除数

- 参数2: 保留小数位数

- 参数3: 取舍模式, ROUND_HALF_UP  表示四舍五入

更多推荐