Object类
object类是所有java类的根基类。
如果在类的声明中未使用extends关键字指明器基类,则默认基类为object类
public class Person{
.......
}
等价于:
public class Person extends Object{
............
}
Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗。所有的类,不管是谁,都是从它继承下来的。
toString()方法介绍
Object类中定义有 public String toString()方法,其返回值是String类型,描述当前对象相关信息。
一个字符串和另外一种类型连接的时候,另外一种类型会自动转换成String类型,然后再和字符串连接。基础的数据类型int,float,double转换成字符串比较简单,按照它们的数字转换过来就成了,可以引用类型呢,Person p = new Person();一个字符串加上这个p,你就不知道要怎么把这个p转换成字符串了,因为这个p是一个引用类型。
任何一个类都是从Object类继承下来的,因此在任何一个类里面都可以重写这个toString()方法。toString()方法的作用是当一个引用对象和字符串作连接的时候,或者是直接打印这个引用对象的时侯,这个引用对象都会自动调用toString()方法,通过这个方法返回一个表示引用对象自己正常信息的字符串,而这个字符串的内容由我们自己去定义,默认的字符串内容是“类名+哈希编码”。因此我们可以通过在类里面重写toString()方法,把默认的字符串内容改成我们自己想要表达的正常信息的字符串内容。
equals()方法
Java中Object类是所有类的父类,它里面定义了equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
可以看到是使用= =来进行比较的,那么= =是什么意思呢?其实是比较两个对象的的内存地址。
Java中重写的equals()
为什么要在我们自己的类中重写equals()
但是有时候我们不满足于使用基本数据类型和Java实现的一些继承自Object的哪些类,比如我们实现一个Person类,它是继承自Object类的,所以它的equals()方法默认使用的是文章开头提到的哪个equals()方法,当我们使用equals()进行比较的时候,比较内存地址,那么有可能出现两个Person对象的参数都相同(比如年龄,身份证号等,在我们的实际认知中认为这两个人就是一个人,应该返回true),但是由于他们的内存地址是不一样的,所以equals()方法会返回false。
那么我们就需要去重写equals()方法。
重写equals()的规范
需要注意的是,在Java规范中,它对equals()方法的使用必须要遵循如下几个规则:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回false,前提是对象上 equals 比较中所用的信息没有被修改
对于任何非空引用值 x,x.equals(null) 都应返回false。
一般的equals()写法
下面给出一个完美的 equals 方法的建议:
1、显示参数命名为 otherObject,稍后会将它转换成另一个叫做 other 的变量。
2、判断比较的两个对象引用是否相等,如果引用相等那么表示是同一个对象,那么当然相等
3、如果 otherObject 为 null,直接返回false,表示不相等
4、比较 this 和 otherObject 是否是同一个类:如果 equals 的语义在每个子类中有所改变,就使用 getClass 检测;如果所有的子类都有统一的定义,那么使用 instanceof 检测
5、将 otherObject 转换成对应的类类型变量
6、最后对对象的属性进行比较。使用 == 比较基本类型,使用 equals 比较对象。如果都相等则返回true,否则返回false。注意如果是在子类中定义equals,则要包含 super.equals(other)
Java try 关键字(keyword)
Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。Java语言共定义了如下所示的关键字。
例如:
如果发生错误,请使用try catch
捕获错误并执行一些代码来处理它:
public class Main {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[8]);
} catch (Exception e) {
System.out.println("输出异常信息等其它操作");
}
}
}
定义和用法
try
关键字创建一条try catch
语句。
try
语句允许定义要执行的错误代码块。
如果在try块中发生错误,则catch
语句定义要执行的代码块。
Java try catch finally异常处理(Exception)
Java中try块可以捕获测试代码块中的错误。catch块可以处理错误。finally块无论是否try和catch块出现异常都可以执行代码。
Java try catch
try
语句允许定义要执行的错误代码块。
如果在try块中发生错误,则catch
语句允许定义要执行的代码块。
try
和catch
关键字成对出现:
语法
try {
// 要尝试的代码块
}
catch(Exception e) {
// 处理错误的代码块
}
考虑以下示例:
这将产生一个错误,因为myNumbers [10]不存在。输出将是这样的:
public class Main {
public static void main(String[ ] args) {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[8]); // 不存在会报错!
}
}
如果发生错误,我们可以使用try catch
来捕获错误并执行一些代码来处理该错误:
例如:
public class Main {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[8]);
} catch (Exception e) {
System.out.println("输出异常信息等其它操作");
}
}
}