JAVA学习笔记26——异常机制2:常见异常+异常处理其余两种方法+自定义异常

本文深入讲解Java中的异常处理机制,包括常见异常类型如NullPointerException、NumberFormatException等的处理方式,以及如何使用throws声明异常和throw手动抛出异常。还介绍了方法重写时异常声明的规则和自定义异常的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。

本篇将异常剩余的基础内容介绍完毕。

上一篇笔记写的时候漏掉了一个内容:常见的几种异常的介绍,这里补上。常见异常分类:checked Exception、unchecked Exception两大类。


最常见的异常类是“空指针异常(NullPointerException)”。以下是几种常见异常的处理办法:



接下来介绍异常处理方法之二:声明异常(throws语句)和异常处理方法之三:手动抛出异常(throw子句)



下面的两个代码片是两种方法的实例代码:

import java.io.File;
import java.io.FileNotFoundException;
public class TestException {
	public static void main(String[] args) {
//		int i = 1/0;  编译能够通过,但是会抛出异常是程序无法运行,ArithmeticException,当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。 
		Computer c  = null;
		if(c!=null)    c.start();   //对象是null,并且调用了对象方法或属性,就会造成空指针异常。
		String str = "1234abcf"; 
		Integer i = new Integer(str);		 //NumberFormatException
		try{
		Thread.sleep(3000);
		}catch(Exception e){
			e.printStackTrace();    //打印错误堆栈轨迹
		}finally{
			System.out.println("aaa");
		}
		//异常处理办法之三的示例代码:
		File f = new File("c:/tt.txt");
		if (!f.exists())  {
			try {
				throw new FileNotFoundException("File can't be found!"); 
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		}
	}
}
class Computer{
	void start(){
		System.out.println("计算机启动!");
	}
}
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import jdk.nashorn.internal.ir.CatchNode;
//声明异常,把异常抛给调用他的方法,可一直往上抛,一直抛到最上层。
public class TestReadFile {
	public static void main(String[]  args) throws FileNotFoundException, IOException {
		String str;
		str = new TestReadFile().openFile();
		System.out.println(str);
	} 
	String openFile() throws FileNotFoundException,IOException { 
		FileReader reader = new FileReader("d:/a.txt");
		char c = (char)reader.read();
		System.out.println(c);
		return ""+c;
	}
}
这里存在一个方法重写是需要注意的一个地方:

示例代码:

<span style="font-size:14px;">import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
	class A {	
		public void method() throws IOException {	
			
		}
	}
	
	class B extends A {		
		public void method() throws FileNotFoundException {	
			
		}
	}
	
	class C extends A {		
		public void method() {	
			
		}
	}
	
//	class D extends A {		
	//public void method() throws Exception {	
		
	//}     //超过父类异常的范围,会报错!
//	}
	
	class E extends A {		
		public void method() throws IOException, FileNotFoundException {    
			
		}
	}
	class F extends A {		
		public void method() throws IOException, ArithmeticException {      
			
		}
	}
//	class G extends A {		
	//public void method() throws IOException, ParseException {	
		//ParseException超出了父类异常的范围。
	//}
//	}
</span>
最后介绍的内容是自定义异常:

自定义异常主要是继承现有的异常类来编写一个自己定义的子类,加上两个构造器,下面是实例代码:

<span style="font-size:14px;">public class MyException extends Exception {
	public MyException(){
		
	}
	
	public MyException(String message){
		super(message);  //仿照JDK里面的源码写的
	}
	
}

class TestMyException{
	void test()throws MyException{
		///
	}
	public static void main(String[] args) {
		try {
			new TestMyException().test();     //new一个这个类的对象,然后调用会抛出异常的方法。最后用try—catch来处理
		} catch (MyException e) {
			e.printStackTrace();
		}
	}
}
</span>
下面是关于异常的总结:



(上述第3点的意思是要先处理子类的异常再去处理父类的异常,否则会发生覆盖,使得子类的异常始终得不到解决)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值