• 第十九天笔记


    黑马程序员 <a href="http://www.itheima.com" target="blank">java培训</a>

       第十九天笔记

    1.异常的概述和分类

    异常就是程序在运行中出现的一些问些,在开发过程中必须要处理的.

    异常的分类:

     Throwable类是Java中所有错误或异常的超类。

    错误:Error

    异常:Exception

    Java中异常的分类

    编译异常:

    运行异常:在运行阶段会出现的问题。

    public class ExceptionDemo1 {
    
        public static void main(String[] args) {
            // int a = 10;
            // int b = 0;
            // System.out.println(a / b); // java.lang.ArithmeticException ----运行时异常
            //
            // SimpleDateFormat sdf = new SimpleDateFormat();
    
            // sdf.parse("asdfsadf"); //就是一个编译异常,要求我们程序员必须对异常进行处理.
    
            // int[] arr={1,2,3};
    
            // System.out.println(arr[3]);  //数组下标越界   ArrayIndexOutOfBoundsException
            //int n = Integer.parseInt("abc"); //NumberFormatException
            //System.out.println(n); 
            
            //空指针
            String s=null;
            
            System.out.println(s.length());
            System.out.println("hello world");
        }
    }

    2.Jvm默认怎样处理异常

    注意:在java中,它已经定义好了一些问题的描述.

    例如:数组下标越界 ArrayIndexOutOfBoundsException

    将一个字符串转换成数字  有可能出现  NumberFormatException

    总结:jvm会将问题包装成具体的异常类对象,并通过这个对象调用它的一些方法,来在控制台上把问题反馈。

    3.Try….catch的方式处理异常

    异常分类:

                       运行时异常:RuntimeException及其子类

                       编译异常:Exception其及子类,但是不包含RuntimeException及其子类

    对于异常,运行时异常可以处理也可以不处理,编译异常必须处理。

    try…catch格式:

    try{

             有可能出现异常的代码块;

    }catch(异常类型  e){

             处理方式

    }

    运行的代码如果出现的异常,catch会捕获到,你在catch中要捕获的是什么异常,如果出现了,就会将其捕获.

    public class ExceptionDemo2 {
    
        public static void main(String[] args) {
            
            //处理除数为0异常
            
            int a=10;
            int b=10;
            //System.out.println(a/b);  //java.lang.ArithmeticException  运行时异常
            
            //现在我们要使用try...catch来处理异常.
            
            try {
                System.out.println(a / b); // 有可能出现异常
            } catch (ArithmeticException e) { //catch只有在try块中的代码出现了异常才会执行.
                System.out.println("除数不能为0");
            }
        }
    }

    4.编译期异常和运行异常的区别

    编译异常,要求我们必须处理,不处理编译不了代码,运行时异常,你可以处理,也可以不处理,不处理jvm处理。

    编译异常  Exception类及其子类,除了RuntimeException及其子类,运行异常  RuntimeException及其子类。

    5.Throws的方式处理异常

    关于java中异常处理方式

    1. try…catch
    2. throws

    throws处理的格式:

             我们在方法后面直接写  throws  异常类,这就代表要将这个异常抛出。

    //throw作用
    
    public class ExceptionDemo8 {
        public static void main(String[] args) {
            try {
    
                show();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    
        public static void show() throws Exception {
            int a = 10;
            int b = 0;
            // 对除数进行一个判断
            if (b == 0) {
                throw new Exception("除数不能为0"); // throw是用于抛出具体问题
            }
            System.out.println(a / b);
    
        }
    }
    //在方法上是否使用throws,取决于方法内的throw抛出的异常类型,如果抛出的是编译异常,那么在方法上必须通过throws声明,而throw如果是一个运行异常,那么
    //在方法上可以throws异常,也可以不用。

    6.throw的概述以及和throws的区别

    throw是用于抛出具体异常的,注意,它抛出的是异常对象。

    对于throw,如果执行了,方法体也就结束 了。

    在开发中经常会使用throw让我们的方法结束。

     

    7.finally关键字的特点及作用

    在实际开发中,我们使用try..catch一般都 会与finally连用。

    格式

    try{

    }catch(类型 e){

    }finally{

    }

    //finally使用
    
    public class ExceptionDemo9 {
        public static void main(String[] args) {
    
            int a = 10;
            int b = 0;
            try {
                System.out.println(a / b);
                
                //释放资源
            } catch (ArithmeticException e) {
                System.out.println("除数不能为0");
                //释放资源
                // System.exit(0);如果出现这句话finally是执行不了的。
            } finally {
                System.out.println("finally");
                //释放资源
            }
    
            // 1.程序出现了异常,执行catch后还要执行finally
            // 2.程序没有出现异常,执行try中内容后,也会执行finally.
            // 总结:finally中的内容永远都会被执行.
            
            //问题:finally有什么作用?
            //在开发中finally中一般有于释放资源,执行关闭动作。
            
        }
    }

    8.关于final finally finalize 的区别

    Final是一个修饰符

    修饰属性    常量

    修饰方法    不可以被重写

    修饰类      不可以被继承

    Finally 异常中的,这个块中的内容永远会被执行,用于关闭资源。

    Finalize是Object类中的一个方法,用于垃圾回收.

    9.异常处理的变形以及自定义异常

    关于异常变形

     try…catch..finally

    try…catch

    Try…catch..catch..catch

    try…finally

    对于我们开发中,在try,catch,finally中又嵌套了try..catch

    自定义异常:

    继承自异常类的一个自定义的类,这个类就叫做自定义异常。

    自定义异常的作用

    在实际开发中,我们会处理很多关于业务操作的问题,而这些问题,是在jdk中的异常无法描述的,那么我们就需要定义一个自定义异常来描述。

    10.异常的注意事项

    A.如果父类(父接口)的方法没有定义异常,子类(实现类)重写的方法不能抛出异常。

    B.如果父类(父接口)的方法定义了异常,子类(实现类)重写的方法可以抛出同样异常,也可以不抛出。

    C.如果父类(父接口)的方法定义了异常,子类也要抛出异常,这时,可以抛出与父类相同的异常或者其异常的子集

    11.File类的概述和构造方法

       File类就是使用java中提供的File类来映射一个文件。

    注意:我们使用File来映射一个文件,只能对文件的属性进行操作,而不能修改文件的内容。如果要对文件的内容进行操作,只能使用IO流。

    1. File的构造方法

    File类是在java.io包下.

    File(String pathname)

    File(String parent,String child)

    File(File parent,String child)

    public class FileDemo1 {
    
        public static void main(String[] args) {
    
            // 问题,下面代码是否会有问题?
    
            File file = new File("d:/b/c/d/a.txt");
        }
    
        // 1.使用File(String pathname)来描述d:/a.txt文件
        public static void demo1() {
            // File file = new File("d:\a.txt");
    
            // File file=new File("d:/a.txt");
    
            // 注意:在linux系统中它的分隔符就是"/" 在widnows系统中它的分隔符是"",在java开发中,可以使用一个/来代替\
    
            // 注意:如果想要写一个通用的程序,在任何系统上都可以使用
            File file = new File("d:" + File.separator + "a.txt");
        }
    
        // 2.使用File(String parent,String child)来描述 d:/a.txt文件
        public static void demo2() {
            File file = new File("d:/a", "a.txt");
        }
    
        // 3.使用File(File parent,String child)来描述d:/a/a.txt
        public static void demo3() {
            File parent = new File("d:/a"); // 它映射的是d:/a目录
    
            File file = new File(parent, "a.txt"); // d:/a目录下的a.txt文件。
        }
    }

    2.File的创建功能

    2.1.创建文件   createNewFile()

    public boolean createNewFile(); 这个方法抛出了IOException异常,我们在使用它时需要处理,如果指定的文件的路径错误,抛出异常

    2.2.创建目录  mkdir();  public boolean mkdir();

    2.3.创建目录mkdirs();  用于创建多层目录 ;public boolean mkdirs();

    public class FileDemo2 {
    
        public static void main(String[] args) {
            demo3();
        }
    
        // 1.创建文件 createNewFile()
        public static void demo1() {
            File file = new File("d:/a.txt"); // 这个文件不存在
    
            try {
                System.out.println(file.createNewFile());
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        // 2.创建目录
        public static void demo2() {
            File file = new File("d:", "a.txt"); // 这个文件不存在
    
            file.mkdir();
        }
    
        // 3.创建多层目录
        public static void demo3() {
            File file = new File("d:/a/b/c");
    
            System.out.println(file.mkdirs());
        }
    }

    3.关于java中文件的路径问题

    绝对路径:可以简单理解成是c:/xxx  d:/xxx 带盘符

      相对路径:它是需要参照物的。

      如果我们使用记录本来操作,这时创建的文件与.java在同一目录下。

      如果我们使用eclipse它的相对路径,在当前工和下,它是相对于src。

    注意:我们在使用相对路径是时,经常使用”..”,它代表的是上一层目录。

    3.File文件的功能

    A.删除操作

    delete方法

    public boolean delete()  它可以删除目录也可以删除文件。

    java中的File类的delete方法删除时不走回收站。

    //删除操作
    //delete方法
    //public boolean delete()  它可以删除目录也可以删除文件。
    //java中的File类的delete方法删除时不走回收站。
    public class FileDemo4 {
    
        public static void main(String[] args) {
            
            
            //File file=new File("d:/a/a.txt");
            
            //删除文件
            //file.delete();
            
            File file=new File("d:/a");
            //删除目录,如果目录中存在了子目录或子文件,目录是不能删除的。
            System.out.println(file.delete()); 
        }
    }

     B.重命名 

    public boolean renameTo(File dest)

    如果使用renameTo方法,路径没有改变,直接修改名称,如果路径改变 ,它相当于改名后剪切。

    如果使用renameTo方法,对目录操作,可以改名,但不能改变位置.

    public class FileDemo5 {
    
        public static void main(String[] args) {
            //创建一个文件
            File file=new File("d:/a");
            //重命名
            System.out.println(file.renameTo(new File("d:/b")));
        }
    }

    4.File文件的判断功能

    A.判断文件或目录是否存在

    public boolean exists()  返回值为true,代表存,否则不存在。

    B.判断是文件

    public boolean isFile()

    C.判断是目录

    public boolean isDirectory();

    D.判断是否是隐藏文件

    public boolean isHidden();

    E.判断是否是只读

    public boolean canRead();

    F.判断是否是只写

    public boolean canWrite();

    5.File的获取功能

    A.获取文件的长度

    public long length()  获取文件长度,单位是字节(byte)

    B.获取当前文件的绝对路径(不规范)

    public String getAbsolutePath()

    C.获取当前文件的绝对路径(规范)

    public String getCanonicalPath()

    D.获取当前文件的名称

    public String getName();

    public class FileDemo7 {
    
        public static void main(String[] args) throws IOException {
            demo3();
        }
        //获取文件长度
        public static void demo1(){
            File file=new File("c:/a.txt");
            System.out.println(file.length());
            
        }
        
        //获取文件名称
        public static void demo2(){
            File file=new File("c:/a.txt");
            System.out.println(file.getName());
        }
        
        //获取文件的绝对磁盘路径
        public static void demo3() throws IOException{
            File file=new File("c:/a/../a.txt");
            
            System.out.println(file.getAbsolutePath());
            System.out.println(file.getCanonicalPath());
        }
    }

    12.File的高级获取功能

    A.list

    public String[] list();用于获取当前目录下的所有子的名称的一个字符串数组。

    B.listFiles

    public File[] listFiles();用于获取当前目录下所有子的一个File数组

    public class FileDemo8 {
    
        public static void main(String[] args) {
            demo1();
        }
    
        // list方法
        public static void demo1() {        
    
            File file = new File("c:/a");
            String[] files = file.list();
            
            for(String f:files){
                System.out.println(f);
            }
        }
        
        // listFiles方法
        public static void demo2() {
    
            File file = new File("c:/a");  
            File[] files = file.listFiles();
            //new File("c:/a/a.txt")  new File("c:/a/b");
            for(File f:files){
                System.out.println(f.getName()); //获取文件名称
            }
        }
    }
  • 相关阅读:
    天府大讲堂:5G时代的物联网发展趋势与产业变革
    一步步教你轻松学奇异值分解SVD降维算法
    一步步教你轻松学支持向量机SVM算法之案例篇2
    一步步教你轻松学支持向量机SVM算法之理论篇1
    一步步教你轻松学主成分分析PCA降维算法
    一步步教你轻松学关联规则Apriori算法
    一步步教你轻松学K-means聚类算法
    一步步教你轻松学逻辑回归模型算法
    一步步教你轻松学朴素贝叶斯模型实现篇2
    一步步教你轻松学朴素贝叶斯模型算法理论篇1
  • 原文地址:https://www.cnblogs.com/liman/p/4430760.html
Copyright © 2020-2023  润新知