文章目录
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 要快
主要操作是 append 和 insert 方法
例如,如果 z 引用一个当前内容为 “start” 的字符串的生成器对象,则该方法调用 z.append(“le”) 将使字符串生成器包含
“startle”,而 z.insert(4, “le”) 将更改字符串生成器,使之包含 “starlet”。
- StringBuffer
通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
主要操作是 append 和 insert 方法
例如,如果 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,格里高利历)的偏移量。