java中异常的介绍和总结以及自定义使用

异常介绍

异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类。

异常理解

对于异常是java提供的一直特殊机制,目的是为了程序员更好的对程序进行优化,而在异常的实际开发时,对于新手来说又非常有难度,对于深层次的异常类之间的关系需要在开发中不断的了解

异常的处理方法在代码中都有介绍

package Absttact.com.java.Exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/*
 * 处理异常的第一种方式 throws Exceptiong 抛出异常
 * 处理异常的第二种方式 try{}catch(){}捕捉解决异常
 */
public class Exceptiontest05 {

	public static void main(String [] agrs) {
		m1();
	}
	public static void m1() {
		System.out.println("m1 bagin");
		try {
			m2();
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			System.out.println("Not Found this text");
		}
		System.out.println("m1 end");
		/*在m1()方法将FileNotFoundException错误处理
		 * try {
			m2();
	  	   } catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		  }
		 *其他方法在掉m1()方法时不在报错
		 */
	}

	public static void m2() throws FileNotFoundException {
		System.out.println("m2 bagin");
			m3();
	  //m3()方法将FileNotFoundException错误抛出
	  //m2()方法的调用者将FileNotFoundException错误处理和抛出系统才不会报错
		System.out.println("m2 end");
	}

	public static void m3() throws FileNotFoundException  {
		new FileInputStream("D:\\学习笔记\\java\\ws.txt");
		/*  throws FileNotFoundException
		 *创建文件输入对象 IO流后面回学 
		 *在其源代码中将FileNotFoundException错误抛出
		 */
	}
}

异常的自定义

package Absttact.com.java.Exception;
//自定义异常
//在实际开发中有很多sun公司没有提供的异常
public class Exceptiontest11 {

	public static void main(String [] agrs) {
		//异常的使用
		Myexceptiontest sc= new Myexceptiontest("用户名不可以是空");
		//打印异常信息
		sc.printStackTrace();
		
		MyException sd =new MyException("登录密码或密码格式错误");
		sd.printStackTrace();
		
	}
}

//异常自定义
//第一步创建一个类继承Exception或者RuntimeException
//第二步提供两个构造方法,一个有参一个无参
class Myexceptiontest extends Exception {
	//编译是异常
	Myexceptiontest (){
		
	}
  Myexceptiontest ( String  obj){
		super(obj);
	}
}

class MyException extends  RuntimeException {
	//运行是异常
	MyException(){
		
	}
	MyException(String s){
		super(s);
	}
}

异常的练习使用

package 数组与数据结构;
import java.util.Scanner;
//一维数组模拟栈结构
public class Mystack {

	// 创建一维数组
	// Object可以存放任何数据类型的数据
	private Object[] array;
	
	//栈顶,初始值为0
	private int index=0;
	
	public Object[] getArray() {
		return array;
	}
	public void setArray(Object[] array) {
		this.array = array;
	}
	
	//利用构造函数初始化对象
	public   Mystack( ) {
		//默认输入10
		System.out.println("输入数组初始化长度:");
    	Scanner sc= new Scanner(System.in);
    	int a= sc.nextInt();
    	this.array=new Object[a];
   	  System.out.println("输入数组初始化成功:");		
	}
	
   //压栈
	public  void push(Object obj) throws MystackOperationException {
    	if(this.index>=this.array.length)
    	{
    		 throw new MystackOperationException("栈满,压栈失败");
    	}
    	
    	this.array[index]=obj;
    	System.out.println("压栈成功!栈顶指向"+this.index);
    	this.index ++;
	}
 //出站
	public void   pop( Object obj) throws MystackOperationException
	{
		if(this.index<=0)
    	{
			 throw new MystackOperationException("栈空,出栈失败");
    	}
    	
		this.index --;
		System.out.println("出栈成功!栈顶指向"+this.index +"栈元素是"+this.array[index]);
    	this.array[index]=obj;
    	
    	
	}
	
	public static void main(String [] agrs) {
		Mystack a= new Mystack();
       try {
		a.push(new  Object());
		a.push(new  Object());
	    a.push(new  Object());
	    a.push(new  Object());
	    a.push(new  Object());
	} catch (MystackOperationException e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}
       
        try {
			a.pop(new Object());
			 a.pop(new Object());
		        a.pop(new Object());
		        a.pop(new Object());
		        a.pop(new Object());
		} catch (MystackOperationException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
       
       
	}
}
class MystackOperationException extends  Exception{
	MystackOperationException(){
		
	}
MystackOperationException( String s){
		super(s);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值