Object类
在Java类继承结构中, java.lang.Object类位于顶端
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为java.lang.Object类;
Object类型的引用变量可以指向任何类型对象
get、set方法:获取和修改属性
javabean 规定的属性获取与修改方法get、set
public class Point {
private int age;
/**
* 年龄设置方法,满足条件返回设置值
*/
public void setAge(int age){
if(age<0||age>100){
return;
}
this.age = age;
}
/**
* 获取年龄的方法
*/
public int getAge(){
return this.age;
}
}
快捷生成Alt+shift+S,选中GettersSetters
toString方法:将一个对象转换为一个字符串
Object两个常被重写的方法之一
String toString()
该方法的设计意义是将一个对象转换为一个字符串
Object本身实现的toString方法返回的是对象的“句柄”,即该对象的引用信息(地址)
格式为:类名@地址
public class Demo {
public static void main(String[] args) {
Point p = new Point(1,2);
String str = p.toString();
System.out.println(str);
}
}
通常我们使用一个类的toString方法,就应当重写这个方法
(java API提供的类大部分都应经重写了,无需我们重写,所以我们只需要重写自己定义类中的该方法)
返回的字符串没有严格的格式要求
但应当返回这个对象的属性信息,便于通过返回的字符串了解当前对象的属性信息
//Point.java
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString(){
return "("+x+","+y+")";
}
}
//Demo.java
public class Demo {
public static void main(String[] args) {
Point p = new Point(1,2);
String str = p.toString();
System.out.println(str);
}
}
注意:
System.out.println(Object obj);
该方法就是将给定对象的 toString 方法返回的字符串输出到控制台
重写了toString方法后,直接打印对象将输出重写后toString方法的返回字符串
如上述Point类重写toString方法后
public class Demo {
public static void main(String[] args) {
Point p = new Point(1,2);
System.out.println(p); //输出(1,2)
}
}
equals方法:两个对象内容比较
Object两个常被重写的方法之一
boolean equals(Object obj)
该方法用于比较当前对象(this)与参数对象(obj)的内容比较
当前两个对象内容相同时equals方法返回值应相当于true
equals方法在不重写的情况下,Object定义的是使用"=="比较的
//Point.java
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
//重写equals方法
public boolean equals(Point p) {
return (this.x==p.x && this.y==p.y);
}
}
//Demo.java
public class Demo {
public static void main(String[] args) {
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
//不重写时比较的引用对象,返回false
//重写后比较规定的对象内容,返回true
System.out.println(p1.equals(p2));
}
}
(java API提供的类大部分都应经重写了,无需我们重写,所以我们只需要重写自己定义类中的该方法)
euals的判断原则:
- 判断的对象是不是null,如果是null,直接返回false;
- 比较的两个对象是不是同一个(obj是不是就是this),如果是直接返回true
- 判断两个对象是不是属于同一个类
所以上述代码优化为
//Point.java
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
//重写equals方法
public boolean equals(Point p) {
if(obj == null){
return false;
}
if(obj == this){
return true;
}
if(obj instanceof Point){
Point p = (Point)obj;
return this.x==p.x&&this.y==p.y;
}
return false;
}
}
//Demo.java
public class Demo {
public static void main(String[] args) {
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
//不重写时比较的引用对象,返回false
//重写后比较规定的对象内容,返回true
System.out.println(p1.equals(p2));
}
}
快捷生成Alt+shift+S,选中hashCode() and equals()
注意,会附加生成一个hashCode()方法
因为在java开发文档上要求我们重写equals()时,也要重写hashCode()
所以我们不要删