查看源码——Object类、Class类
一·、Object作为所有Java类的根类。
方法有:registerNatives()、getClass()、hashCode()、equals()、clone()、toString()、notify()、notifyAll()、wait()、finalize()、
package java.lang;
public class Object
{
//一个本地方法,是用C/C++在DLL中实现,通过JNI调用
private static native void registerNatives();
//返回此Object的运行时类
public final native Class<?> getClass();
/*求哈希码:
hashCode的常规协定是:
1、java应用执行期间,对同一对象多次调用hashCode()返回相同整数。
从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
2.通过equals(object)判断两个对象是相等,则两个对象中每个对象调用hashCode()返回相同整数结果。
3.通过equals(java.lang.Object)判断两个对象不相等,则两个对象中每个对象调用hashCode()不一定返回相同整数结果。
但不相等的对象生成不同整数结果可以提高哈希表的性能。
*/
public native int hashCode();
//比较对象的内存地址
public boolean equals(Object paramObject)
{
return this == paramObject;
}
//本地clone方法,用于对象的复制
protected native Object clone()
throws CloneNotSupportedException;
//返回对象的字符串表示:全路径名 @ 哈希值的16进制格式
public String toString()
{
return getClass().getName() + "@" + Integer.toHexString(hashCode());
/*getClass().getName():获取字节码文件的对应全路径名,如java.lang.Object;
Integer.toHexString(hashCode()):将哈希值转成16进制数格式的字符串
*/
}
//唤醒在此对象监视器上等待的单个线程
public final native void notify();
//唤醒在此对象监视器上等待的所有线程
public final native void notifyAll();
/*在其他线程调用此对象的notify()方法或notifyAll()方法,或超过指定时间量前,导致当前线程等待。*/
public final native void wait(long paramLong)
throws InterruptedException;
public final void wait(long paramLong, int paramInt)
throws InterruptedException
{
if (paramLong < 0L) {
throw new IllegalArgumentException("timeout value is negative");
}
if ((paramInt < 0) || (paramInt > 999999)) {
throw new IllegalArgumentException("nanosecond timeout value out of range");
}
if (paramInt > 0) {
paramLong += 1L;
}
wait(paramLong);
}
//在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。
public final void wait()
throws InterruptedException
{
wait(0L);
}
//对象在垃圾回收前做最后的清理工作
protected void finalize() throws Throwable {}
static {}
}
/* Location: D:\Java\jre 1.8.0_171\lib\rt.jar
* Qualified Name: java.lang.Object
* Java Class Version: 8 (52.0)
* JD-Core Version: 0.7.1
*/
Object类在java.lang包下,使用java.lang包下的所有类,都不需要手动导入。
Java导包方法:
1、单类型导入:import java.util.Date
2、按需类型导入:import java.util.*;
JDK源码
(1)List、Map、Set实现类的源代码
(2)ReentrantLock、AQS的源代码
(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
(4)线程池的实现原理
(5)Object类中的方法以及每个方法的作用
(6)String源码
(7)常用的jdk工具:(jdk是java的开发工具包)
java.lang:系统的基础类,如String、Math、Integer、System和Thread,提供常用功能。
java.io:所有输入输出有关的类,比如文件操作等
java.net:与网络有关的类,如URL、URLConnection等
java.util:系统辅助类,如集合类Collection、List、Map等
java.sql:数据库操作的类,如Connection、Statement、ResultSet
二、Class类:
用来表示运行时类或接口的信息。
1、.class属性:类的规范化名称
2、getClass()方法:通过这个对象的引用获取对象所属的类型
3、forName(String className):显式加载指定类,并返回class对象
【ClassLoader的loadClass()也是】