韶关做网站需要多少钱,合肥网站制作公司排名,网站建设公司科技寡头正在垄断世界,荥阳做网站优化什么是Object类#xff1f;
类 java.lang.Object是类层次结构的根类#xff0c;即所有其它类的父类。每个类都使用 Object 作为超类。#xff08;父类和超类是一个意思#xff0c;不同的叫法#xff09; 也就是当初的Java语言设计时#xff0c;就将Object作为所有类的父…什么是Object类
类 java.lang.Object是类层次结构的根类即所有其它类的父类。每个类都使用 Object 作为超类。父类和超类是一个意思不同的叫法 也就是当初的Java语言设计时就将Object作为所有类的父类 是万类之父。
①Object类型的变量与除Object以外的任意引用数据类型的对象都存在多态引用。
method(Object obj){…} //可以接收任何类作为其参数
Person o new Person();
method(o);②所有对象包括数组都实现这个类的方法。 ③如果一个类没有特别指定父类那么默认则继承自Object类。
public class Person {...
}
//等价于
public class Person extends Object {...
}Object类的相关方法
equals() 基本类型比较值:只要两个变量的值相等即为true。 int a5;
if(a6){…}引用类型比较引用(是否指向同一个对象)只有指向同一个对象时才返回true。 Person p1new Person();
Person p2new Person();
if (p1p2){…}用“”进行比较时符号两边的数据类型必须兼容(可自动转换的基本数据类型除外)否则编译出错
equals() 所有类都继承了Object也就获得了equals()方法。还可以重写。
只能比较引用类型Object类源码中equals()的作用与“”相同比较是否指向同一个对象。特例当用equals()方法进行比较时对类File、String、Date及包装类Wrapper Class来说是比较类型及内容而不考虑引用的是否是同一个对象 原因在这些类中重写了Object类的equals()方法。当自定义使用equals()时可以重写。用于比较两个对象的“内容”是否都相等。
经典面试题和equals的区别 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值对于引用类型就是比较内存地址equals的话它是属于java.lang.Object类里面的方法如果该方法没有被重写过默认也是;我们可以看到String等类的equals方法是被重写过的而且String类在日常开发中用的比较多久而久之形成了equals是比较值的错误观点。具体要看自定义类里有没有重写Object的equals方法来判断。通常情况下重写equals方法会比较类中的相应属性是否都相等。
toString()
方法声明public String toString()
① 默认情况下toString()返回的是“对象的运行时类型 对象的hashCode值的十六进制形式
② 在进行String与其它类型数据的连接操作时自动调用toString()方法
Date nownew Date();
System.out.println(“now”now); //相当于
System.out.println(“now”now.toString()); ③ 如果我们直接System.out.println(对象)默认会自动调用这个对象的toString()
因为Java的引用数据类型的变量中存储的实际上是对象的内存地址但是Java对程序员隐藏内存地址信息所以不能直接将内存地址显示出来所以当你打印对象时JVM帮你调用了对象的toString()。
④ 可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法返回字符串的值。
s1hello;
System.out.println(s1);//相当于System.out.println(s1.toString());例如自定义的Person类
public class Person { private String name;private int age;Overridepublic String toString() {return Person{ name name \ , age age };}
}finalize()
当对象被回收时系统自动调用该对象的 finalize() 方法。不是垃圾回收器调用的是本类对象调用的 永远不要主动调用某个对象的finalize方法应该交给垃圾回收机制调用。 什么时候被回收当某个对象没有任何引用时JVM就认为这个对象是垃圾对象就会在之后不确定的时间使用垃圾回收机制来销毁该对象在销毁该对象前会先调用 finalize()方法。子类可以重写该方法目的是在对象被清理之前执行必要的清理操作。比如在方法内断开相关连接资源。 如果重写该方法让一个新的引用变量重新引用该对象则会重新激活对象。 在JDK 9中此方法已经被标记为过时的。
public class FinalizeTest {public static void main(String[] args) {Person p new Person(Peter, 12);System.out.println(p);p null;//此时对象实体就是垃圾对象等待被回收。但时间不确定。System.gc();//强制性释放空间}
}class Person{private String name;private int age;public Person(String name, int age) {super();this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}//子类重写此方法可在释放对象前进行某些操作Overrideprotected void finalize() throws Throwable {System.out.println(对象被释放--- this);}Overridepublic String toString() {return Person [name name , age age ];}}getClass()
public final Class? getClass()获取对象的运行时类型
因为Java有多态现象所以一个引用数据类型的变量的编译时类型与运行时类型可能不一致因此如果需要查看这个变量实际指向的对象的类型需要用getClass()方法
public static void main(String[] args) {Object obj new Person();System.out.println(obj.getClass());//运行时类型
}结果
class com.atguigu.java.Person