概念:
指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。
异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行
异常最上层的父类是:Exception。
异常分为两类:
1.编译时异常,没有继承RuntimeException的异常,直接继承于Exception。编译阶段就会报错提示
2.运行时异常,RuntimeException本身和子类。编译阶段没有错误提示,运行时出现的,一般是由于参数传递错误带来的问题
作用:
1.用来查询bug的关键参考信息
2.作为方法内部的一种特殊返回值,一边通知调用者底层的执行情况
1、try-----catch
格式:try{
可能出现异常的代码
}catch(异常类名 变量名){
异常的处理代码
}
目的:当代码出现异常时,可以让程序继续往下执行
package Excetion;
public class demo1 {
public static void main(String[] args) {
int [] arr={1,2,3,4,5};
try {
System.out.println(arr[10]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("索引越界了");
}
System.out.println("看看我执行力吗");
}
}
2.常见问题
1.如果try中没有遇到问题,怎么执行?
答:会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
2.如果try中可能会遇到多个问题怎么执行
答:会写多个catch与之对于,父类异常需要写在下面
3.如果try遇到的问题没有被捕获,怎么执行
答:相当于try....catch白写了,当前一场交给虚拟机处理
4.如果try中遇到了问题,那么try下面的其他代码还会执行吗?
答:不会执行。try中遇到问题,直接跳到对应的catch,如果没有对应的catch与之匹配,则交给虚拟机处理
3.Throwable
成员方法:其中,printStackTrace,利用system.err.printIn进行输出,把异常的信息通过红色字体输出在控制台
4.抛出异常
4.1throws
写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有那些异常
编译时异常:必须写,运行时异常:可以不写
格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
public class ThrowsDemo {
public static void main(String[] args) throws FileNotFoundException {
read("a.txt");
}
// 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明
public static void read(String path) throws FileNotFoundException {
if (!path.equals("a.txt")) {//如果不是 a.txt这个文件
// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
throw new FileNotFoundException("文件不存在");
}
}
}
4.2throw
写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不再执行
格式:throw new 异常类名(参数);
例:
throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");
public class ThrowDemo {
public static void main(String[] args) {
//创建一个数组
int[] arr = {2,4,52,2};
//根据索引找对应的元素
int index = 4;
int element = getElement(arr, index);
System.out.println(element);
System.out.println("over");
}
/*
* 根据 索引找到数组中对应的元素
*/
public static int getElement(int[] arr,int index){
//判断 索引是否越界
if(index<0 || index>arr.length-1){
/*
判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。
这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。
*/
throw new ArrayIndexOutOfBoundsException("哥们,角标越界了```");
}
int element = arr[index];
return element;
}
}
5.File
File对象表示路径,可以是文件,也可以是文件夹。这个路径可以是存在的,也可以是不存在的
绝对路径:带盘符的
相对路径:不带盘符的,默认在项目下寻找
package File;
import java.io.File;
public class demo1 {
public static void main(String[] args) {
String st="D:\\javaWeb";
File file=new File(st);
System.out.println(file);
String st1="D:\\javaWeb";
String child="a.txt";
File f2=new File(st1,child);
System.out.println(f2);
File parent =new File("D:\\javaWeb");
String child2="a.txt";
File f3=new File(parent,child2);
System.out.println(f3);
}
}
5.1成员方法
判断、获取:
package File;
import java.io.File;
public class demo2 {
public static void main(String[] args) {
//1.对一个文件的路径进行判断
File f1=new File("D:\\a.txt");
System.out.println( f1.isDirectory());//判断是否为文件夹
System.out.println(f1.isFile());//判断是否为文件
System.out.println(f1.exists());//判断是否存在
System.out.println("_______________________________");
//2.对一个文件夹的路径进行判断
File f2=new File("D:\\qq\\MobileFile");
System.out.println( f2.isDirectory());//判断是否为文件夹
System.out.println(f2.isFile());//判断是否为文件
System.out.println(f2.exists());//判断是否存在
//3.对一个不存在的路径进行判断
File f3=new File("D:\\qq1\\MobileFile");
System.out.println(f3.isDirectory());//判断是否为文件夹
System.out.println(f3.isFile());//判断是否为文件
System.out.println(f3.exists());//判断是否存在
//1.length 返回文件的大小(字节数量)
File f1=new File("D:\\a.txt");
System.out.println(f1.length());
//无法获取文件夹的大小
File f2=new File("D:\\qq");
System.out.println(f2.length());
//2.getAbsolutePath运行文件的绝对路径
File f3=new File("ps\\a.txt");
System.out.println(f3.getAbsolutePath());
//3.getPath 返回定义文件使用的路径
File f4=new File("ps\\a.txt");
System.out.println(f4.getPath());
//4.getName 获取名字
File f5=new File("ps\\a.txt");
System.out.println(f5.getPath());
//5.lastModified 返回文件最后修改的事件(时间毫秒值)
File f6=new File("D:\\a.txt");
System.out.println(f6.lastModified());
}
}
创建、删除
package File;
import java.io.File;
import java.io.IOException;
public class demo4 {
public static void main(String[] args) throws IOException {
//1.创建一个空的文件
File f1=new File("D:\\ps\\c.txt");
boolean newFile = f1.createNewFile();
System.out.println(newFile);
//2.创建单级文件夹
File f2=new File("D:\\ps\\c");
boolean b = f2.mkdir();
System.out.println(b);
//3.创建多级别文件夹
File f3=new File("D:\\ps\\c2\\c\\a");
boolean c = f3.mkdirs();
System.out.println(c);
//4.删除文件、文件夹
File f4=new File("D:\\ps\\c1");
boolean d = f3.delete();
System.out.println(d);
}
}
遍历:
当file表示的路径不存在时,返回null
当file表示的路径是文件时,返回null
当file表示的路径是一个空文件夹时,返回一个长度为0的数组
当file表示的路径时一个有内容的文件夹时,将里面的所有文件和文件夹的路径放在file数组中返回
当file表示的路径有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在file数组中放回,包含隐藏文件
当需要权限才能访问的文件夹时,返回null
package File;
import java.io.File;
public class demo5 {
public static void main(String[] args) {
File file=new File("D:\\ps");
File[] files = file.listFiles();
for (File file1 : files) {
//file1,以此表示ps文件夹里面的所有路径
System.out.println(file1);
}
}
}
获取并遍历: