一、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) 场景:开发时,通常将类中属性定义为基本数据类型对应包装类型。-->区分有效数据和无效数据的
三、String类【开发重点】
1. 创建字符串的方式:【面试重点】
(1) String s1 = "hello"; // 只会创建一个对象,在串池中产生
(2) String s2 = new String("world"); // 产生两个对象。一个在堆空间中,一个在串池中产生。
 注意:如果串池中已经存在的字符串对象,不会重复创建。
2. String类中常用方法:
(1) char charAt(int index):根据下标获取对应的字符。
 注意:String类中封装了一个 char类型数组,下标范围 0~字符串的长度-1,如果指定的下标超出下标
 范围,则运行报错,错误信息为:java.lang.StringIndexOutOfBoundsException(数组下标越界)
(2) boolean contains(String str):判断一个字符串中是否包含 str子串,包含-true;否则-false.
(3) boolean equals(String str):比较两个字符串内容是否相同,相同-true;否则-false.
 注意:开发时,比较字符串内容,需要用 equals方法比较。
(4) int length() : 获取字符串的长度。
注意:获取数组的长度:数组名.length ;
// 思考:如何遍历字符串????

(5) String trim() : 去除字符串前后的空格。
 注意:应用场景结合 :将String转换int/Integer时应用
 String age = "18 ";
 int n = Integer.parseInt(age.trim()); 
(6) String[] split(String str) : 将当前字符串进行拆分,拆分结果封装为一个String类型的数组。
3. String的不可变性【面试题目】
(1) String的字面值是字面常量,如果在字符串上进行操作,在原有字符串的基础上拷贝一个副文本,在副
 文本上完成操作(字符串拼接)。
(2) 由于String具有不可变性,所以在完成字符串拼接时,效率较低。
 注意: String s = "a" + "b";
 上面的字符串的拼接只创建一个对象。原因:如果+ 两端都为字符串常量时,编译器在编译阶
 段将"a"+"b" 直接编译为 "ab",称为编译器可知。

四、可变长的字符串(位于java.lang包)
1. StringBuffer: JDK1.0版本,线程安全,运行效率慢
StringBuilder: JDK5.0版本,线程不安全,运行效率快。
2. 常用的构造方法:
(1) public StringBuilder() : 无参数的构造方法
(2) public StringBuilder(String str) : 带有字符串类型参数的构造方法
3. 常用功能方法:
StringBuilder append(String str):字符串的拼接
4. 注意:StringBuilder是可变长字符串,所有拼接效率远远高于 String。
面试题目:String 和 StringBuilder、StringBuffer的区别。
解析:
 (1) String 是不可变长的字符串,在完成字符串拼接时效率较低。
 String线程安全。
 (2) StringBuilder是可变长的字符串,在完成字符串拼接时效率较高。
 StringBuilder线程不安全。
 (3) StringBuffer是可变长的字符串,在完成字符串拼接时效率较高
 StringBuffer线程安全。
五、BigDecimal类【了解】
1. BigDecimal类:位于java.math 包中
2. 作用:精确的表示、计算浮点数
3. 常用的构造方法:
public BigDecimal(String n) : 带有字符串类型构造方法
4. 常用的方法:
(1) BigDecimal r1 = bd1.add(bd2); // 加法 bd1 + bd2
(2) BigDecimal r2 = bd1.subtract(bd2); // 减法 : bd1 - bd2
(3) BigDecimal r3 = bd1.multiply(bd2); // 乘法 : bd1*bd2
(4) BigDecimal r4 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP); // 除法: bd1/bd2
 参数说明:
 第一个参数:分母数据
 第二个参数:指定保留到小数点后几位
 第三个参数:取舍模式,通常采用四舍五入(BigDecimal.ROUND_HALF_UP)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐