建设工程项目查询网站,服务平台管理系统,安徽中机诚建建设有限公司网站,中企动力科技股份有限公司沈阳分公司往期回顾#xff1a;
【前端学java】JAVA开发的依赖安装与环境配置 #xff08;0#xff09;【前端学 java】java的基础语法#xff08;1#xff09;【前端学java】JAVA中的packge与import#xff08;2#xff09;【前端学java】面向对象编程基础-类的使用 #xff08…往期回顾
【前端学java】JAVA开发的依赖安装与环境配置 0【前端学 java】java的基础语法1【前端学java】JAVA中的packge与import2【前端学java】面向对象编程基础-类的使用 3【前端学java】类中的访问权限详解通俗易懂4【前端学java】java中final修饰符5【前端学java】全网最通俗易懂的JAVA抽象概念6【前端学java】Java中的接口和枚举概念7
引言-前端原型Object回顾
在前端中每一个对象都继承了原型链顶层Object原型对象上的所有方法如hasOwnProperty()方法。
let person {nameshixiaoshi,
}
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类定义的位置 如图我们可以知道Object定义在java.lang包里是这个包里定义的类
Object类的通用方法
Object类定义了一些通用的方法这些方法在所有的Java对象中都可以使用。
以下是Object类中常用的方法不用记了解有这些东西就行
toString() 返回对象的字符串表示形式。默认情况下该方法返回对象的类名和哈希码的十六进制表示。equals(Object obj) 用于判断两个对象是否相等。默认情况下equals() 方法比较的是对象的引用是否相同即是否指向同一个内存地址。在自定义类中可以重写equals() 方法来定义对象的相等性比较规则。hashCode() 返回对象的哈希码。哈希码用于在哈希表等数据结构中快速定位对象。getClass() 返回对象的运行时类Runtime Class即对象所属的类的Class对象。notify() 和notifyAll() 用于在多线程编程中实现线程间的通信。这两个方法用于唤醒等待中的线程。wait() 用于在多线程编程中实现线程的等待。调用该方法会使当前线程进入等待状态直到其他线程调用notify() 或notifyAll() 方法唤醒它。clone() 用于创建并返回对象的副本。默认情况下clone() 方法执行的是浅拷贝。如果需要实现深拷贝需要在自定义类中重写该方法。finalize() 用于垃圾回收器在回收对象之前执行一些清理操作。但由于这个方法在Java 9中被废弃不推荐使用。
Object类是Java中所有类的祖先它提供了一些通用的方法可以在所有Java对象中使用。但在实际开发中我们通常不直接使用Object类而是使用它的子类因为它的子类会提供更具体的功能和行为。
接下来我们学习一些简单的方法再加深下对Object的理解
toString
我们先来看一段代码 上述代码中我们将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中字符拼接的方法
hashCode
这个方法用于返回对象的内存地址和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
用于判断两个对象是否相等。默认情况下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继续扩充我们的知识体系!!