Java常用类库 - Object和Objects
位于java.lang包下
Object类
Object 类是Java语言中的根类,所有的类都直接或者间接的继承自Object类。即 如果一个类没有指定父类,那么默认继承Object类(所有类的父类)。
构造方法
构造器 | 描述 |
---|---|
Object() | 构造一个新对象 |
Object类的构造方法为无参构造而且只有一个,这就是为什么所有类的默认构造函数为无参构造:所有的类均继承自Object类,子类对象默认访问父类即Object的构造即无参构造。
所有方法
变量和类型 | 方法 | 描述 |
---|---|---|
protected Object | clone() | 创建并返回此对象的副本(浅克隆) |
boolean | equals(Object obj) | 某个对象是否与之相等 |
Class<?> | getClass() | final方法,返回此Object的运行时类 |
int | hashCode() | 获取对象的hash值 |
void | notify() | 唤醒在该对象监视器上等待的单个线程 |
void | notifyAll() | 唤醒等待此对象监视器上的所有线程 |
String | toString() | 返回对象的字符串表示形式 |
void | wait() | 当前线程等待获得锁,直到获得锁或中断 |
void | wait(long timeoutMillis) | 设置一个超时时间(毫秒) |
void | wait(long timeoutMillis,int nanos) | 设置一个超时时间(毫秒+纳秒) |
线程调用wait()方法后进入睡眠状态,以下情况会被终止线程睡眠:
- 其他线程调用了该对象的notify()/notifyAll()方法;
- 其他线程调用了interrupt中断该线程;
- 时间间隔到了(如果有的话)。
Objcets类
位于java.util包下
此类包含static
实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null
或null
方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。
所有方法
常用方法
1.equals(Object a,Object b)
解决调用对象为空的情况,比如:
public static void main(String[] args){
String s1 = null;
String s2 = "abc";
System.out.println(s1.equals(s2));// NullPointerException
}
当调用对象s1
为null
时,编译器就会抛出NullPointerException
,那么为了避免这种情况,就可以使用Objects类的equals()方法:
public static void main(String[] args){
String s1 = null;
String s2 = "abc";
//System.out.println(s1.equals(s2));// NullPointerException
System.out.println(Objects.equals(s1,s2));// false
}
下面附上Objects的equals()源码
public static boolean equals(Object a, Object b) {
//==判断地址
return (a == b) || (a != null && a.equals(b));
}
2…requireNonNull(T obj)
要求对象obj必须是非空,否则就抛出异常,在一些要求对象数据必须非空的场景下非常好用:
public static void main(String[] args) throws CloneNotSupportedException {
String s = null;
Objects.requireNonNull(s);
}
源码
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
eNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}