博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种异常 及异常类和Object类 Math类
阅读量:6370 次
发布时间:2019-06-23

本文共 2760 字,大约阅读时间需要 9 分钟。

Day05 异常 Object

equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

 

2. 描述人这个类,并定义功能根据年龄判断是否是同龄人

由于要根据指定类的属性进行比较,这时只要重写Object中的equals方法

在方法体中根据类的属性值进行比较(比较的内容)

 */

class Person extends Object{

int age ;

//复写父类的equals方法,实现自己的比较方式

public boolean equals(Object obj) {

//判断当前调用equals方法的对象和传递进来的对象是否是同一个

if(this == obj){

return true;

}

//判断传递进来的对象是否是Person类型

if(!(obj instanceof Person)){

return false;

}

//obj向下转型为Perosn引用,访问其属性

Person p = (Person)obj;

return this.age == p.age;

}

}

注意在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

 

 

java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

l 1,创建一个异常对象。封装一些提示信息(信息可以自己编写)。

l 2,需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw 异常对象;

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

 

 

 

抛出异常throw

声明异常throws

声明:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

声明异常格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2… {   }

声明异常的代码演示:

 

 

3捕获异常trycatchfinally

捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

finally有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

 

 

l 运行时异常被抛出可以不处理。即不捕获也不声明抛出  因为发生运行时异常程序停止, 程序员需要修改代码

 

如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集

 

l 父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出

 

当多异常处理时,捕获处理,后面的异常大是父类

 

try/catch后可以追加finally代码块其中的代码一定会被执行通常用于资源释放

 

4.自定义异常

 

如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。    

 

总结一下,构造函数到底抛出这个NoAgeException是继承Exception呢?还是继承RuntimeException呢?

继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行

继承RuntimeExcpetion,不需要throws声明的,这时调用是不需要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码。

 

编译期异常 和运行时异常的区别

 

继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行。

继承RuntimeExcpetion,不需要throws声明的,这时调用是不需要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码

.异常_面试题之如果在finally之前有return

main(){

System.out.println(show());//20

}

public static int show(){

int n = 10;

try{

n = 20;

return n;//流程:1.先将n的值20缓存;2.执行finally3.回来将之前缓存的值20返回

}catch(Exception e){

n = 30;

return n;

}finally{

n = 40;

}

}

什么时候执行的finally?执行return语句之中

 

5.列举出常见的四个运行期异常

ArithmeticException(算术运算异常)

NullPointerException(空指针异常)

ArrayIndexOutOfBoundsException(数组下标越界)

StringIndexOutOfBoundsException(字符串下标越界)

String st = "abc";

char c = st.charAt(3);//字符串下标越界

 

 

 

l round方法,返回参数值四舍五入的结果

 

double d1 = Math.round(5.5); //d1的值为6.0

 

double d2 = Math.round(5.4); //d2的值为5.0

 

 

l random方法,产生一个大于等于0.0且小于1.0的double小数

 

double d1 = Math.random();

l ceil方法,结果为比参数值大的最小整数的double值

double d1 = Math.ceil(3.3); //d1的值为 4.0

double d2 = Math.ceil(-3.3); //d2的值为 -3.0

double d3 = Math.ceil(5.1); // d3的值为 6.0

 

 

转载于:https://www.cnblogs.com/shan1393/p/8944907.html

你可能感兴趣的文章
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>
Java的初始化顺序
查看>>
js 判断回文字符串
查看>>
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>