JAVA学习第十九课(java程序的异常处理 (二))

异常处理的捕捉形式:

这是可以对异常进行针对性处理的方式

六、try、catch的理解

具体格式:

try
{
//需要被检测异常的代码
}
catch(异常类 变量)//改变量用于接受发生异常的对象
{
//处理异常的代码
}
finally
{
//一定会被执行的代码
}

这三个代码块是一个整体。

try是尝试,catch捕捉,finally最终化

 

什么时候用try&catch,什么时候用抛?

在定义功能时,如果这个问题你可以处理的了,那么就用try&&catch,处理不了那么就用抛

代码演示:

import java.util.*;
class FuException extends Exception
{
	FuException()
	{
	}
	FuException(String s)
	{
		super(s);//Exception有
		//System.out.println(s);
	}
}
class ExceptionDemo
{//要么捕捉,要么抛出
	public int method(int[] arr,int index) throws FuException
	{
			if(index<0)
			{
			throw new FuException("The index is fushu");
		    }
		return arr[index];
	}
}
public class Main
{
	public static void main(String[] args)//throws FuException
	{
		int[] a = new int[10];
		ExceptionDemo C = new ExceptionDemo();
		try
		{
			int num = C.method(a,-2);
			System.out.print("num"+num);
		}
		catch (FuException e)
		{
			System.out.println("角标为负数啦!");
		//e对象可用可不用,下面是一些常用的方法
			System.out.println("Message:"+e.getMessage());
		System.out.println("string:"+e.toString());//toString可省略
		//打印异常信息
		e.printStackTrace();//jvm默认的异常处理机制就是调用异常对象的这个方法

		}
	}
}

/*真正建立日志文件

*log four(java; ; )

*{

*

*}

*/其简写形式:log4j

七、多catch情况

如果在程序处理时,抛出了多个异常

import java.util.*;
class FuException extends Exception
{
	FuException()
	{
	}
	FuException(String s)
	{
		super(s);//Exception有
		//System.out.println(s);
	}
}
class ExceptionDemo
{
	public int method(int[] arr,int index) throws FuException,NullPointerException
	{
			if(index<0)
			{
			throw new FuException("The index is fushu");
		    }
			if (arr==null)
			{
				throw new NullPointerException("没有数组实体");//可自定义
			}
		return arr[index];
	}
}
public class Main
{
	public static void main(String[] args)//throws FuException
	{
		int[] a = new int[10];
		ExceptionDemo C = new ExceptionDemo();
		try
		{
			int num = C.method(a,2);
			System.out.print("num"+num);
		}
		catch (FuException e)
		{
			System.out.println("角标为负数啦!");
		}
		catch (NullPointerException e)
		{
			//e.printStackTrace();
			System.out.println("Message:"+e.getMessage());
		}
		//多catch情况,如果有以下catch情况,不能房最上面,会接受所有对象
		catch (Exception e)
		{
			//父类的catch房最下面,否则编译失败
			//如果实在出现已有catch以外的情况,虚拟机会处理
		}
	}
}

八、异常的处理原则

try到底什么时候用?

最根本的核心:只要使用了声明异常的方法,就要try,只要代码中有抛出异常的动作,如果能处理就用try,见到了异常就处理,没有异常就不需要处理。注意:没有错误,非要写try,不仅没意义,还存在弊端,如果真的要处理异常,但是不知道是什么异常,那么只能写Exception,一旦未知异常真的发生了,但是却有个预先处理的方式
,处理什么不知道,这个异常被处理掉了,一旦处理掉了,就相当于异常被隐藏,但是程序还在正常执行。所以,只要没说有问题,就不处理,只要问题发生了,看到了,再考虑问题是否要处理

异常处理的原则:

1.函数内部如果抛出需要检测的异常,函数上必须要声明,否则必须在函数内部用try&&catch捕捉,否则编译失败

2.如果调用到了声明异常的函数,要么try&&catch,要么throws,否则编译失败

3.什么时候catch,什么时候throws?

功能内部可以解决,用catch

解决不了,用throws,由调用者解决

4.一个功能如果抛出了多个异常,那么调用时必须对应多个catch,进行针对性的处理

(内部有几个需要检测的异常,就要抛几个异常,抛几个,就catch几个)

九、finally代码块

/*finally的应用:

* 用到finally最多的地方,比如数据库

* 例如:打开百度,搜索

* 连接数据库

* 查询:假如Exception了,查询过程中出问题

* 关闭连接

*如果出现异常,不关闭连接,还在浪费数据库资源,所以无论是否出现异常,关闭连接一定要执行

*进而释放资源,故关闭连接定义在finally里

*/

所以:凡是有资源需要关闭,一定要定义在finally里。

try,catch,finally代码块组合的方式:

1、try,catch,finally(三个都有常见)

2、try、catch,没有必要资源需要释放时,就没必要定义finally

3、try、finally  异常无法直接catch处理,但是资源一定要关闭

void show()//throws Exception,不用声明,因为catch已经处理了
{
	try
	{	throw new Exception();  }
	//有catch
	catch
	{	.....  }
}
 void show()throws Exception//没catch,就要声明
{
	try
	{	throw new Exception();  }
	//没catch
	finally  //连接资源,出现异常,但是这个异常不一定就要处理,但是资源一定要关闭,因为在内部开辟的,别人不知道
	{  ....   }
}

时间: 2024-08-06 11:19:40

JAVA学习第十九课(java程序的异常处理 (二))的相关文章

JAVA学习第二十九课(经常使用对象API)- String类

多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 public class Main { public static void main(String[] args) { Demo1(); System.out.println("--------------"); Demo2(); } /*演示字符串的第一种定义方式,并明白字符串常量池的特点*/

JAVA学习第十八课(异常及其思想 (一) )

异常:重要知识点 异常处理的代码简单,重要还是理解其思想 一.概述: 异常就是在运行时发生的不正常情况 Throwable: Error 通常出现重大问题如,运行的类不存在或者内存溢出等 不编写针对代码对其处理 Exception 在运行时运行出现的一起情况,可以通过trt catch finally Exception和Error的子类名都是以父类名作为后缀 异常举例:数组越界.传递参数错误啊... class Futime { } class Bigtime { } public class

JAVA学习第十五课(多态及其基本应用)

多态: 面向对象的第三个特征,定义:某类事物存在多种形态,比如,函数就具备多态性,同名的一个函数,它的参数列表不一样,它的存在性就不一样,还有同一个函数,放在父类和放在子类,它的存在性也就不一样. 对象也存在多态性. 例子:动物有猪.猫.狗等 猫这个对象对应的类是猫类 猫 x = new 猫(): 同时,猫还是动物的一种,也就可以把猫成为动物 动物 y = new 猫(); 动物 z = new 狗(); 动物是狗和猫集体事物中抽取出来的父类 父类引用指向了子类对象 一.概述 //对象的多态性

JAVA学习第二十四课(多线程(三))- 线程的同步

继续以卖票为例 一.线程安全问题的解决 同步的第一种表现形式:同步代码块 思路: 将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程是不允许参与运算的,必须要当期线程把代码执行完毕后,其他线程才可以参与运算 在java中用同步代码块解决这个问题 同步代码块格式: synchronized(对象) { 需要被同步的代码部分 } class Ticket implements Runnable { private int num = 100; Object god = ne

JAVA学习第十四课(接口:implements)

接口: 我们知道抽象类中可以定义抽象方法,也可以定义非抽象方法,当一个抽象类中的方法都是抽象方法的时候,我们就可以定义另一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出现将"多继承"通过另一种形式表示出来,即"多实现". 注意:接口的定义不是class,而是interface,当然最后编译时还是class文件 interface Demo { abstract void show(); abstract void show1(); }

JAVA学习第二十六课(多线程(六))- 多生产者多消费者问题

多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolean flag = false; public synchronized void set(String name) { if (flag) { try { this.wait(); } catch (Exception e) { // TODO: handle exception } } this.

JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题

一.多线程下的单例设计模式 利用双重判断的形式解决懒汉式的安全问题和效率问题 //饿汉式 /*class Single { private static final Single t = new Single(); private Single(){} public static Single getInstance() { return t; } } */ //懒汉式 class Single { private static Single t = null; private Single()

JAVA学习第二十六课(多线程(五))- 多线程间的通信问题

一.线程间的通信 实例代码: 需求是:输入一个姓名和性别后,就输出一个姓名和性别 class Resource { String name; String sex ; } class Input implements Runnable { Resource r; Input(Resource r) { this.r = r; } public void run() { int x = 0; while(true) { synchronized (r) { if(x==0) { r.name =

JAVA学习第十六课(内部类及其特点)

内部类: 内部类就是一个类定义在一个类里,定义在类中的类就叫做内部类 一.访问特点: 内部类可以直接访问外部类的成员,包括私有成员 外部类要访问内部类的成员,必须创建内部类的对象 简单体现: import out.in; class out { private int num = 3; class in { public void showou() { System.out.println(num); } } public void showin() { in BLF = new in(); B