Java 从入门到进阶之路(十八)
在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object。
在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更突出,因为 Java 就是一门面向对象的编程语言。
我们先来看下面的代码:
public class Main {
public static void main(String[] args) {
Person person = new Person();
// person.age = 1000; // 编译错误
// System.out.println(person.age); // 编译错误
person.setAge(1000);
System.out.println(person.getAge()); //
person.setAge(10);
System.out.println(person.getAge()); //
System.out.println(person.toString()); // Person@1b6d3586
}
}
class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0 || age > 100) {
return;
}
this.age = age;
}
}
}
public void setAge(int age) {
if (age < 0 || age > 100 ) {
return;
}
this.age = age;
}
}
在上面的代码中,我们定义了 get 和 set 方法来实现私有属性的获取和更改,起到了对私有属性的保护作用。
在上面的代码中,我们还写了一个 toString() 方法,但是我们并没有在 Person 类中定义该方法,这是因为当我们定义 Person 类的时候,系统会默认继承 Object 类,且 Object 类中有 toString() 方法,并且输出为一个 类名@地址,这个字符串没有什么实际意义。因此通常我们要使用一个类的 toString 方法时,就应当重写该方法,重写该方法后,返回的字符串没有严格的格式要求,将来可以根据需求而定,但是原则上该字符串应当包含当前对象的属性信息,只有当我们自定义的类需要重写该方法时,JAVA API 提供的类通常都已经重写了该方法。
下面我们将 toString() 方法进行重写:
public class Main {
public static void main(String[] args) {
Point point = new Point(1, 2);
String string = point.toString();
System.out.println(string); // (1,2)
}
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "(" + x + "," + y + ')';
}
}
在上面的代码中,我们定义了一个 Point 类,相当于二维坐标系上的一个点,我们通过重写 toString 方法实现了一个坐标点的位置。
在 Object 类中还有定义好的 equals 方法,意思是比较两个对象,如下:
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 方法的源码:
public boolean equals(Object obj) {
return (this == obj);
}
在上面的代码中,Object 类的 equals 方法其实也是相当于 == 的方法来进行比较,所以当我们使用 equals 方法时同样需要进行重写,他的作用是比较两个对象(当前对象与给定对象)内容是否一样,如下:
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)); // true
}
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "(" + x + "," + y + ')';
}
public boolean equals(Object object) {
if (object == null) {
return false;
}
if (object == this) {
return true;
}
if (object instanceof Point) {
Point point = (Point) object; // 强转为point类型
return this.x == point.x && this.y == point.y;
}
return false;
}
}
当我们重写 equals 方法后,就可以获取我们想要的结果了,即上面代码第 6 行结果输出为 true。同样的,只有自己定义的类需要重写,JAVA API 提供的类基本都重写了 equals。
Java 从入门到进阶之路(十八)的更多相关文章
- Java 从入门到进阶之路(八)
在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法. 我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0. ...
- Java 从入门到进阶之路(十)
之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...
- Java 从入门到进阶之路(十二)
在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...
- Java 从入门到进阶之路(十五)
在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...
- Java 从入门到进阶之路(十四)
在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...
- Java 从入门到进阶之路(十六)
在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...
- Java 从入门到进阶之路(十九)
在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...
- Java 从入门到进阶之路(二十)
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...
- Java 从入门到进阶之路(二十二)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...
随机推荐
- mysql时间戳详解及运用
1.在已有表cms_nrgl_st 增加时间戳,这个时间是当前时间精确到秒的 alter table cms_nrgl_st add time_stamp TIMESTAMP DEFAULT CURR ...
- Python与C语言基础对比(Python快速入门)
代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3 如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同 ...
- Pacemaker+ISCSI实现Apache高可用-环境准备
Pacemaker是红帽7上的集群管理器,用于替代6上RHCS 配置ISCSI 服务端 yum -y install targetcli systemctl enable target.service ...
- JS实现点击table中任意元素选中
上项目开发,忙的焦头烂额,博客也没咋更新了. 昨天老师提了个需求,简单的小例子,选择tr中任一行选中tr,觉得很有意思,记录一下: 上代码 <!DOCTYPE html> <html ...
- 【PAT甲级】1114 Family Property (25分)(并查集)
题意: 输入一个正整数N(<=10000),接着输入N行每行包括一个人的ID和他双亲的ID以及他的孩子数量和孩子们的ID(四位整数包含前导零),还有他所拥有的房产数量和房产面积.输出一共有多少个 ...
- Ehab and a Special Coloring Problem
You're given an integer nn. For every integer ii from 22 to nn, assign a positive integer aiai such ...
- Custom LED Keychain, Small And Surefire Gifts
The LED Keychain makes it easy for people to carry their keys with them and carry them with th ...
- 每天进步一点点------Allegro 手工布线时控制面板各选项说明
在进行手工布线过程中,最重要的就是对控制面板中的各个选项进行设置,因此首先介绍控制面板中各个选项的含义. 手工布线的命令为Route->connect,执行命令后,右侧控制面板如图8.14所示. ...
- Oracle的表空间、用户和模式
Oracle 的 表空间(Tablespace).用户(User).模式(Schema) 前面有整理了一篇 Oracle 数据库(database) 与 实例(instance) 的概念及关系整理 ...
- Multisim 如何添加文本 如何编辑文本字体
1.在Multisim中如何添加文本 方法1)Place -> Text 方法2)Ctrl+T 2.如何修改字体的大小及颜色