Java的几大常用类
创始人
2024-02-11 15:53:15
0

一、Object类

超类、基类,所有类的直接或者间接父类,位于继承树的最顶层。

任何类,如果没有写 extends 显示继承某个类,都直接默认继承 Object 类,否则为间接继承。

Object 类中所定义的方法,是所有对象都具备的方法。

Object 类型可以存储任何对象:

  1. 作为参数,可以接受任何对象
  2. 作为返回值,可以返回任何对象

1.getClass() 方法

public final Class getClass(){
}

返回引用中存储的实际对象类型。

例如:判断两数据类型是否相同↓↓↓

Student类:

package com.scaaner;
public class Student {private String name;private int age;//无参构造器public Student(){}//有参构造器public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

方法类Demo1:

package com.scaaner;
public class Demo1 {public static void main(String[] args) {Student s1 = new Student("A",22);Student s2 = new Student("B",12);//判断s1和s2是否为同一类型Class class1 = s1.getClass();Class class2 = s2.getClass();if(class1 == class2){System.out.println("s1和s2是同一类型");}else{System.out.println("s1和s2不是同一类型");}}
}

输出结果:
在这里插入图片描述

2.hashCode()方法

public int hashCode() {
}

返回该对象的哈希码值

哈希值根据对象的地址字符串数字使用hash算法计算出的int类型的数值。

一般情况下,相同对象返回相同哈希码。

同用Student类

在这里插入图片描述

3.toString()方法

public String toString(){
}

返回该对象的字符串表示(表现形式)

可以根据程序要求覆盖(重写)该方法,如:展示对象各个属性值。

同用Student类

(1)直接调用:

在这里插入图片描述
在这里插入图片描述

(2) 重写

在这里插入图片描述

4.equals()方法

public boolean equals(Object obj){return (this == obj);
} 

默认实现为(this == obj),比较两个对象地址是否相同。

可进行覆盖,比较两个对象的内容是否相同。

(1)姓名和年龄不同,输出为false

在这里插入图片描述

(2)姓名和年龄相同,为什么输出还为false?

在这里插入图片描述

因为在栈中所占地址不同,即使数据相同,也还是会显示false。

那要怎样才能为true呢?

对equals方法进行重写,比较两个对象的内容是否相同。

equals()方法覆盖步骤:
比较两个引用是否指向同一个对象。
判断obj是否为null。
判断两个引用指向的实际对象类型是否一致。
强制类型转换。
依次比较各个属性值是否相同。

(3)姓名和年龄相同,输出为true

在Student类中对equals方法进行重写,比较两个对象的内容是否相同。

在这里插入图片描述

5.finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

垃圾对象:没有有效引用指向此对象时,为垃圾对象。
垃圾回收:有GC销毁垃圾对象,释放数据存储空间。
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
手动回收机制:使用System.gc();通知JVM执行垃圾回收。

在Student类中重写finalize方法:

在这里插入图片描述

在测试类中写:

在这里插入图片描述

二、包装类

Object可统一所有数据,包装类的默认值是null。

基本数据类型对应的包装类:
在这里插入图片描述

1.基本类型和包装类型的转换、装箱与拆箱

栈中存放基本数据类型
堆中存放引用数据类型

装箱:栈中的数据放到堆中(基本类型–>引用类型)
拆箱:堆中的对象拿到栈中(引用类型–>基本类型)

具体请看示例↓↓↓

package com.scaaner;
public class Demo1 {public static void main(String[] args) {//JDK1.5之前//类型转换:装箱   基本类型转引用类型过程//基本类型int num1 = 10;//使用Integer类创建对象Integer integer1 = new Integer(num1);Integer integer2 = Integer.valueOf(num1);System.out.println("装箱");System.out.println(integer1);System.out.println(integer2);//类型转换:拆箱   引用类型转基本类型过程Integer integer3 = new Integer(100);int num2 = integer3.intValue();System.out.println("拆箱");System.out.println(num2);//JDK1.5之后   自动装箱  拆箱int age = 30;//自动装箱Integer integer4 = age;System.out.println("自动装箱"+"\n"+integer4);//自动拆箱int age1 = integer4;System.out.println("自动拆箱"+"\n"+age1);}
}

2.基本类型和字符串的转换

(1)基本类型转字符串

详看注释↓↓↓

在这里插入图片描述

(2)字符串转基本类型

详看注释↓↓↓

在这里插入图片描述

(3)boolean字符串形式转成基本类型

" true " ----> true
非" true " ----> false

详看注释↓↓↓

在这里插入图片描述

注意:

需保证类型兼容,否则抛出NumberFormatException异常。

附加:Integer缓冲区

Java预先创建了256个常用的整数包装类型对象。

在这里插入图片描述

代码↓↓↓

import com.sun.org.apache.xpath.internal.operations.Bool;public class Demo1 {public static void main(String[] args) {Integer integer1 = new Integer(100);Integer integer2 = new Integer(100);System.out.println(integer1 == integer2);   //false//为基本类型,所以放进一个数,就存进去占堆中一个空间Integer integer3 = 100;  //自动装箱为引用类型//即使用Integer integer3 = Integer.valueOf(100);的方法Integer integer4 = 100;System.out.println("------------");System.out.println(integer3==integer4);//true//指的是在堆中的一个(-128~127)之间的空间,100都只指向的是同一个位置Integer integer5 = 200;Integer integer6 = 200;System.out.println("------------");System.out.println(integer5==integer6);  //false//在堆中的一个(-128~127)之间的空间,超出这个范围就在堆里开辟个新空间}

三、String类

1.不变字符串

字符串是常量,创建之后不可改变

字符串字面值存储在字符串池中,可以共享。

方法一:

产生一个对象,字符串池中存储

String s = “Hello”;


public class Demo1 {public static void main(String[] args) {String name = "hello";    //"hello"常量存储在字符串池中name = "zhangsan";        //并没有修改数据,而是重新开辟了一个空间,将name指向zhangsanString name2 = "zhangsan";  //在字符串池中寻找对象  匹配;如果没有则重新开辟新的空间}
}

方法二:(浪费空间)

产生两个对象,堆、池各存储一个

String s = new String("Hello");

String的常用方法详见:String的几种常见方法

2.可变长字符串

效率比String高,比String节省内存

(1)StringBuffer

JDK1.0提供,用于多线程,运行效率慢、线程安全。

(2)StringBuilder

JDK5.0提供,用于单线程,运行效率快,线程不安全。

在这里插入图片描述
StringBuffer 和 StringBuilder 用法相同。

为什么StringBuffer和StringBuilder比String的效率高?
代码验证↓↓↓

在这里插入图片描述

在这里插入图片描述

四、BigDecimal类

先看图↓↓↓

在这里插入图片描述

double 是属于近似值存储,所以得出结果也是近似值,但误差很小。

就要使用 BigDecimal 来精确计算。

位置:java.math 包中
作用:精确计算浮点数
创建方式:BigDecimal bd = new BigDecimal(“1.0”);

加减乘除
add 加
subtract 减
multiply 乘
divide 除

除法比较特殊不能直接用:

divide(BigDecimal bd , int scal , RoundingMode mode)
  1. 参数scal:指定精确到小数点后几位。
  2. 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式。取值为BigDecimal.ROUND_HALF_UP。
public class Demo1 {public static void main(String[] args) {double d1 = 1.0;double d2 = 0.9;System.out.println(d1-d2);double result = (1.4-0.5)/0.9;System.out.println(result);System.out.println("-----------------");BigDecimal bd1 = new BigDecimal("1.0");  //后边为字符串类型BigDecimal bd2 = new BigDecimal("0.9");System.out.println(bd1.subtract(bd2));   //不能直接用运算法则   减法System.out.println(bd1.add(bd2));    //加法System.out.println(bd1.multiply(bd2));  // 乘法BigDecimal bd3 = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));  //除法System.out.println(bd3);System.out.println("----------------");//BigDecimal bd4 = new BigDecimal("10").divide(new BigDecimal("3")); //除不尽  会报错BigDecimal bd4 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);//表示四舍五入保留2位小数System.out.println(bd4);}
}

五、Date类

Date 表示特定的瞬间,精确到毫秒。Date 类中的大部分方法都已经被 Calendar 类中的方法所取代。

时间单位:
1s = 1000 ms
1ms = 1000 μs
1μs = 1000 ns

import java.util.Date;public class Demo1 {public static void main(String[] args) {//1.创建Date对象//今天Date date1 = new Date();System.out.println(date1.toString());System.out.println(date1.toLocaleString());//昨天Date date2 = new Date(date1.getTime()-(60*60*24*1000));System.out.println(date2.toLocaleString());//2.方法   after   beforeboolean b1 = date1.after(date2);System.out.println(b1);     //trueboolean b2 = date1.before(date2);System.out.println(b2);      //false//比较 相差多少  compareTo();System.out.println(date1.compareTo(date2));System.out.println(date2.compareTo(date1));System.out.println(date1.compareTo(date1));//equalsSystem.out.println(date1.equals(date2));}
}

输出结果↓↓↓:
在这里插入图片描述

六、Calendar类

Calendar 提供了获取或设置各种日历字段的方法。

构造方法:
protected Calendar() :由于修饰符是protected , 所以无法直接创建该对象。

其他方法:
在这里插入图片描述

import java.util.Calendar;public class Demo1 {public static void main(String[] args) {//1.创建Calendar对象Calendar calendar = Calendar.getInstance();//受保护,不能newSystem.out.println(calendar.getTime().toLocaleString());System.out.println(calendar.getTimeInMillis());  //毫秒//2.获取时间信息int year = calendar.get(Calendar.YEAR);   //年int mouth = calendar.get(Calendar.MONTH); //月int day = calendar.get(Calendar.DAY_OF_MONTH);   //日int hour = calendar.get(Calendar.HOUR_OF_DAY);   //HOUR 12小时(hour_of_day 24小时)int minute = calendar.get(Calendar.MINUTE);   //分钟int second = calendar.get(Calendar.SECOND);  //秒System.out.println(year + "年" + (mouth+1) + "月"+ day + "日" + hour + ":" + minute + ":" + second);//3.修改时间Calendar calendar2 = Calendar.getInstance();calendar2.set(Calendar.DAY_OF_MONTH,5);System.out.println(calendar2.getTime().toLocaleString());//4. add方法修改时间calendar2.add(Calendar.HOUR,1);  //加1小时System.out.println(calendar2.getTime().toLocaleString());calendar2.add(Calendar.HOUR,-2);  //减2小时System.out.println(calendar2.getTime().toLocaleString());//5.获取当前时间的最大/最小值int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);System.out.println(max);System.out.println(min);}
}

输出结果↓↓↓
在这里插入图片描述

七、SimpleDateFormat类

SimpleDateFormat 是一个以与语言环境相关的方式来格式化和解析日期的具体类。

进行格式化 (日期 一> 文本)、解析(文本一>日期)。

常用的时间模式字母:
在这里插入图片描述

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Demo1 {public static void main(String[] args) throws ParseException {//1.创建SimpleDateFormat对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//2.创建DateDate date = new Date();//格式化date(把日期转为时间字符串)String str = sdf.format(date);  //format格式化System.out.println(str);//解析(把时间字符串转为日期)Date date1 = sdf.parse("2022/04/23");System.out.println(date1);}
}

八、System类

System 系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的,静态的。

在这里插入图片描述

public class Demo1 {public static void main(String[] args){//1.arraycopy,数组的复制int[] arr = {20,23,17,9,34};int[] dest = new int[5];System.arraycopy(arr,1,dest,0,4);//System.arraycopy(源数组,从哪个位置开始复制,目标数组,目标数组的位置,复制的长度);for (int i = 0; i < arr.length; i++) {System.out.println(dest[i]);}//2.currentTimeMillis    获取当前系统时间long start = System.currentTimeMillis();for (int i = 0; i < 999999999; i++) {for (int i1 = 99999; i1 > 0; i1--) {int result = i+i1;}}long end = System.currentTimeMillis();System.out.println("用时:"+ (end-start)+"ms");new Student("A",12);new Student("B",2);//3.垃圾回收系统   System.gcSystem.gc();//4.退出JVMSystem.exit(0);   //已经退出,后续程序不会再执行System.out.println("程序结束!");}
}

输出结果↓↓↓
在这里插入图片描述

内容比较多!
重在理解!!
感谢ლ(°◕‵ƹ′◕ლ)!!!

相关内容

热门资讯

迪卡尔 中秋夜散文 迪卡尔 中秋夜散文  1  往年的中秋与今年的中秋并没有太大的差别,只是,对我来说,迪卡尔的出现,让...
散文近来可好 散文近来可好  曾经默默无言的静潜在同学群里,记得毕业那天,你在我的毕业留言本上绘着几株倩倩的青竹,...
酸石榴,甜石榴散文 酸石榴,甜石榴散文  老家院里种了两株石榴,约二十余年树龄,都有黝黑的粗干虬枝,一北一南,分据院子两...
爱情散文:有一种距离与爱无关 精选爱情散文:有一种距离与爱无关  两个人从陌生到相识,到有好感,到热恋,之间的距离愈来愈小;再到后...
妈妈别打我散文 妈妈别打我散文  初中毕业的时候,那时是07年,我做着08年去北京看奥运的打算。  不料,我去读了高...
自夸等于自贬散文 自夸等于自贬散文  一个人不能妄自菲薄,更不能妄自尊大,妄自菲薄的人看不到自身的优点,可怜可叹;妄自...
梁实秋《男人》散文 梁实秋《男人》散文  在生活、工作和学习中,大家都不可避免的会接触到散文吧?散文不讲究音韵,不讲究排...
菜花黄优美散文 菜花黄优美散文  在江南,过了春分,春色就越发的鲜艳了。最鲜艳的莫过于,田野里肆意铺陈的菜花。像是油...
鲁迅散文《二十四孝图》原文 《二十四孝图》读后感推荐度:二十四孝图读后感推荐度:寒窑赋原文解读推荐度:清明散文推荐度:我眼中的鲁...
朱自清春散文 朱自清春散文  朱自清,原名自华,号秋实,后改名自清,字佩弦。中国现代散文家、诗人、学者、民主战士。...
今夜请将我遗忘散文诗 今夜请将我遗忘散文诗  今夜请将我遗忘。一座青冢,衰草斜阳。我坐在坟头,低声吟唱,扑朔的蝙蝠为我送葬...
温柔如水的抒情散文 温柔如水的抒情散文  温柔如水,柔情似水,女人是水做的,天生就应该温柔善解人意;温柔体贴,默默关爱身...
闲话大维散文 闲话大维散文  看到这个题目,您可千万不要误会。俺可不是没事儿的时候,站在街头巷尾、胡同里弄、东家长...
我未入流抒情散文 我未入流抒情散文  爱人要出门,问我要不要买什么东西,她好顺便捎买回来。  我在看书,答曰没有,不要...
家是安身之所抒情散文 家是安身之所抒情散文  今天的天气是爽朗的,一大早便醒来。按说此时人的精神状态是最好的,毫无杂念,可...
城市里的菜园子优美散文 城市里的菜园子优美散文  我所居住的院子外面有一条未曾修建完缮的公路。因为只修了整个路面的一对半,那...
我已经习惯了你的习惯情感散文 我已经习惯了你的习惯情感散文  也许你已经离开了一个人很久 你已经不爱他了 但是有一天 你忽然发现 ...
原谅我今天才读懂你的散文 原谅我今天才读懂你的散文  有时我想,如果可以选择,我宁愿从来不认识你,我不是你的女儿,你也不是我的...
西陵古地话嫘祖散文 西陵古地话嫘祖散文  1  很古时候,咱这个地方叫西陵部落。说起来,那可是块风水宝地!西南面山峰肩挨...
冷月秋水寒散文 冷月秋水寒散文  苍穹望断,唯有细雨霏霏,月圆成幻,叹几载韶华,与吾相伴,一阵寒风吹过,一阵雨从头穿...