欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 常 用 类

常 用 类

2025/4/8 5:50:57 来源:https://blog.csdn.net/hanjiaqi23111/article/details/144567371  浏览:    关键词:常 用 类
一、 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. 开发中 == 两端为引用类型的实际应用:通常用于判断两个引用是否指向同一个对象。
案例: Animal a1 = new Cat ();
Animal a2 = new Dog ();
System . out . println ( a1 . getClass () == a2 . getClass ());
引用名 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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词