java随手笔记六之异常
静态导入:
import static 包名.类名。静态成员名;
告诉编译器当前类中所使用的静态成员在哪个类
import static 包名.类名 .*;
注意:静态导入简化了代码书写,但是导致阅读性很差
异常:
程序运行时出现的错误
异常以对象形式出现的
受检异常:exception类 程序必须接受检查和处理的异常
非受检异常:RuntimeException 或者 Error 可以不接受检查和处理或致命性错误异常
throwable
--error
--exception
--runtimeexception
java.lang.Throwable类为所有异常的父类异常 子类异常也符合条件
getmessage()返回错误信息
printstacktrace()位置 错误原因 名 堆栈信息
处理异常的方式:
1.捕获;try{} 用来检测可能出现的代码
catch(异常对象 变量名){}处理异常的代码
finally 一定会执行的语句 ,释放资源的作用
注意:finally 碰到return 也会执行 碰到system。exit()不执行
受检异常必须由程序显示输出。
try/[catch]*/finally
2.抛出;
throw:用于方法内 制动抛出异常对象,执行该语句,方法返回
---抛出非受检测异常
--抛出受检测异常 必须处理 通常在方法上声明该异常,那么调用
throws:声明异常,用在方法上,可以声明多个异常
自定义异常:
1.创建一个类继承exception或者runtimeexception
2.调用构造器(通常调用String 类型参数的构造器)
throws 声明异常在方法上 throw在方法内 抛出异常
子类覆盖父类方法:
子类声明异常对象的方法要小于父类异常对象的范围
子类也可以不声明异常。
父类方法没有声明异常 子类覆盖方法不能声明异常
3.捕获再抛出
package com.orancle;
public class TestException {
public static void main(String[] args) {
try{
int s = divide(5,1);
System.out.println("s"+s);
s = divide(5,0);
System.out.println("s"+s);
}catch(llleagalNumberException message){
System.out.println("捕获异常:"+message);
}
System.out.println("--end");
}
public static int divide(int m,int n) throws llleagalNumberException{
int s;
try{
s = m/n;
}catch(ArithmeticException message){
throw new llleagalNumberException("除数不能为零");
}return(s);
}
}
public class TestException {
public static void main(String[] args) {
try{
int s = divide(5,1);
System.out.println("s"+s);
s = divide(5,0);
System.out.println("s"+s);
}catch(llleagalNumberException message){
System.out.println("捕获异常:"+message);
}
System.out.println("--end");
}
public static int divide(int m,int n) throws llleagalNumberException{
int s;
try{
s = m/n;
}catch(ArithmeticException message){
throw new llleagalNumberException("除数不能为零");
}return(s);
}
}
package com.orancle;
public class llleagalNumberException extends Exception{
public llleagalNumberException(String message){
super(message);
}
}
public class llleagalNumberException extends Exception{
public llleagalNumberException(String message){
super(message);
}
}
访问权限修饰符
1、私有权限(private)
private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。
2、默认权限(default)
类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。
3、受保护权限(protected)
protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
4、公共权限(public)
public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
%d 字符串类型占位符 System.out.printf("%d岁,%d只脚,%d只手。",age,hand,leg);
类访问控制修饰符:
public :所有
default:同包访问g