java常用类(Object、String、Math、Date)


java常用类(Object、String、Math、Date)


一、object类及其方法

object类是所有类的基类,超类,所有类的直接或者间接父亲,位于继承树的最顶端。

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

object类所定义的方法,是所有对象都具备的方法
object类可以存储任何对象

1. getClass()方法

返回应用中存储的实际对象类型
应用:通常用于判断两个引用中实际存储 对象类型是否一致。

2. hashCode()方法

public int hashCode(){}
返回该对象的哈希码值
哈希值根据对象的地址或者字符串或数字使用hash算法计算出来的int类型的数值。
一般情况下相同对象返回相同哈希码

3. toString方法

public String toString(){}
返回该对象的字符串表示(表现形式)
可以根据程序需要覆盖该方法,如:展示该对象属性

4. equals()方法

public Boolean equals(object obj){}
默认实现为(this ==obj),比较两个对象地址是否相同
可进行覆盖,比较两个对象的内容是否相同。

"=="比较双方是否相同。如果是基本类型则表示值相同,如果是引用类型则表示地址相等即是同一个对象。、

默认的equals()方法和"=="是一样的。【对象地址相同说明是同一个对象,则hashcode相同】

equals()默认是比较两个对象和hashcode(哈希码).但,可以根据自己的要求重写equals()方法。–【一般重写为比较对象的内容是否相同】

  • equals()方法覆盖步骤

比较两个引用是否指向同一个对现象【obj == this】
判断两个obj是否为null【obj == null】
判断两个引用指向的实际对象类型是否一致 【obj instanceof xx】
强制类型转换
一次比较属各个属性值是否相同

public class User {
    
    
	
	String name;
	Integer id;
	
	@Override
	public boolean equals(Object obj) {
    
    
		// 首先判断传进来的obj是否是调用equals方法对象的this本身,提高判断效率
		if (obj == this) {
    
    return true;}
		// 判断传进来的obj是否是null,提高判断效率
		if (obj == null) {
    
    return false;}
		// 判断传进来的obj是否是User对象,防止出现类型转换的异常
		if (obj instanceof User) {
    
    
			User user = (User) obj;
			boolean flag = this.name.equals(user.name) && this.id == user.id;
			return flag;
		}
		// 如果没有走类型判断语句说明两个比较的对象它们的类型都不一样,结果就是false了
		return false;
	}	
     ....//get\set 方法
}

5. finalize()方法

  • 当对象判定为垃圾对象时,由JVM自动调用此方法,用以标记此对象,进入回收队列
  • 垃圾对象:没有有效引用指向此对象,为垃圾对象。【new xxx(…);】
  • 垃圾回收:由GC销毁对象,释放存储空间
  • 自动回收机制:JVM内存耗尽时,一次性回收所有的垃圾对象
  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收。

二、String类

1.注意

字符串是常量,创建之后无法改变

字符串的字量值存储在字符串池中,可以共享,

String s = “Hello”,创建一个对象,在字符串池中存储。

String s = new String(“Hello”)创建两个对象,堆和池里各存放一个。

原理如下图:
在这里插入图片描述
在这里插入图片描述

  @Test
    public void StringTest() {
    
    
        String str = "abc";
        String str2 = new String("abcd");
        System.out.println("str2:"+str2.hashCode());

        str2 = "abc";
        //存在方法区  字符串常量池中 可以共享 str 和str2 相同(引用指向同一内容)
        System.out.println("str:" + str.hashCode());
        System.out.println("str2 : " + str2.hashCode());
        System.out.println(str.equals(str2));
        System.out.println("--------------");
        // String不可变,赋给不同值,对象改变了,引用指向了另外的内容
        str = "abcd";
        System.out.println("str:" + str.hashCode());

        System.out.println(str.equals(str2));
    }
str2:2987074
str:96354
str2 : 96354
true
--------------
str:2987074
false

Process finished with exit code 0

2.常用方法

长度、获取指定下标、转数组、是否包含str(t or f) 、匹配第一个下标、匹配最后下标去掉字符串前后的空格、将小写转成大写。判断字符串是否以xx结尾、将旧字符串替换成新字符串(新对象)、根掂str做拆分。

  • public int length() :返回字符串的长度。

  • public char charAt(int index):根据下标获取字符串

  • public char[] toCharArray() :将字符串转换成数组。

  • public boolean contains (String str) :判断当前字符串中是否包含str。

  • public int index0f (String str) :查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。

  • public int lastIndex0f (String str) :查找字符串在当前字符串中最后一次出现的下标索引。

  • public String trim() :去掉字符串前后的空格。

  • public String toUpperCase () :将小写转成大写。

  • public boolean endWith (String str) :判断字符串是否以str结尾。

  • public String replace (char oldChar, char newChar); 将旧字符串替换成新字符串

  • public String[] split (String str) :根据str做拆分。

3.扩展

StringBuilder 和 StringBuffer

都是 final 修饰 不可修改,可变是因为使用方法 append 和 insert 方法。返回的对象是同一个
StringBuffer: 可变长字符串,JDK1. 0提供,运行效率慢、线程安全。(适合多线程)
StringBuilder:可变长字符串,JDK5. 0提供,运行效率快、线程不安全。(适合单线程)
但都比String类效率高。

  • StringBuilder
    String类与StringBuilder类的区别:String类的内容是固定的,StringBuilder类的内容是可变的。
    StringBuilder 用在字符串缓冲区被单个线程使用的时候 比StringBuffer 要快
    主要操作是 appendinsert 方法

例如,如果 z 引用一个当前内容为 “start” 的字符串的生成器对象,则该方法调用 z.append(“le”) 将使字符串生成器包含
“startle”,而 z.insert(4, “le”) 将更改字符串生成器,使之包含 “starlet”。

  • StringBuffer
    通过某些方法调用可以改变该序列的长度和内容。
    可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
    主要操作是 appendinsert 方法

例如,如果 z 引用一个当前内容为 “start” 的字符串缓冲区对象,则此方法调用 z.append(“le”) 会使字符串缓冲区包含 “startle”,而 z.insert(4, “le”) 将更改字符串缓冲区,使之包含 “starlet”。

4.参考资料

https://blog.csdn.net/weixin_43502661/article/details/88781050
https://blog.csdn.net/xiaosao_/article/details/126278199
https://blog.csdn.net/qq_59212867/article/details/125119222

三、Math

Math 类包含用于执行基本数学运算的static 方法,如初等指数、对数、平方根和三角函数。

1 常用函数

  • Math.PI 记录的圆周率
  • Math.E 记录e的常量
  • Math中还有一些类似的常量,都是一些工程数学常用量。
  • Math.abs 求绝对值
  • Math.sin 正弦函数 Math.asin 反正弦函数
  • Math.cos 余弦函数 Math.acos 反余弦函数
  • Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数
  • Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度
  • Math.ceil 得到不小于某数的最大整数
  • Math.floor 得到不大于某数的最大整数
  • Math.IEEEremainder 求余
  • Math.max 求两数中最大
  • Math.min 求两数中最小
  • Math.sqrt 求开方
  • Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常
  • Math.exp 求e的任意次方
  • Math.log10 以10为底的对数
  • Math.log 自然对数
  • Math.rint 求距离某数最近的整数double (可能比某数大,也可能比它小)
  • Math.round 同上,返回int型或者long型(上一个函数返回double型)
  • Math.random 返回0,1之间的一个随机数[0,1)

2 参考资料

https://blog.csdn.net/I_r_o_n_M_a_n/article/details/118864693

四、Date

1 相关知识

Date 类来封装当前的日期和时间,我们可以通过该类来操作时间和日期。在使用该类之前,我们需要先导入 java.util.Date 类。

Date 类提供了两种构造函数来实例化 Date 对象:

使用当前日期和时间来初始化对象;

  • Date date = new Date();

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

  • Date date1 = new Date(1581997363000L).

2 Date的一些常用方法

方法 描述
boolean after(Date date) 若当调用此方法的 Date 对象在指定日期之后返回 true,否则返回 false。
boolean before(Date date) 若当调用此方法的 Date 对象在指定日期之前返回 true,否则返回 false。
Object clone( ) 返回此对象的副本。
int compareTo(Date date) 比较当调用此方法的 Date 对象和指定日期。两者相等时候返回 0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
boolean equals(Object date) 当调用此方法的 Date 对象和指定日期相等时候返回 true,否则返回 false。
long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
void setTime(long time) 用自 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒数设置时间和日期。
String toString( ) 转换 Date 对象为 String 表示形式,并返回该字符串。

3 日历相关类(Calendar)

Calendar 类是一个抽象类,为操作日历字段(例如获得下星期的日期),提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

4 参考资料

https://blog.csdn.net/m0_59854777/article/details/119564546

猜你喜欢

转载自blog.csdn.net/weixin_44625361/article/details/127585481