java object... 出错_java基础之Object类和异常

Object类和异常

1. Object类是所有类的父类(超类, 基类,上帝类);

里面有两个常用的方法:

1> public String toString();// 默认输出对象的地址值的字符串表示形式

2> public boolean equals(Object obj);// 默认比较的是两个对象的地址值.

Object中第一个比较常见的方法

public String toString();// 默认输出对象的地址值的字符串表示形式

注意点:

一个对象在使用println进行输出的时候默认就是调用了Object中的toString方法,从而显示的是地址值

只不过JDK中很多的类都已经重写(覆盖)了Object中的toString所以显示的不是地址值.

这样的类目前: String, StringBuilder, ArrayList

如果自定义的类需要输出对象里面的内容, 那么也需要重写Object中的toString方法;

Object中第二个比较常见的方法

public boolean equals(Object obj);// 默认比较的是两个对象的地址值.(eclipse中自动生成equals方法, alt + shift + s 在按h)

注意点:

对于基本数据类型来讲, == 比较的是数值

对于引用数据类型来讲, == 比较的是地址值

对于引用数据类型来讲,直接比较两个对象的地址值,没有任何意义,所以JDK中的很多类已经覆盖了Object中的

equals方法,比如String类

我们自定义的类如果要想比较对象的内容是否相等, 也需要重写Object中的equals方法.

2. 异常:

在java中所有的错误或者是异常都可以使用一个类来表示: java.lang.Throwable;

里面有很常用的三个类来表示:

Error: 表示错误的信息,一旦出现程序立即停止

Exception: 表示异常(编译时的异常)的信息,一旦出现处理完程序正常运行.

RuntimeException: 表示运行时候的信息,是Exception的子类.

3.如何自定义一个异常呢?

JDK中提供的异常都是一些常用的类的信息, 不能把实际业务场景当中的异常全部都考虑进去,那么这个时候就需要自定异常

比如: 现实生活中,比如分数不能为负数, 比如: 处理年龄为负数的情况,需要自定义异常了.

如何自定义一个异常呢?

需要入伙.

编译时异常: 需要定义类继承自Exception

格式: public class 类名 extends Exception{...}

运行时异常: 需要定义类继承自RuntimeException

格式: public class 类名 extends RuntimeException{...}

4. 异常的解析流程:

1> 一旦程序出现异常,JVM自动创建异常类的对象(如果是自定义的异常需要手动创建)

2> 一旦检测到异常产生,JVM就会马上抛出异常,(如果是自定义的异常需要手动抛出)

3> 接下来需要处理抛出来的异常,有两种方式:

方式一: 使用关键字throws 抛

格式: public static void method() throws 异常类名{...}

方式二: 使用try_catch的方式处理(真处理)

格式:

try{

// 用来编写可能出现问题的代码

}catch(异常类名 对象名){

// 处理异常的一种方式,预案

}finally{

// 一般不管怎么样都会执行的,用来使用释放资源

}

注意点:

1> 在使用throws声明抛出异常的时候,如果异常之间存在继承关系,只需要写父类异常即可.

2> 如果有多个异常,不存在继承关系,可以使用逗号隔开.

如果自定创建一个异常类对象,该如何抛出,需要使用到关键字throw

throw: 主动将产生的对象进行抛出

格式: throw 异常对象;

--福利:面试题:

public class Demo {

public static void main(String[] args) {

int number = getElemet();

System.out.println("number = " + number);// 30

System.out.println("程序结束了");

}

public static int getElemet(){

int num = 10;

try{

// 一旦产生异常,try中后面的代码不运行了.

int a = 1/0;

System.out.println("try : num = " + num);

return num;

}catch(ArithmeticException e){

num = 20;

return num;// 做两件事情,1. 将num的值保存一份到缓冲区, 2. 然后再去执行finally中的代码

}finally{

num = 30;

System.out.println("finally中的代码执行了 num " + num);

return num;// 1.将num的值保存一份到缓冲区,现在的值变成了30;

}

}

}

return做两件事情:

1> 返回一个值给调用方

2> 结束当前方法, 如果碰到异常中有finally先执行finally中的代码. 然后再结束方法.

5. 在使用try_catch处理异常的时候,根据实际情况还有几种格式:

1> try_catch结构中,如果出现类多个异常,想要一种处理方式,异常之间不存在继承关系,可以在catch中并列写出多个异常

格式: try{}catch(异常类名 A | 异常类名B 变量名){}finally{...}

2> try_catch结构中,如果出现多个异常存在继承关系,大的异常需要写在后面,并且希望单独去处理每一个异常,使用多个catch

格式: try{}catch(异常类名A 变量名A){...}catch(异常类名B 变量名B){...}....

3> try_catch结构中,可以省略catch,确认没有什么异常要抓取,可以省略掉catch,配合finally

格式: try{}finally{}

4> try_catch结构中,可以没有finally.一般对于没有什么资源想要释放的.

格式: try{}catch(异常类名 变量名){}

5> try_catch结构中,任何结构中不能省略try, 并且不能只有try

6. 在继承结构体系中,如果子类重写了父类的方法,异常该如何处理

1> 如果父类方法没有异常, 那么子类中出现了异常不能抛(throws), 只能try.(父亲不坏, 儿子不能坏)

2> 父类中如果方法有异常, 子类中的异常和父类中异常如果有继承关系,那么不能大于父类异常.(父亲坏, 而不能更坏)

(实际使用场景,父类什么异常子类什么异常就好了.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值