往期回顾:
在前端中,每一个对象都继承了原型链顶层Object原型对象上的所有方法,如hasOwnProperty()方法。
let person = {
name:'shixiaoshi',
}
if(!person.hasOwnProperty('age')){
person.age = 18
}
上述代码中,person对象的hasOwnProperty方法继承自其顶层对象Objec原型对象上的方法。
在Java中,Object是所有类的根类,这一点和前端的概念也基本是一致的。
我们先看一段基础代码
上述代码中,我们定义了一个Person类,并在主类中打印其name属性的值。
在Java中,所有类都隐式地继承自Object类,因此,上述代码其实可以这么写:
package 类与对象;
public class Object_01 {
public static void main(String[] args) {
Person obj = new Person();
System.out.println(obj.name);
}
}
class Person extends Object{
String name = "shixiaoshi";
}
基于这种规则,我们还可以在Object_01类中引用Person类时,使用Object来指明其类型。如
package 类与对象;
public class Object_01 {
public static void main(String[] args) {
// 使用Object指明 obj类型
Object obj = new Person();
}
}
class Person extends Object{
String name = "shixiaoshi";
}
但注意,使用 Object指明obj类型时,obj继承的是Object上的所有方法,Person类上的方法或属性会丢失
如图,我们使用Object约束obj时,编译器已经无法识别其name属性,给出的提示都是Object类定义了一些通用的方法,如toString()方法等。
我们在编译器里单击Object, 可以定位到Object类定义的位置
如图,我们可以知道Object定义在java.lang包里,是这个包里定义的类
Object类定义了一些通用的方法,这些方法在所有的Java对象中都可以使用。
以下是Object类中常用的方法(不用记,了解有这些东西就行)
Object类是Java中所有类的祖先,它提供了一些通用的方法,可以在所有Java对象中使用。但在实际开发中,我们通常不直接使用Object类,而是使用它的子类,因为它的子类会提供更具体的功能和行为。
接下来,我们学习一些简单的方法,再加深下对Object的理解
我们先来看一段代码
上述代码中,我们将Obj通过toString()方法转换成了字符,并打印出了 其结果。
现在,我们简单介绍下toString()方法的作用:
toString()方法可以将对象转换成字符串,其打印的地址就是对象的默认内存地址。
内存地址的概念和前端中是一样的,这里涉及到深浅拷贝,值引用和对象引用等概念,这些概念不熟悉的同学快下去复习吧
为了更直观的理解打印的内容,我们可以将这个方法进行重写,我们先准备如下代码
package 类与对象;
public class Object_01 {
public static void main(String[] args) {
// 使用Object指明 obj类型
Object obj = new Person();
System.out.println(obj.toString());
}
}
class Person {
}
鼠标放到Person类里面,点击ctrl + o ,可以快速改写代码
上述代码的运行结果自然是打印出了我们自定义的内容
注意:“My name is “+name+”” 中的 “+name+” 是java中字符拼接的方法
这个方法用于返回对象的内存地址(和toString方法效果一致)
package 类与对象;
public class Object_01 {
public static void main(String[] args) {
// 使用Object指明 obj类型
Object obj = new Person();
// toString 方法
System.out.println("tosrting方法" + obj.toString());
// hashCode 方法
System.out.println("hashCode方法" + obj.hashCode());
}
}
class Person { }
运行结果
可能你会有疑问,74a14482的内存地址和1956725890的内存地址不一致啊,实际上,一个是16进制,一个是10进制的显示而已
用于判断两个对象是否相等。默认情况下,equals() 方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。
我们先看一个简单例子
package 类与对象;
public class Object_01 {
public static void main(String[] args) {
// 使用Object指明 obj类型
Object obj = new Person();
// equals 方法
System.out.println(obj.equals(new Person())); // 打印结果是false
}
}
class Person { }
这个打印结果告诉我们,obj 和new Person()不是一模一样的东西。
行了,我们就探究这么多,后面通过其他demo继续扩充我们的知识体系!!