理想论坛_专业20年的财经股票炒股论坛交流社区 - 股票论坛

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

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

[复制链接]

9650

主题

9650

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
28966
发表于 2019-12-27 13:59 | 显示全部楼层 |阅读模式
在之前的文章我们先容了一下 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|手机版|小黑屋|理想论坛_专业20年的财经股票炒股论坛交流社区 - 股票论坛

GMT+8, 2020-7-12 19:11 , Processed in 0.160146 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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