异常 try...catch ...finally throws和throw的区别

程序的异常:Throwable
  error:这种问题是一个严重问题,一般出现这种问题,需要一起解决(程序员只能避免严重问题),比如:内存溢出(OutOfMemory);
  Exception:异常:
编译时期异常:如果程序员不管这个,根本没有办法运行;需要去解决
  运行时期异常(RuntimeException):只要不是编译时期异常,都属于异常异常;一般情况,是因为们的代码不够严谨.
1.
 如果一个程序出现异常了,他会将异常的信息打印在控制台.
  
  运行时期异常如何解决:
 
   1)           try...catch..finally   :捕获异常
   2)        thorws:抛出异常
  
   try{
    可能出现问题的代码;
   }catch(异常类名 变量名){
    输出语句;
   }fianll{
    释放资源;
   }
   
   可能出现问题的代码如果和catch里面的异常类名能匹配,则打印输出语句
   
   变形方式
    try{
      可能出现问题的代码;
    }chatch(异常类名 变量名){
  //提示
    }
   
   try...catch...
   try..catch...catch
   try...catch..catch..finally (开发中使用)

public class ExceptionDemo {
	public static void main(String[] args) {
		//定义变量
		int a = 10 ;
		int b = 0 ;
		
		try{
			System.out.println(a/b);
		}catch(ArithmeticException ae){//给具体的异常类 而不是Exception
			System.out.println("除数不能为0");
		}
		
	}
}


2.
处理异常:
  1)         try...catch....finally
  2)         throws:抛出异常
  
  面试题:
  throws和throw的区别?(100%会问到!)
  throws:用法:一般在方法声明上抛出(多用)
  抛出的是一个异常类名,可以抛出多个异常,中间用逗号隔开
  throws表示抛出异常,这段代码可能会抛出异常( 指的是抛出异常的可能性)
  一般情况:throws用的比较多
  throw:一般在方法中进行抛出
  抛出的是一个异常对象(匿名对象的方式)
  throw:表示抛出:肯定的抛出异常(具体异常),走到这块代码,一定会执行throw中的异常
 
public class ExceptionDemo {
	public static void main(String[] args) throws Exception {
//		method1();
		method2();
	}
	
	public static void method1() throws Exception{//可能会抛出异常
		//定义两个变量
		int a = 10 ;
		int b = 0 ;
		if(b==0){
			throw new ArithmeticException();//代码走到这块:表示一定会执行这个异常
		}else{
			System.out.println(a/b);
		}
	}
	public static void method2() throws Exception{
		int a = 10 ;
		int b = 0 ;
		if(b==0){
			throw new Exception();//直接指定的异常:大方向的异常
		}else{
			System.out.println(a/b);
		}
	}
}


2.
try...catch....finally
  
  执行的代码的顺序
  try{
  可能出现错误的代码
  }catch(异常类名 变量名){
  处理异常;
  }finally{
  释放资源;
  }
 
  final,finalize,finally三者之间的区别?(100%问到)
  final:最终的,终态的
  final修饰类:该类不能被继承
  final修饰成员变量:该变量是自定义常量
  final修饰成员方法:该方法不能被重写
 
      finalize  :和垃圾回收期有关系:运行垃圾回收器的方法:gc().调用gc(),实质是调用了通过重写了Object中的finalize方法
      finally :出现在IO流中或者数据中,用来释放资源的!
 
 注意:1)finally中的代码是一定会执行的,一般用在IO流中和数据库中;
          2)如果在执行finally中的代码之前,JVMjava虚拟机退出了,那么finally中的释放资源是不会执行的
 
public class FinallyDemo {
	public static void main(String[] args) {
		//定义字符串类型
		String s = "2018-6-20" ;
		
		//创建对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
		//定义了一个变量
		Date d = null ;
		
		try {
			d = sdf.parse(s) ;
		} catch (ParseException e) {
			e.printStackTrace();
			System.exit(0);//jvm退出!
			
		}finally{
			System.out.println("这里的代码是必须执行的,用来释放资源");
		}
		
		System.out.println("d:"+d);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值