Java类库中定义了异常类,它们都是Throwable的子类。Throwable类派生出了两个子类,分别是Error和Exception类。
Exception又分为两类:运行时异常和编译时异常。
异常中的常用方法:
1.getMessage():返回Throwable对象的详细信息,如果没有则返回null。
2.toString():返回Throwable对象的类型和性质。
异常处理
介绍:当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个兑现多个方法可以捕获到这个异常并可以对其进行处理。而异常处理机制并不能真正的修复程序bug,只能说时防止程序崩溃,要修复程序的bug时我们在catch语句中对异常进行一些处理。
异常关键字
try catch throw throws finally
try--监听,可能抛出异常的代码放在try内,当try语句块内发生异常时就被抛出。
catch-捕获异常。catch用来捕获try语句中发生的异常。
throw-抛出异常
throws-方法之后,声明该方法可能出现的异常。
finally-异常处理过程中最后被执行的部分,无论程序是否发生异常,finally中的代码块都将被执行。(通常放置一些释放资源或关闭对象的代码)。
注
try代码块中发生了异常程序转而就会进行catch代码块,不会再向下继续运行try代码块。
发生以下三种情况时finally代码块不会运行
1.finally代码块中发生了异常。
2.在前面的代码中使用System。exit()语句退出了JAVA虚拟机。
3。程序所在的线程死亡。
使用throws关键字抛出异常
Java通过shrows子句声明方法可抛出异常,throws语法如下
数据类型 方法名(形参列表) throws 异常类1,异常类2,....{
方法体
}
表示相应方法不处理异常,而交给方法的调用者处理。
上图构造方法div()来用throws关键字抛出ArithmeticException异常,并在调用时处理。(这里主方法使用try-catch进行了异常处理,所以程序可以编译通过。
使用throw关键字抛出异常
与throws不同,throw用于方法体内,并且抛出的是一个异常类对象。throws用于方法签名上,可以抛出多种异常。如果throw关键字抛出异常后,还需要使用throws关键字向方法外抛出,或使用ttry-catch对异常进行处理。需要注意的是,如果throw抛出的是Error,RuntimeException或他们的子类异常对象,则无需使用throws,也无需使用try-catch。使用方法如下
throw new 异常对象();
自定义异常
步骤
1.创建自定义异常类并继承Exception基类(如果定义Runtime异常类,则继承RuntimeException)
2.在方法中通过throw关键字抛出异常对象。
3.如果在当前抛出异常的方法中处理异常,可以使用try-catch处理,否则在方法后要用throws关键字抛出异常,继续进行下一步操作
4.在调用可能会出现异常方法的语句处进行捕获并进行处理异常。
字符串的相关类
JAVA定义了String StringBuffer StringBuilder三个类来封装字符串2,并提供了一系列操作字符串的方法。 String类表示不可变的字符串,一旦被创建,只能被销毁。
1.使用直接赋值初始化
String str1="1000phone";
String str2="1000phone";
String str3="1000"+"phone";
以上赋值就是直接赋值,字符串常量赋值给String变量时,JVM先在常量池中寻找该字符串,如果找到,则立刻返回引用,如果未找到,则在常量池中创建该字符串对象并返回引用;使用这种方法,字符串会被放入常量池中。(为了节省内存空间,构建了常量池)
当比较三个的值时(用==时,因为String的equal类被默认重写),会返回true也就是相等,说明他们三个的地址相同。
2.使用构造方法赋值
String类可以直接调用构造方法。常用构造方法如下
String str1="1000phone";
String str2=new String("1000phone");
String str3=new String("1000phone");
这个时候用=比较三个成员变量时返回的是false,也就是不相等,说明他们三个的地址不相同。
这是因为用new关键字在堆空间新开辟了内存,这块内存存放字符串的引用。所以三个地址不同。
String类常见操作