Class & Object
原创
©著作权归作者所有:来自51CTO博客作者wx63637f8e01d6a的原创作品,请联系作者获取转载授权,否则将追究法律责任
Class & Object
- 记录类的类型信息
- 类加载时候jvm为当前类生成Class创建对象,该对象存储再堆中
- 该类的实例需要通过此class对象进行实例化
- Class对象由jvm创建 <因为Class有一个私有的构造函数>
- 作用: 运行时提供某个对象的类型信息
- 提供的类型信息
-
Class.forname()
根据类名获取 -
clazz.getClass()
根据当前类的实例获取 -
ClassA.class
根据类的class获取
Class c = Class.forName("ClassA");
System.out.println(c.getName());
ClassA a = (ClassA) c.newInstance();
System.out.println(a.name());
- 所有类的祖先
- 一共13个方法,9个子类可以访问,没有属性
public方法
clone
浅复制,实现cloneable接口
native方法
返回一个新的引用
浅拷贝
两个对象的引用类型公用同一份内存地址,修改其中一个,两一个也会被修改
深拷贝
再次动态分配内存,两个地址空间没有关联
拷贝时间花销大
finalize
释放资源前调用
空实现
jvm调用 (一般不是程序员自己调用)
wait
该对象在当前线程上等待
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
notify 唤醒当前对象监听器上的某个等待线程
notifyall 唤醒当前对象监听器上的所有等待线程
getclass
获得运行时类型
native方法
java专门的Class类描述对象的属性
equals
内容比较
== 基本类型直接存储值,引用类型存储对象的地址 <比较的是变量的值是否相同>
equals 比较内容完全相同
hashcode
常常伴随equals一起重写
对象的hashCode()返回的不是对象所在的物理内存地址。甚至也不一定是对象的逻辑地址
hashCode()相同的两个对象,不一定相等,换言之,不相等的两个对象,hashCode()返回的哈希码可能相同。
因此,在上述代码中,重写了equals()方法后,需要重写hashCode()方法。
tostring
由对象的类型和其哈希码唯一确定
同一类型但不相等的两个对象分别调用toString()方法返回的结果可能相同。
整理自网络