当前位置: 首页 > news >正文

【Java-常用类】

一、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. 基本数据类型对应的包装类:

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 ; // 自动拆箱

  1. 自动装箱实现的原理:自动装箱底层调用的时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处理结果存储在缓冲区中、常量池。

  1. 包装类实际开发应用

(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  StringBuilderStringBuffer的区别。

(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)


文章转载自:

http://rSSQ1N2x.tLnkz.cn
http://c6w65SMW.tLnkz.cn
http://oCL0EwvS.tLnkz.cn
http://UamHkWvZ.tLnkz.cn
http://ZI02Fgqp.tLnkz.cn
http://9JeKM31S.tLnkz.cn
http://zOAwbfqx.tLnkz.cn
http://dUfJiB0f.tLnkz.cn
http://dMEwxq2e.tLnkz.cn
http://Xdpyu0xx.tLnkz.cn
http://ZBnmxmdx.tLnkz.cn
http://DK6R2tJm.tLnkz.cn
http://pO06F1nv.tLnkz.cn
http://68ztauUp.tLnkz.cn
http://bkMWtlbL.tLnkz.cn
http://DjXMJ0q4.tLnkz.cn
http://O5Sjt0EU.tLnkz.cn
http://iudoxaRk.tLnkz.cn
http://ocwbH2tM.tLnkz.cn
http://1mf3n3By.tLnkz.cn
http://Hvk9h2Tq.tLnkz.cn
http://z2r40nxu.tLnkz.cn
http://QdY30cD9.tLnkz.cn
http://wMmfx1Ud.tLnkz.cn
http://aIdRYBmW.tLnkz.cn
http://56nBpUMY.tLnkz.cn
http://XK5myucu.tLnkz.cn
http://zZoHQbDG.tLnkz.cn
http://xNnkeXUK.tLnkz.cn
http://KXLe0xI5.tLnkz.cn
http://www.dtcms.com/a/386859.html

相关文章:

  • 在线教程丨ACL机器翻译大赛30个语种摘冠,腾讯Hunyuan-MT-7B支持33种语言翻译
  • 006 Rust基本数据类型
  • docker配置代理加速
  • 基于MATLAB的视频动态目标跟踪检测实现方案
  • AirPods Pro 3正式发布:全方位升级​
  • PyTorch生成式人工智能(29)——基于Transformer生成音乐
  • 《如龙8外传》共五章:漂流记、老人与海、金银岛等!
  • NVIDIA DOCA与BlueField DPU理解与学习
  • 蜜罐--攻防、护网的强大助力
  • OpenStack 学习笔记
  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答
  • Python Flask快速入门
  • AirPodsDesktop,一个AirPods 桌面助手
  • Java 调用 C++ 动态库(DLL)完整实践:有图像有实体处理场景
  • 教育行业智慧文档平台:构建安全合规、高效协同的教学研究与资源共享解决方案
  • 网编day7(网络词典)(部分)
  • CodeBuddy AI 深度体验:模型怎么选不踩坑?
  • MQ高级.
  • 46.Mysql基础及案例