java异常及常用类

java异常——finally

在程序运行过程中,如果处理异常的部分包含finally的处理,那么无论代码是否发生异常,finally中的代码总会执行
finally包含哪些处理逻辑?
1、IO流的关闭操作一般设置在finally中
2、数据库的连接关闭操作设置在finally中

  • 在异常情况出现的时候,可以使用try…catch…finally的方式对异常进行处理,除此之外,可以将异常向外抛出,由外部进行处理
  • 在方法调用过程中,可以存在N多个方法之间的调用,此时,假如每个方法都包含了异常情况,那么就需要在每个方法中都进行try…catch,另外一种比较简单的方式,就是在方法的最外层调用处理一次即可
    使用throws的方法,对所有执行过程中的所有方法出现的异常进行统一集中处理
  • 如何判断是使用throws还是使用try…catch?
    最稳妥的方式是在每个方法中都进行异常处理
    偷懒的方式是判断在整个调用过程中,外层的调用方法是否有对异常的处理,如果有,直接使用throws,如果没有,那么就要使用try…catch…

自定义异常

在java的api中提供了非常丰富的异常类,但是在某些情况下不太满足我们的需求,此时我们需要自定义异常
步骤:

  1. 继承Exception类
  2. 自定义实现构造方法
  3. 需要使用的时候,使用throw自定义异常的名称

什么时候需要自定义异常?
一般情况下不需要
但是在公司要求明确,或者要求异常格式规范统一的时候是必须自己实现的

public class GenderException extends Exception {
    public GenderException(){

    }
    public GenderException(String msg){
        super(msg);
    }
}
public class Student{
	public static void show() throws GenderException{//throws 声明异常
		String gender = "1234";
		if(gender.equals("man")||gender.equals("woman")){
			//处理逻辑
		}else{
			throw new GenderException("性别出现错误!")//throw 抛出异常
		}
	}
}
public static void main(String[] args){
	try{
		show();
	}catch(GenderException e){
		e.printStrackTrace();
	}
}

异常的分类:

  • Throwable是Exception和Error类的父类
  • Error 仅靠程序本身无法恢复的严重错误
  • Exception 由java应用程序抛出和处理的非严重错误
  • RuntimeException 运行时异常,不要求程序必须作出处理
  • Checked异常 程序必须完成该处理(捕获或声明抛出)

finally总结
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,会出现下面三种情况:

–情况一、如果finally中有return语句,会将try中的return语句覆盖掉,直接执行finally中的return语句,得到返回值,这样遍无法得到try之前保留的返回值
–情况二、如果finally中没有return语句,也没有改变要返回的值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值
–情况三、如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况:
1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally执行之前保留的值
2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值

finally块中语句不执行的情况:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。

包装类和基本数据类型

包装类是将基本数据类型封装成一个类,包含属性和方法
使用:
在使用过程中,会涉及到自动装箱和自动拆箱
装箱:将基本数据类型转换成包装类
拆箱:将包装类转换成基本数据类型

  • 包装类
    包装类是将基本数据类型封装到一个类中,包含属性和方法,方便对象操作。包装类位于java.lang包中
  • 自动装箱
    基本类型就自动地封装到与它相同类型的包装中,如: Integer i = 100;
    本质上是,编译器编译时为我们添加了Integer i = Integer.valueOf(100);
  • 自动拆箱
    包装类对象自动转换成基本类型数据。如:int a = new Integer(100);
    本质上是 int a = new Integer(100).intValue();

注意:
常量池在1.7之后被放置在了堆空间中
字符串的使用:
1、创建
String str = “abc”;
String str2 = new String(“abc”);
两种方式都可以用,只不过第一种使用比较多。
2、字符串的本质
字符串的本质是字符数组或者教做字符序列
String类使用final修饰,不可以被继承
使用equals方法比较的是字符串数组的每一个位置的值
String是一个不可变对象

思考:
String str = “abc”;
String str2 = new String(“abc”);
System.out.println(str == str2);
System.out.println(str.equals(str2));
会打印出什么呢?
str == str2 会打印出false,而str.equals(str2)会打印出true
为什么会出现这种结果呢?
这是因为str的存储在了堆空间中,而str2存储在了对象空间中,==只是对比了两者的存储路径,所有他们之间是不相等的
而equals判断的是两者的值,而它们的值是相等的。
*我们要去看java的api,了解常用类的实现过程,这一切就会明了

String类的常用方法:

  • char charAt(int index) 返回字符串中第index个字符
  • boolean equals(String other) 如果字符串与other相等, 返回true
  • boolean equalsIgnoreCase(String other)
    如果字符串与other相等(忽略大小写),则返回true
  • int indexOf(String str)
  • lastIndexOf(String str, int idx)
  • int length() 返回字符串长度
  • String replace(char oldChar,char newChar)
    返回一个新的字符串,它是通过用newChar替换字符串中出现的所有oldChar而生成的

字符串常用截取方法:

方法说明
public String substring(int index)提取从位置索引开始的字符串部分
public String substring(int beginindex,int endindex)提取beginindex和endindex之间的字符串部分(左闭右开区间)
public String trim()返回一个前后不含任何空格的调用字符串的副本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值