JAVA——try_catch异常语句

目录

异常的处理方式:

1.JVM默认的处理方式

2.自己处理(捕获异常)--程序员自己处理---------不让程序停止运行

注意:

Throwable的成员方法:

3.抛出异常(交给调用者处理)-----告诉调用者出错了

(4).自定义异常:

 try...catch升级版


异常:异常就是代表程序出现的问题

Error:系统级别错误

 Exception:异常,代表程序可能出现的问题

RuntimeException及其子类:编译阶段不会出现异常提醒,运行时出现的异常(如数组索引越界异常)

编译时异常:编译阶段就会出现异常提醒的(如日期解析异常)

异常的作用:查询bug的关键参考信息

作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常的处理方式:

1.JVM默认的处理方式

把异常的名称,异常原因及异常出现的位置等信息输出在控制台(红色字体)

程序停止运行,下面的代码不会再执行

2.自己处理(捕获异常)--程序员自己处理---------不让程序停止运行

                  try{

                             可能出现异常的代码;

                  } catch(异常类名 变量名){

                            异常的处理代码;

                  }

目的:当代码出现异常时,可以让程序继续往下执行

注意:

(1).若try中出现了多个问题,需要书写多个catch与之对应,不然只会执行被捕获的catch

例如:

                  try{

                  }catch(){

                  }catch(){

                  }catch(){

                  }

(2)如果try中遇到的问题没有被捕获,相当于try...catch的代码白写了,最终还是会交给虚拟机进行处理

(3)如果try中遇到了问题,那么下面的代码就不会执行了,会直接调转到catch当中执行解决方法代码如果没有与之对应的代码,还是会交给虚拟机处理

(4)如果try中没有遇到问题,会把try中所有的代码执行一遍,不会执行catch中的代码

Throwable的成员方法:

细节:仅仅是打印异常信息,不会停止程序运行

       (1) publci String getMessage()            返回此throwable的详细消息字符串

       (2) public String toString()                   返回此可抛出的简短描述

       (3) public void printStackTrace()         把异常的错误信息输出在控制台---- 底层是用          System.err.println()进行输出以红色字体打印

3.抛出异常(交给调用者处理)-----告诉调用者出错了

         (1)throws 写在方法定义处,表示声明一个异常,告诉调用者使用本方法可能会有哪些异常-----编译时异常必须要写,运行时异常可以不写

                public void 方法()throws 异常类名1,异常类名2.……{

                        .......

                 }

      (2)throw 写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不再执行了

               public void 方法()[

                            throw new NullPointerException(); //结束

                           //下面的代码不会执行

                }

(4).自定义异常:

1.定义异常类

2.写继承关系

3.空参构造

4.带参构造

意义:就是为了让控制台的报错信息更加的见名知意

定义:

          public class NameFormatException extends RuntimeException{}

          public class NameFormatException extends Exception{}

          //NameFormat:当前异常的名字(姓名格式错误)

          //Exception:表示当前类是一个异常类

          //运行时异常:继承RuntimeException类 ----核心:表示由于参数错误而导致的问题

          //编译时异常:继承Exception类 ------核心:提醒程序员检查本地信息

public class NameFormatException extends RuntimeException{   //自定义异常类
 
	/*
	 * 姓名格式错误是后期程序运行时用户输入参数错误导致的,属于运行异常  所以继承RuntimeException类
	 * */
	
	
	
	//构造方法
	public NameFormatException() {
		
	}
	public NameFormatException(String message) {
		super(message);
	}
	
}
 try...catch升级版

            try{

                    可能出异常的代码

            }catch(){

                     异常代码的解决方案代码

            }finally{

                     上述代码执行完毕后此处代码不管如何都一定会被执行,除非虚拟机停止

            }

接口AutoCloseable 特定情况下可以自动释放资源

JDK7方案:

                try(创建流对象1;创建流对象2){

                               可能出现异常的代码

                }catch(异常类名 变量名){

                                处理代码

                }

               资源用完最终自动释放

JDK9方案:

                     创建流对象1;

                     创建流对象2;

                     try(流1;流2){

                                可能出现异常的代码

                     }catch(异常类名 变量名){

                                 处理代码

                    }

                  资源用完最终自动释放

	//throw new RuntimeException(); //返回异常信息打印在控制台
		//System.out.println(2/0);   //算数异常  0不能做被除数
		int[] arr = {1,2,3,4,5};
		//自己处理----捕获异常
		try {
			System.out.println(arr[10]);
			/*
			 * 此处出现了异常,程序就会在这里创建一个ArrayIndexOutOfBoundsException对象
			 * new ArrayIndexOutOfBoundsException();
			 * 拿着这个对象到catch的小括号里对比,看括号中的变量是否可以接受这个对象
			 * 如果能被接收,就表示该异常被捕获(抓住) 执行catch里面对应的代码
			 * 当catch里面的代码执行完毕,继续执行try...catch体系下面的其他代码
			 * */
		} catch(ArrayIndexOutOfBoundsException e) {     //ArrayIndexOutOfBoundsException 数组索引越界异常
			System.out.println("索引越界了"); 
			String message = e.getMessage();  // 返回此throwable的详细消息字符串
			String tostring = e.toString();//返回此可抛出的简短描述
			System.out.println("打印异常消息字符串"+message);   //打印异常消息字符串
			System.out.println("打印可抛出的简短描述"+message);   //打印可抛出的简短描述
			e.printStackTrace();//异常的错误信息输出在控制台
			
		}
		System.out.println("测试");
		
		//控制台红色字体打印err   错误的输出语句,用来打印错误信息
		System.out.println("123");
		System.err.println("1234567");
		
		
		
		System.out.println("------------抛出异常测试----------");
		int[] arr1 = null;
		int max=0;
		try {
			max = getMax(arr1);
		}catch(NullPointerException e){
			System.out.println("空指针异常");
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("数组索引越界异常");
		}
				
		System.out.println(max);
		
		

public class GirlFriend {

		private String name;
		private int age;
		
		//构造
		public GirlFriend() {
			
		}
		public GirlFriend(String name,int age) {
			this.name = name;
			this.age = age;
		}
		
		//set && get
		public void setName(String name) throws RuntimeException{   //运行时异常的 throws RuntimeException在方法定义时可写可省略 //编译时异常必须写 throws ERxception
			if(name.length() <3|| name.length() > 10) {
				//throw new RuntimeException();  //自定义异常之后就可以抛出自己定义的错误了,不用在抛出系统定义的
				throw new NameFormatException(name+"格式有误,标准长度为3-10");  //自定义名字格式错误异常
			}
			this.name = name;
		}
		public String getName() {
			return name;
		}
		
		public void setAge(int age)  throws RuntimeException{
			if(age < 18 || age > 40) {
				//throw new RuntimeException();
				throw new AgeOutOfBoundsException(age+"超出范围,标准范围为18-40");  //自定义年龄格式错误异常
			}
			this.age = age;
		}
		public int getAge() {
			return age;
		}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值