异常的分类 和 File类

本文介绍了Java中异常处理的概念,包括运行时异常与编译时异常的区别,并通过实例展示了如何使用异常处理来增强程序的健壮性。此外,还详细讲解了File类的基本用法及如何使用该类进行文件和目录的操作。
异常的分类

1.运行时异常(打印太执行时才会报错)

2.编译时异常(对可能发生异常的代码报错 强制在编译时处理异常)

实例:  写一个类

  1.抛出运行时异常的方法

  2.抛出编译时异常的方法

  3.计算圆面积的方法

class Test {
            // 抛编译时异常
	    public void fun1() throws Exception {
	        throw new Exception("我是编译时异常");
	}
	// 抛运行时异常
	// 当你这个方法抛的是运行时异常时 方法上可以省略
	// throws RuntimeException
	public void fun2() {
		throw new RuntimeException();
	}
	// 计算圆面积
	public double getArea(int r) {
		if (r <= 0) {
			// 半径小于0  再向下计算没有意义
			// 希望程序停下来 让程序员去修改代码
			// 可以抛出一个异常 运行时异常
			throw new RuntimeException("你有病啊 半径小于0");	
		}
		return 3.14 * r * r;
	}	
}

Test测试结果

public class Test {
	public static void main(String[] args) {
		Test test = new Test();
		//test.fun2(); 运行时异常 运行时才报错
		//test.fun1(); 编译时异常 不处理就报错
		double area = test.getArea(5);  // 对你这个面积进行操作
		System.out.println(area);

	}
}
继承中的异常

注意: 子类继承父类,重写父类的方法

        调用带异常的方法时

        如果父类中的方法没有抛出异常,那么子类在重写父类这个方法的时候

        也不能抛出异常  只能用try---catch处理

例:

无限输入整数 存放到集合中 打印 输入quit停止

希望在输入字符串的时候 让程序也能继续运行

public static void main(String[] args) {
	System.out.println("请输入整数");
	Scanner scanner = new Scanner(System.in);
	ArrayList<Integer> list = new ArrayList<>();
	while (true) {
		String string = scanner.nextLine();
		if (string.equals("quit")) {
			break;
		}
		// 异常处理
		try {
			int num = Integer.parseInt(string);  // 报异常 下句不执行
			list.add(num);
		} catch (Exception e) {
			System.out.println("看清楚 请输入整数!");
		}
			
	}
	// 打印集合
	System.out.println(list);
}
File类

File类 : 封装了操作文件 或 文件夹的方法

1.表示一个文件

2.表示一个文件夹

3.表示一个文件路径

文件路径 分为  绝对路径 和 相对路径

绝对路径: 该文件在你当前硬盘上的路径 唯一的   (以"/"开头)

相对路径: 以文件所在工程为参照物的路径  (不以"/"开头)

文件类对象的三种构造方法

1.

File file1 = new File("/Users/myCp/Desktop/lna");  //直接传入文件的路径 创建file对象

2.

File file2 = new File("/Users/myCp/Desktop", "lna");  //传入父级路径,和文件名 创建file对象

3.

File parent = new File("/Users/myCp/Desktop");  //利用一个文件和一个路径 创建File对象

String child = "lna";

File file3 = new File(parent, child);

创建文件的方法

File file1 = new File("/Users/myCp/Desktop/lna/wl.txt");

file1.createNewFile();   // 返回的是布尔值

该方法不会重复创建文件 只创建一次,且只能创建文件(不写后缀也是创建的文件)

创建文件夹的方法

File file2 = new File("/Users/myCp/Desktop/lna/a/b");

file2.mkdir();

mkdir方法 不能创建多级文件夹

File file3 = new File("/Users/myCp/Desktop/lna/c");

file3.mkdirs();

mkdirs方法 可以创建多级文件夹或单级文件夹
Feile类中的方法

String name = file.getName();   // 获取文件名

boolean b1 = file1.isFile();   // 判断是否是文件

boolean b1 = file1.isFile();   // 判断是否是文件夹

boolean b3 = file1.isHidden();  // 判断是否是隐藏文件

删除方法

boolean b1 = file1.delete();

删除时慎重 (直接被删掉 不会进入回收站) 删除文件夹时,只能删除空文件夹

获取文件夹下的文件名(一级文件)

File file1 = new File("/Users/lanou/Desktop/lna");
	// 获取文件夹下的所有文件 以字符串数组形式
	// 获取的是文件名(一级文件名)
	String[] list = file1.list();
	for (String string : list) {
		System.out.println(string);
	}
	// 获取文件夹下的所有文件 以文件数组形式
	// 获取的是文件的绝对路径
	File[] listFiles = file1.listFiles();
	for (File file : listFiles) {
		System.out.println(file);
	}
获取文件夹下所有文件(遍历)
File[] listFiles = file.listFiles();
for (File f : listFiles) {
	// 判断 如果不是文件夹 直接打印
	if (f.isDirectory()) {
		// 是文件夹 继续遍历
		printFile(f);
	} else {
		// 是文件 
		System.out.println(f);
	}
			
}


---------------------------------------------------------------------



### Java 异常分类及区别 #### 一、异常的基础概念 异常是在程序执行过程中发生的干扰事件,可能导致程序中断或非正常终止。Java 提供了一种机制来处理这些异常情况,使得程序能够更加健壮可靠[^2]。 --- #### 二、异常分类 Java 中的所有异常都继承自 `Throwable` ,主要分为两大:`Error` `Exception`。 ##### 1. **Error** - 表示系统级错误或资源耗尽等问题,通常是由虚拟机抛出的严重问题。 - 这些错误通常是不可恢复的,开发者不需要也不应该尝试捕获它们。 - 常见的例子包括: - `OutOfMemoryError`: 当 JVM 内存不足时抛出。 - `StackOverflowError`: 方法调用栈溢出时抛出。 这种型的错误表明运行环境出现了问题,而非程序逻辑上的缺陷。 ##### 2. **Exception** - 表示程序可以处理的异常状况。 - 又进一步细分为两种子别: ###### (1) **Checked Exception(受检异常)** - 必须显式声明并处理的异常。 - 如果某个方法可能会抛出此异常,则必须在方法签名中使用 `throws` 关键字声明,或者在其内部通过 `try-catch` 结构捕获。 - 常见的 Checked Exception 包括: - `IOException`: 输入输出操作失败时抛出。 - `SQLException`: 数据库访问出现问题时抛出。 由于编译器会在编译阶段检查这些异常的存在与否,因此称为“受检异常”。如果忽略处理这些异常,代码将无法成功编译[^2]。 ###### (2) **Unchecked Exception(非受检异常 / Runtime Exception)** - 不需要强制声明或捕获的异常。 - 它们通常是因为编程错误引起的,比如空指针引用 (`NullPointerException`) 或者数组越界访问 (`ArrayIndexOutOfBoundsException`)。 - 尽管可以选择性地对其进行捕获,但更推荐的方式是从根本上修复导致这些问题的代码逻辑。 - 此外,《Java API》指出,任何 RuntimeException 的子都可以在不声明的情况下自由抛出[^4]。 --- #### 三、总结对比表 | 特性 | Error | Checked Exception | Unchecked Exception | |---------------------|--------------------------------|-----------------------------|----------------------------| | 继承关系 | Throwable | Throwable -> Exception | Throwable -> Exception | | 是否需手动处理 | 否 | 是 | 否 | | 抛出时机 | 系统级别 | 编译期 | 运行期 | | 示例 | OutOfMemoryError, StackOverflowError | IOException, SQLException | NullPointerException, ArrayIndexOutOfBoundsException | --- #### 四、代码示例 以下是关于如何处理不同异常的一个简单例子: ```java import java.io.*; public class TestExceptions { public static void main(String[] args) { try { readFileContent(); } catch (FileNotFoundException e) { // 处理 checked exception System.out.println("文件未找到:" + e.getMessage()); } catch (RuntimeException re) { // 处理 unchecked exception System.out.println("运行时异常:" + re.getMessage()); } finally { System.out.println("无论是否发生异常都会执行此部分"); } } private static void readFileContent() throws FileNotFoundException { File file = new File("nonexistent.txt"); // 文件不存在 FileReader fr = null; if (!file.exists()) { throw new FileNotFoundException(file.getName()); // 显式抛出 checked exception } int i; fr = new FileReader(file); while ((i=fr.read()) != -1){ System.out.print((char)i); } fr.close(); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值