Object 类
概述
JAVA类库中的类,JAva.lang 包中的:JAVA.lang.Object(类)
是所有引用类型的超类;(我们自定义的所有的类都是它的子类)
public class Hero extends Object
所有类都默认继承Object类
equals方法
即进行比较,判断两个对象中的所有的属性值是否相同。由Object类进行定义
Student stu1 = new Student(“王为”,10);
Student stu2 = new Student(“王为”,10);
stu1==stu2 //false
这个时候需要equals用来比较
public boolean equals(Object obj){
Student stu1 = new Student(“王为”,10);
Student stu2 = new Student(“王为”,10);
System.out.println(stu1.equals(stu2) )//此时为false,默认实现比较地址是否相同并不能满足我们的要求
//相当于return this==obj
}
eclipse 快捷键 Shift+Alt+H 快速重写Object类成员方法equals方法 ;
此时equals比较的是stu1和stu2的值是否相同即为:true;
toString 方法
异常
概念
代码运行的非正常情况,JVM默认情况立即终止程序运行,JAVA中提供一种一场处理机制,的代码编写方式,监控一些可能出现异常的代码,出先异常的时候可以采取一下补救的措施,让程序健康运行下去!
例如:
public class A{
public static void main(String[] ages){
Scanner sc=new Scanner (System.in);
System.out.println("请输入一个数:");
try{
int n = sc.nextInt();
}catch(Input){
}
}
}
异常类型
|----Error(错误):程序狗带,不希望我们的程序捕获,我们的程序也无法处理!
|----Exception(异常):程序还有的救,程序停止运行。
处理异常的方式
1、JVM执行含有异常的代码
2、JVM识别出这个异常
3、JVM去类库中找到异常类,并创建这个异常的对象
4、JVM查看代码是否监控这个异常
5、没有监控就将异常打印到控制台
6、结束程序(这是我们不想要看到的)
try_catch异常处理
基本格式_可以嵌套
try{
try{//需要判断的异常}
catch(){}
catch(Exception e){}
catch(Exception e){
System.out.println("未知异常,请与系统管理员联系!");
}
说明:
对可能出现的异常代码进行捕获
可以多catch 无限个
编译时异常
除了运行时异常,其他的异常都是:无法通过判断语句判断出来的异常,例如:磁盘访问异常,网络访问异常。。。都归类为非运行时异常,这中异常在代码中必需处理,否则运行错误,这种异常也被称为编译期异常;
运行时异常
有些异常可以通过判断句避免,例如: 空指针异常,数组下标越界异常,算术运算符异常。。。
这种异常并不强制代码必须监控处理。
Throwable:表示告诉JVM如果方法中出现这异常,请将这个异常抛给调用者!
1、public String getMessage(){
//获取:异常信息
};
2、public String toString(){
//获取:异常类名+异常信息
}
3、public void printStackTrace(){
//向控制台打印异常信息
}
调试程序有用
throws
public void show()throws 异常名1,异常名2,。。。{
}
异常面试题
public static void main(String[] args) {
int n = getNum();
System.out.println(n);//40
}
private static int getNum() {
int num = 10;
try{
num = 20;
return num;//1.将num的值(20)复制副本存储起来;2.执行finally3.将之前复制的副本20返回。
}catch(Exception e){
num = 30;
return num;
}finally{
System.out.println("finally...");
num = 40;
}
}
最后输出n的值为:40;
自定义异常
1).根据自己的业务逻辑:不符合业务逻辑的,我们就可以制作一个异常类,表示这种异常情况。
例如:
classStudent{
privateint age;
publicvoid setAge(int age){
if(age < 15 || age >50){
//抛出异常
thrownew 自定义异常();
}
this.age= age;
}
}
自定义异常的实现
publicclass AgeException extends Exception{
publicAgeException(String msg){
super(msg);
}
}
//B).使用自定义异常:
publicclass Student {
privateint age;
publicvoid setAge(int age) throws AgeException{
if(age< 15 || age > 50){
thrownew AgeException("年龄必须是15--50岁之间!");
}
this.age= age;
}
publicint getAge(){
returnthis.age;
}
}
//C).调用“使用自定义异常”的方法:
publicstatic void main(String[] args) {
Studentstu = new Student();
try{
stu.setAge(12);
}catch (AgeException e) {
System.out.println("异常信息:" + e.getMessage());
e.printStackTrace();
}
System.out.println(stu.getAge());
}
子类重写父类方法时的异常声明
public Fu {
publicvoid show() throws IOException{
}
}
classZi extends Fu{
public void show() throws IOException{
}
}
A).父类方法没有抛出任何异常,子类可以:
1).不抛出任何异常;
2).可以抛出任何的“运行时异常”。
3).子类不能抛出任何的“非运行时异常”。
B).父类方法抛出了“运行时异常”,子类可以:
1).不抛出任何异常;
2).可以抛出任何的“运行时异常”。
3).子类不能抛出任何的“非运行时异常”.
C).父类方法抛出了“非运行时异常”,子类可以:
1).不抛出任何异常;
2).可以抛出任何的“运行时异常”。
3).最多只能抛出跟父类相同(或者父类异常的子类)的非运行时异常,不能抛出比父类更多
的非运行时异常。
总结一句话:无论父类是否抛出异常,子类:
1).可以不抛出任何异常;
2).可以抛出任何的运行时异常;
3).不能抛出比父类大,或者跟父类不同的“非运行时异常”。