异常及重写equals、toString方法
来源:互联网 发布:matlab 随机字符串数组 编辑:程序博客网 时间:2024/05/22 05:33
equals方法
在object中的equals方法默认的是直接比较两个变量的值,基本类型就是比较表面值,引用类型则比较的是地址值,不能判断两个引用的内容是否一样,这时候就需要我们进行重写
/* * 重写object的equals方法,不再比较对象的地址值,而是比较其属性值: * 1,判断地址是否相等//是不是指向同一个引用 * 2,判断类型是否一致,否则即使属性值相同也不可能相等 * 3,判断属性值是否相等 * 注意:调用属性方法判断的时候要注意空指针异常, * 列如String类型的变量没有赋值默认为null的时候, * 不能调用String的方法。 * * 系统有快速生成重写equals的方法。 */public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public Person(int age) { super(); this.age = age; } public void setAge(int age) { this.age = age; } public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public boolean equals(Object o) {// 传入参数为Object可以适用于任何类型。 if (this == o) {// "=="直接判断两个变量的值是否相等, // this为当前变量引用当前对象的地址值,o为引用变量存储对象的地址值。 return true;// 两个变量的地址值相同,指向同一个对象 } else {// 两个对象,看类型是否相同。 if (o instanceof Person) {// 类型相同,转换类型继续判断。 Person p = (Person) o; if(this.name==null&&p.name==null){ if(this.age==p.age){ return true; } } if(this.name!=null&&p.name!=null){ if(this.age==p.age&&name.equals(p.name)){ return true; } } } //判断的过于复杂/* Person p = (Person) o; if (this.age == p.age) {// 属性年龄相同,继续判断 if ((this.name == null && p.name != null) || (this.name != null && p.name == null)) { // 两个对象中有一个姓名属性没有赋值,返回false } else { if (name.equals(p.name)) { return true; } else { return false; } } } else {// 年龄不同,false return false; } } else {// 类型不同,false return false; }*/ } return false;//整体判断思路,默认返回false,则只需要进行true的判断。 }}
/*
* 进行重写eqauls方法的测试
*情况:
*1,指向同一个对象true
*2,两个对象,不是同一类型false
*3,两个对象,其中一个无名false
*6,两个对象都无名,同龄true
*6,两个对象都无名,不同龄false
*4,两个对象,年龄不同false
* 5,两个对象,年龄相同,姓名相同true
*/
public class TestPerson {
public static void main(String[] args) {
Person p = new Person(“张三”, 24);
Person p1 = new Person(24);
Person p2 = new Person(“张三”, 25);
Person p3 = new Person(“张三”, 24);
Person p4 = new Person(24);
Person p6 = new Person(25);
Person p5;
Student s = new Student(“张三”, 24);
p5 = p;
System.out.println(p.equals(p1));
System.out.println(p.equals(p2));
System.out.println(p.equals(p3));
System.out.println(p.equals(p5));
System.out.println(p1.equals(p4));
System.out.println(p1.equals(p6));
System.out.println(p.equals(s));
}
}
class Student {
String name;
int age;
public Student(String name, int age) { super(); this.name = name; this.age = age;}
}
## toString方法 ##和equals方法类似
/*
* Object默认的toString方法,在调用print方法时默认调用toString方法
* 将返回的字符串输出,此字符串的组成,包名+类名+@+地址
* 现在将对象的属性生成一个字符串输出
* 注意仍然需要注意空指针。
*
*
* 也可以有系统快速生成。
*
*/
public class Pet {
private String name;
private int age;
public Pet() { super();}public Pet(String name, int age) { super(); this.name = name; this.age = age;}public String toString() { return "[" + this.name + "," + this.age + "]" + super.toString();}
}
package yhy.study.day05_toString;
public class TesttoString {
public static void main(String[] args) {
Pet p=new Pet(“小花”,5);
System.out.println(p.toString());
}
}
“`
异常的初步认识
java程序在编译和运行的时候可能会出现许多问题,java将这些问题以面向对象的方式封装起来就是异常。
异常的继承体系
异常的父类Throwable:含义可抛出的异常类。
子类Error:比较严重的错误,一般不可由软件层面解决。
子类Exception:编译及运行时期的异常,一般所说的异常都是其子类。其中RuntimeException是一个比较特殊的子类。
异常的产生过程分析
在java中,一旦程序执行到某处出现了一个异常的问题,那么就会产生并抛出(throw)一个异常的对象,返回给调用则者,如果调用者不进行try{}catch{}处理那么就继续向上抛出,以此类推,直至jvm,jvm会调用printStack方法打印信息并停止程序。
自定义异常
一般自己通过继承已有的异常类,可以定义新的异常,可以更准确的给出提示的等信息,此时,我们需要自定义一个判断并抛出的动作,自定义出异常产生的条件,
多异常处理
捕获处理:
1多个异常分别处理
2多个异常一次捕获多次处理
3多个异常一次捕获一次处理
声明抛出异常:
声明上使用,一次声明多个异常
运行时异常被抛出可以不处理。即不捕获也不声明抛出
如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集
父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
当多异常处理时,捕获处理,前边的类不能是后边类的父类
在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
一try,多catch,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
异常的转化
在实际的应用过程中,如果异常能被当前的调用者处理,建议使用trycatch处理,若有调用者,则要进行异常的转化,返回针对调用者的异常信息,如果自己并不能解决,那么要求给出出现异常的解决方案,并声明抛出,针对不同的对象,对同一个异常的处理也是不同的,
待续
- 异常及重写equals、toString方法
- 重写 toString() & equals() 方法
- 重写equals和 toString方法
- 重写toString以及equals方法
- equals、hashCode、toString 方法重写
- 44 java toString 方法 重写equals 方法
- 一起学Java_Eclipse开发工具介绍及equals、toString方法的重写equals
- java equals() 和toString()方法重写
- Java toString equals hashCode 方法的重写
- 重写toString()和equals()方法(algs4)
- Object类toString方法重写,equals方法重写
- 关于重写equals方法,hashcode方法,toString方法 ,compareto()方法
- java上机课代码。。。重写equals方法,toString方法。。。
- 22-JAVA面向对象-重写toString()与equals()方法
- 实体类自动重写toString(),equals()和hashCode()方法
- 白菜之重写toString()、equals()方法的注意事项
- 【Core Java Volume1】重写equals,hashCode,toString方法
- IDEA get/set/重写equals()、hashcode()\toString()等 方法快捷键
- 【清单】 ---算法竞赛入门经典第二版 【例题+习题】【持续更新中..】
- Google kotlin 支持资料
- Kotlin: Java 6 废土中的一线希望
- 单元测试概述
- 简单理解struts1和struts2
- 异常及重写equals、toString方法
- C#高效插入sql数据库数据
- Spark性能优化:开发调优篇
- css之outline
- POJ_1990_MooFest_树状数组
- 关于Oracle数据库(PL/SQL)的登录问题的解决-总结
- sql语句case when使用和date_formate()的使用,DATEDIFF(字段1,字段2)获取天数,常用的MYSQL的函数
- javaweb自动登录(cookie)
- 170522 逆向-控制语句的汇编和优化