您好,登录后才能下订单哦!
请求超时!
请点击 重新获取二维码这篇文章给大家分享的是有关Java中Class和Object是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
刚开始学的时候,老师对我们说的第一句话就是在Java的世界里一切都是对象。那么这个对象是什么呢?就是在java.lang包下面的Object对象。Object是一个具体的类,它的设计主要是为了扩展。在JDK中对于Object的描述如下:
它的意思是Object在类层级中是root,是每个类的父类。所有对象,包括数组以及类里面的方法。
但是这里面没有提及到接口。而且我们在IDE里面查询对象以及接口的层级结构也不一样:
我们可以看到在java.util.Timer的类表示.
Timer.class
Ctrl + h
查看它的类结构体系如下:
java.util.concurrent.Future
的类继承体系。
如果一个没有直接父类接口,接口声明了一个public abstract
方法m,JVM将会为接口标隐含定义了Object类中的方法签名完全相同的方法。除非在接口明确的定义了在接口中定义了同样方法签名,同样返回值以及throws同样的异常。
但是要注意以下两点:
如果在接口中定义了与Object定义相同的方法,并且声明为final。那么就会出现编译异常。
如果在接口中定义了与Object定义签名相同的方法。但是它不符合Object的重写规范那。就是返回值类型不同,或者抛出不兼容的异常,或者不是abstract的方法。也会出现编译异常。
下面我们就来看一看Object里面的方法。Object作为通用的类,作为通用的类不能够满足于各种各样的业务场景,所以对于它所有的非final方法(equals、hashcode、toString、clone和finalize)都有明确的通用约定,因为它们的设计成是要被覆盖的。任何一个类,它在覆盖这些方法的时候,都有责任遵守这些通用约定,其他依赖于这些约定的类(例如HashMap和HashSet)就无法结合该类一起正常工作了。
获取当前对象的类类型,使用这个对象可以执行反射操作。
返回当前对象的hash code值。当这个对象需要使用到hash表的时候需要重写这个方法。同时也需要重写equals方法。
表明其它对象是否写当前对象相等。默认是判断两个对象的引用地址是否相等。而在Effective Java中推荐覆盖equals方法的时候总要覆盖hashCode方法。而需要覆盖equals方法的时候需要遵守它的通用规定。下面就约定的内容:
自反性(reflexive):对于任何非null的引用值x,x.equals(x)必须返回true.
对称性(symmetric):对于任何非null的引用值x,y,当且仅当y.equals(x)返回true时x.equals(y)必须返回true。
传递性(transitive):对于任何非null的引用值x,y,z。如果x.equals(y)返回true.并且y.equals(z)也返回true,那么x.equals(z)也必须返回true.
一致性(consistent):对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者一致地false。
对于任何非null的引用值x,x.equals(null)必须返回false
创建并且返回这个对象的copy。精确的表达”copy”依赖于该对象的类。一般情况下,对于对象x:
表达式:x.clone() != x,将会为true
表达式:x.clone().getClass() == x.getClass(),将会为true
表达式:x.clone().equals(x),将会为true.
默认情况下满足这种情况,但这个并不是绝对的。
按照约定:一般通过调用super.clone获取到返回对象。如果一个类以及它的所有超类就会出现:x.clone().getClass() == x.getClass().
而且Object类并没有实现Cloneable接口。因此如果一个类并没有实现Cloneable接口,而且它的实例还调用clone方法就会出现CloneNotSupportedException.
虽然java.lang.Object提供了toString方法的一个实现,但它返回的是类的名称以及一个”@”符号,接着是散列码的无符号十六进制表示法。例如:Object@163b91,这种表示方法对于用户是非常不友好的。所以toString的约定是:建议所有的子类都覆盖这个方法。
唤醒被当前线程监控正在等待的一个线程。如果有这个对象中许多线程正在等待,就会从它们中选择一个来唤醒。这个选择是根据各个不同的系统来任意决定的,也就是说多个线程在waiting是随机选择一个线程来唤醒。
这个方法仅仅能够被是这个对象的monitor调用。一个线程可以通过以下3种方式来成为这个对象的monitor的拥有者。
执行这个对象的同步实例方法。
执行这个对象的同步代码块。
对于Class对象,执行一个同步静态方法。
并且在同一时间只能有一个线程做为一个对象minitor的拥有者。
唤醒被当前线程监控正在等待所有线程。如果是一个线程被这个对象monitor的话,可以调用wait方法。
这个方法也仅难能被这个对象的monitor的拥有者调用。具体可以看一下notity方法中介绍一个线程如何才能够成功一个monitor的拥有者。
这三个方法的功能都是一样的,都是让线程进入等待状态。只是等待的超时时间的设置方式不同。调用这三个方法都是暂停当前线程,直到另外一个线程调用notify方法或者notifyall方法或者其它线程中断了当前线程,或者过了超时时间。
当没有引用指向这个对象的时候,调用这个对象的垃圾回收。子类可以重写finalize方法用来处理系统资源或者执行其它清除操作。
一般情况下当JVM确定这个对象没有被其它对象引用的时候,就会调用finalize方法。一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这 里面涉及到很多东西,比如对象空间树等内容)。
不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时就需要我们覆盖默认的方法来实现对这部分内存的正确释放和回收(比如C++需要delete)。
总之,finalize相当于析构函数,他是垃圾回收器回收一个对象的时候第一个要调用的方法。不过由于Java的垃圾回收机制能自动为我们做这些事情,所以我们在一般情况下是不需要自己来手工释放的。
先有Class还是先有Object?
Java的对象模型中:
所有的类都是Class类的实例,Object是类,那么Object也是Class类的一个实例。
所有的类都最终继承自Object类,Class是类,那么Class也继承自Object。
感谢各位的阅读!关于“Java中Class和Object是什么意思”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
玻璃钢生产厂家房山区商场美陈公司报价玻璃钢园林雕塑品牌江苏季节性商场美陈批发玻璃钢仿不锈钢雕塑安阳玻璃钢泡沫雕塑生产长宁区拉丝玻璃钢雕塑服务介绍江苏商场美陈供应衢州创意玻璃钢雕塑哪家便宜玻璃钢大白雕塑玻璃钢花盆定制价位实惠的景观玻璃钢雕塑锻铜玻璃钢彩绘雕塑定做厂家商场室外美陈哪家好鹤壁景观玻璃钢卡通雕塑都匀浮雕玻璃钢雕塑公司衢州玻璃钢海豚雕塑价格内蒙古玻璃钢雕塑设计安装商场里的美陈是什么意思江苏玻璃钢园艺雕塑卡通造型玻璃钢雕塑艺术摆件仿木纹玻璃钢卡通雕塑常用玻璃钢花盆研发公司陕西商场节庆美陈雕塑厂家玻璃钢与水泥雕塑哪个好艺术商场美陈供应河北玻璃钢动物雕塑濮阳大型玻璃钢景观雕塑宿迁哪里有做玻璃钢雕塑麻城玻璃钢雕塑五华区玻璃钢雕塑设计与制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万