IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Object 类详解 -> 正文阅读

[开发工具]Object 类详解

作者:recommend-item-box type_blog clearfix

我们学习的所有类、我们以后定义的所有类都是 Object 类的子类,也都具备 Object 类的所有特性。因此,我们非常有必要掌握 Object 类的用法。

2.1 Object 类基本特性

Object 类是所有 Java 类的根基类,也就意味着所有的 Java 对象都拥有 Object 类的属性和方法。如果在类的声明中未使用 extends 关键字指明其父类,则默认继承 Object 类。

【示例 5-4】Object 类

public class Person {

...

}

//等价于:

public class Person extends Object {

...

}

补:IDEA 部分快捷键

IDEA 快捷键和相关操作:

  1. 类的结构视图:alt+7
  2. 看类的源码:ctrl+左键
  3. 查看类的关系:鼠标放到类名上,右键-->Diagram-->show Diagram
  4. 自动生成构造器、get、set 方法、equals 等:alt+insert
  5. 鼠标悬停显示提示(重新设置:File-->Setting-->Editor-->general):

?

  1. 快捷输出常见字符串:
    1. main?? public? static void main(String[] args){}
    2. sout?? System.out.println();
    3. soutm? System.out.println(“描述:所在类中的,所在方法”);

2.2 toString 方法

Object 类中定义有 public String toString()方法,其返回值是 String 类型。Object 类中 toString 方法的源码为:

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

根据如上源码得知,默认会返回“类名+@+16 进制的 hashcode”。在打印输出或者用字符串连接对象时,会自动调用该对象的 toString()方法。

【示例 5-5】重写 toString()方法

class Person {

String name;

int age; @Override

public String toString() {

return name+",年龄:"+age;

}

}

public class Test {

public static void main(String[ ] args) {

Person p=new Person();

p.age=20;

p.name="李东";

System.out.println("info:"+p);

Test t = new Test();

System.out.println(t);

}

}

执行结果如图 5-4 所示:

?

图 5-4 示例 5-5 运行效果图

2.3 ==和 equals 方法

“==”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。

Object 类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为 id 相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。

Object 的 equals 方法默认就是比较两个对象的 hashcode,是同一个对象的引用时返回 true 否则返回 false。但是,我们可以根据我们自己的要求重写 equals 方法。

【示例 5-6】自定义类重写 equals()方法

public class TestEquals { public static void main(String[ ] args) {

Person p1 = new Person(123,"高淇");

Person p2 = new Person(123,"高小七");

??????? System.out.println(p1==p2);??? //false,不是同一个对象

?????? System.out.println(p1.equals(p2)); //true,id相同则认为两个对象内容相同

String s1 = new String("尚学堂");

String s2 = new String("尚学堂");

?????? System.out.println(s1==s2);?????????? //false, 两个字符串不是同一个对象

?????? System.out.println(s1.equals(s2)); //true, 两个字符串内容相同

}

}

class Person { int id;

String name;

public Person(int id,String name) { this.id=id;

this.name=name;

}

public boolean equals(Object obj) { if(obj == null){ return false;

}else {

if(obj instanceof Person) {

Person c = (Person)obj; if(c.id==this.id) { return true;

}

}

}

return false;

}

}

JDK 提供的一些类,如 String、Date、包装类等,重写了 Object 的 equals 方法,调用这些类的 equals 方法, x.equals (y) ,当 x 和 y 所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回 true 否则返回 false。

2.4? super 关键字(相当于调用父类的构造方法)

super“可以看做”是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。

使用 super 调用普通方法,语句没有位置限制,可以在子类中随便调用。

在一个类中,若是构造方法的第一行代码没有显式的调用 super(...)或者 this(...);那么 Java 默认都会调用 super(),含义是调用父类的无参数构造方法。这里的 super()可以省略。

【示例 5-7】super 关键字的使用

public class TestSuper01 { public static void main(String[ ] args) { new ChildClass().f();

}

}

class FatherClass {

public int value;

public void f(){

value = 100;

System.out.println ("FatherClass.value="+value);

}

}

class ChildClass extends FatherClass {

public int value;

public void f() {

super.f();? //调用父类的普通方法

value = 200;

System.out.println("ChildClass.value="+value);

System.out.println(value);

System.out.println(super.value); //调用父类的成员变量

}

}

执行结果如图 5-5 所示:

?

图 5-5 示例 5-7 运行效果图

2.6 继承树追溯

·属性/方法查找顺序:(比如:查找变量 h)

  1. 查找当前类中有没有属性 h
  2. 依次上溯每个父类,查看每个父类中是否有 h,直到 Object
  3. 如果没找到,则出现编译错误。
  4. 上面步骤,只要找到 h 变量,则这个过程终止。

·构造方法调用顺序:

构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到 Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

【示例 5-8】继承条件下构造方法的执行过程

public class TestSuper02 {

public static void main(String[ ] args) {

System.out.println("开始创建一个ChildClass对象......"); new ChildClass();

}

}

class FatherClass { public FatherClass() {

System.out.println("创建FatherClass");

}

}

class ChildClass extends FatherClass { public ChildClass() {

System.out.println("创建ChildClass");

}

}

执行结果如图 5-6 所示:

?

图 5-6 示例 5-8 运行效果图

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:56:13  更:2021-12-23 15:56:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:45:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码