从头开始学JDK-------Object

网友投稿 248 2022-09-21

从头开始学JDK-------Object

目录

​​* Object #getClass​​

​​* Object #hashcode ​​

​​* Object #equals​​

​​* Object #toString​​

​​* Object #clone​​

​​* Object #线程相关的方法​​

​​* Object #垃圾回收​​

* Object #getClass

获取每个类的字节码文件。返回Class类。static synchronize的锁就是这个类的字节码文件Class对象

final方法,不能够被重写的方法

* 衍生 Class类可以用于反射创建无参的对象

List classCreators = new ArrayList<>(); for (String classFullName : classNames) { //根据类全名生成对象 Class clazz = Class.forName(classFullName); classCreators.add(clazz.newInstance()); }

* 衍生 判断某个类的Clazz是另外一个类的Clazz的衍生类

this.getClass()返回这个类的Class文件

field.getType()拿到的也是这个Field代表的对象的Class文件

private List getRadios() { List radios = new ArrayList<>(); try { Field[] fields = this.getClass().getDeclaredFields(); for (Field field : fields) { if (field.getType().isAssignableFrom(JRadioButton.class)) { radios.add((JRadioButton) field.get(this)); } } } catch (Exception e) { throw new IllegalArgumentException("获取组件上的Radio出错!!"); } return radios; }

* Object #hashcode

本地方法,public,高频重写的方法。为什么要使用String类的hashcode作为Key,因为String是不可变类,线程安全,并且hashcode在String类中有缓存功能,计算一次即可。

* Object #equals

public,高频重写的方法。默认比较的是两个对象的引用地址。

public boolean equals(Object obj) { return (this == obj); }

* Object #toString

源代码中默认展示了 类的全限定名,以及它的hashcode的十六进制表示。

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

* Object #clone

本地方法,public。源代码注释上表示如果没有实现Cloneable接口,要求抛出异常。

根据面向对象的里氏替换原则,子类重写的时候应该要求返回一个原来对象的副本。源代码注释表示子类依旧可以抛出异常。

* Object #线程相关的方法

wait 、 notify 、notifyAll  都是final的,不得重写。操作的锁是调用的这个对象本身

* Object #垃圾回收

finalize ,protected属性,一般不重写,由JVM自己调用。为了迎合C++程序员做的方法。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信朋友圈自动点赞
下一篇:到此一游|深入非洲“奇迹之地”,看海龟产卵与神奇青蛙!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~