Throwable是异常的基类
异常处理(try使用):
public class Demo {
public static void main(String[] args){
test();
}
public static void test(){
int[] arr = {1,2,3};
try{
System.out.print(arr[8]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println(e);
}
catch(Exception e){
e.printStackTrace(); //可以打印栈错误信息
System.out.println("错误");
}finally{
System.out.println("无论是否产生异常,都要执行");//即使系统报错,程序会异常退出,也会执行,即使try中有return,finally也会在return之前执行
}
}
}
throws和Throw使用:
public class Demo {
public static void main(String[] args){
test();
}
public static int test() throws ArrayIndexOutOfBoundsException{
Scanner s = new Scanner(System.in);
try{
int[] arr = {1,2};
int x = arr[4];
return 1;
}catch(ArrayIndexOutOfBoundsException e){
// e.printStackTrace();
throw new ArrayIndexOutOfBoundsException("出错了");//主动抛出错误
// return 1;
}
}
}
自定义错误:
同一个包下创建四个类
Demo.java
public class Demo {
public static void main(String[] args){
UserServer userserver = new UserServer();
try {//由于MyException继承的是受检异常,调用时就必须捕获。
User user = userserver.login("admin", "123");
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
MyException.java
/**
* @author zhengyan
*1、自定义异常通常是通过继承一个异常类来实现(Throwable、Exception、RuntimeException)
*2、通过实现构造方法
*
*/
public class MyException extends Exception{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
User.java
public class User {
private String name;
private int age;
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserSever [name=" + name + ", age=" + age + "]";
}
}
UserServer.java
public class UserServer {
public User login(String name,String pwd) throws Exception{
if(!"admin".equals(name)){
throw new MyException("用户名错误");
}
if(!"123".equals(pwd)){
throw new MyException("密码错误");
}
User user = new User("小明", 18);
return user;
}
}
受检异常(Exception)
调用时必须加上try..catch....
非受检异常(RuntimeException)
调用时不需要捕获错误,但是最好还try和catch。他属于运行时的错误
在自定义异常的时候,根据需求选择性的使用
补充(断言):
assert 1==1:"结果不正确"; 如果表达式为true,正常运行,表达式为false,打印结果不正确
使用需要给jvm加上参数。

