海安零距离 海安论坛 海安新闻 海安

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2401|回复: 0

Java 从入门到进阶之路(十八)

[复制链接]

6234

主题

6234

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18718
发表于 2019-12-27 14:22 | 显示全部楼层 |阅读模式
在之前的文章我们先容了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object。
在日常生存中,任何事物我们都可以看做是一个对象,在编程中是同样的原理,在 Java 编程中实在更突出,由于 Java 就是一门面向对象的编程语言。
我们先来看下面的代码:
  1. 1 public class Main { 2     public static void main(String[] args) { 3         Person person = new Person(); 4 //        person.age = 1000; // 编译错误 5 //        System.out.println(person.age); // 编译错误 6         person.setAge(1000); 7         System.out.println(person.getAge()); // 0 8  9         person.setAge(10);10         System.out.println(person.getAge()); // 1011 12         System.out.println(person.toString()); // Person@1b6d358613     }14 }15 16 class Person {17     private int age;18 19     public int getAge() {20         return age;21     }22 23     public void setAge(int age) {24         if (age < 0 || age > 100) {25             return;26         }27         this.age = age;28     }29 }30     }31 32     public void setAge(int age) {33         if (age < 0 || age > 100 ) {34             return;35         }36         this.age = age;37     }38 }
复制代码
在上面的代码中,我们界说了 get 和 set 方法来实现私有属性的获取和更改,起到了对私有属性的掩护作用。
在上面的代码中,我们还写了一个 toString() 方法,但是我们并没有在 Person 类中界说该方法,这是由于当我们界说 Person 类的时间,体系会默认继承 Object 类,且 Object 类中有 toString() 方法,而且输出为一个 类名@地点,这个字符串没有什么实际意义。因此通常我们要使用一个类的 toString 方法时,就应当重写该方法,重写该方法后,返回的字符串没有严酷的格式要求,未来可以根据需求而定,但是原则上该字符串应当包罗当前对象的属性信息,只有当我们自界说的类须要重写该方法时,JAVA API 提供的类通常都已经重写了该方法。
下面我们将 toString() 方法举行重写:
  1. 1 public class Main { 2     public static void main(String[] args) { 3         Point point = new Point(1, 2); 4         String string = point.toString(); 5         System.out.println(string); // (1,2) 6     } 7 } 8  9 class Point {10     private int x;11     private int y;12 13     public int getX() {14         return x;15     }16 17     public void setX(int x) {18         this.x = x;19     }20 21     public int getY() {22         return y;23     }24 25     public void setY(int y) {26         this.y = y;27     }28 29     public Point() {30     }31 32     public Point(int x, int y) {33         this.x = x;34         this.y = y;35     }36 37     public String toString() {38         return "(" + x + "," + y + ')';39     }40 }
复制代码
在上面的代码中,我们界说了一个 Point 类,相称于二维坐标系上的一个点,我们通过重写 toString 方法实现了一个坐标点的位置。
在 Object 类中尚有界说好的 equals 方法,意思是比力两个对象,如下:
  1. public class Main {    public static void main(String[] args) {        Point point1 = new Point(1, 2);        Point point2 = new Point(1, 2);        System.out.println(point1 == point2); // false        System.out.println(point1.equals(point2)); // false    }}
复制代码
在上面的代码中,point1 == point2 实在比力的是两个类的引用地点,以是为 false,我们看一下 equals 方法的源码:
  1. 1   public boolean equals(Object obj) {2         return (this == obj);3     }
复制代码
在上面的代码中,Object 类的 equals 方法实在也是相称于 == 的方法来举行比力,以是当我们使用 equals 方法时同样须要举行重写,他的作用是比力两个对象(当前对象与给定对象)内容是否一样,如下:
  1. 1 public class Main { 2     public static void main(String[] args) { 3         Point point1 = new Point(1, 2); 4         Point point2 = new Point(1, 2); 5         System.out.println(point1 == point2); // false 6         System.out.println(point1.equals(point2)); // true 7     } 8 } 9 10 class Point {11     private int x;12     private int y;13 14     public int getX() {15         return x;16     }17 18     public void setX(int x) {19         this.x = x;20     }21 22     public int getY() {23         return y;24     }25 26     public void setY(int y) {27         this.y = y;28     }29 30     public Point() {31     }32 33     public Point(int x, int y) {34         this.x = x;35         this.y = y;36     }37 38     public String toString() {39         return "(" + x + "," + y + ')';40     }41 42     public boolean equals(Object object) {43         if (object == null) {44             return false;45         }46         if (object == this) {47             return true;48         }49         if (object instanceof Point) {50             Point point = (Point) object; // 强转为point类型51             return this.x == point.x && this.y == point.y;52         }53         return false;54     }55 }
复制代码
当我们重写 equals 方法后,就可以获取我们想要的效果了,即上面代码第 6 行效果输出为 true。同样的,只有自己界说的类须要重写,JAVA API 提供的类根本都重写了 equals。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|深圳论坛-深圳人的网上家园  

GMT+8, 2020-10-2 01:01 , Processed in 0.112839 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表