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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值