首页 > 编程语言 >java_day15_Collections、递归、Exception、File

java_day15_Collections、递归、Exception、File

时间:2024-10-18 19:59:39浏览次数:1  
标签:Exception java String System day15 File println public out

一、Collections

Collections:是java针对集合操作专门提供的一个工具类

静态方法:
    public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key)
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list)
    public static void shuffle(List<?> list)

代码案例:

public class CollectionsDemo1 {
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(34);
        list1.add(7);
        list1.add(12);
        list1.add(734);
        list1.add(38);
        list1.add(29);
        System.out.println(list1);

        System.out.println("-------------------------------");
        //public static <T> void sort(List<T> list)
        Collections.sort(list1); // 底层是调用了Arrays工具类中的sort方法
        System.out.println(list1);

        //public static <T> int binarySearch(List<?> list,T key)
        // 二分查找【前提是序列是有序的】
        //[7, 12, 29, 34, 38, 734]
        System.out.println(Collections.binarySearch(list1, 100));

        //public static <T> T max(Collection<?> coll) 求集合中最大值
        System.out.println(Collections.max(list1));
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("world");
        list2.add("java");
        list2.add("apple");
        list2.add("hadoop");
        System.out.println(Collections.max(list2));

        //public static void reverse(List<?> list)
        Collections.reverse(list1);
        System.out.println(list1);

        System.out.println("===========================");
        //public static void shuffle(List<?> list)  随机打乱元素
        Collections.shuffle(list1);
        System.out.println(list1); // [34, 734, 38, 7, 12, 29]  [34, 12, 7, 38, 29, 734]

    }
}
`Vector类即便是安全的,我们也不会用它。
使用Collections工具类可以将任意一个不安全的集合类变成一个线程安全的集合类`

代码案例

public class CollectionsDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<>();

        Vector<Integer> v1 = new Vector<>();



//        List<Integer> list2 = Collections.synchronizedList(list1);
//        list2.add(1);
//        list2.add(1);
//        list2.add(1);
//        for (Integer i : list2) {
//            System.out.println(i);
//        }
    }
}

二、递归

递归:方法定义时内部调用自身的现象

fun1().fun2() 这叫方法的链式调用
fun1(show1()) 这叫方法的嵌套调用

写递归需要考虑的东西:
    1、开始条件
    2、出口

递归:
    1、从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容:  1
        从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容:    2
            从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容:   3
                从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的故事内容: 4
                ....
       结束条件:山倒了,老和尚圆寂了。

    2、学习大数据,找工作,挣钱,娶老婆,生娃:
        学习大数据,找工作,挣钱,娶老婆,生娃:
            学习大数据,找工作,挣钱,娶老婆,生娃:
            ...
       结束条件:挣不到钱,没有生娃...
案例:
需求:使用递归实现一个数的阶乘

```public class DiGuiDemo1 {
    public static void main(String[] args) {
        int res = jieCheng(5);
        System.out.println("5的阶乘是:" + res);
    }

    // 5*4*3*2*1
    public static int jieCheng(int i) {
        if (i == 1) {
            return 1;
        } else {
            return i * jieCheng(--i);
            // 5 * jieCheng(4)
            // 5 * 4 * jieCheng(3)
            // 5 * 4 * 3 * jieCheng(2)
            // 5 * 4 * 3 * 2 * jieCheng(1)
        }
    }

//    public static void fun1(){
//        fun1();
//    }
}

三、Exception

异常:java程序编译或运行过程中出现的问题
Throwable:
    Error: 表示非常严重的问题,自己无法解决的问题
    Exception:
        除了RuntimeException其它异常【编译时期异常】: 一般指的是异常尚未处理就编译了
        RuntimeException【运行时期异常】: 运行过程中报错了,一般情况下是因为语法逻辑不正确导致

JVM遇到问题时,默认的处理方案是:停止程序,抛出错误。

代码案例:

public class ExceptionDemo1 {
    public static void main(String[] args) {
//        Demo demo = new Demo();
//        Object clone = demo.clone();

//        int[] arr = {11,22,33,44};
//        System.out.println(arr[5]);

        int i = 5;
        int j = 0;
        System.out.println(i/j);

        System.out.println("hello world");

    }
}

异常处理方案

异常的处理方案:
    1、try...catch...finally

try...catch使用注意事项:
    1、当try中出现异常时,JVM会对应创建一个异常类对象
    2、自上而下会与catch中的异常进行匹配,若匹配上就相当于处理了,执行catch中的逻辑
    3、若try中有多个异常,当第一个异常触发时,try中的其它后续代码都不会执行,JVM会对应创建一个异常类对象进行第二步匹配
    4、可以直接写一个catch里面是所有异常的父类、
    5、若存在多个catch匹配,需要将父类异常往后写
    6、若使用jdk新特性的写法的话,异常类之间不能存在继承关系

代码案例:

public class ExceptionDemo2 {
    public static void main(String[] args) {

        int[] arr = {11, 22, 33, 44, 55};

//        try {
//            System.out.println(arr[8]); // new ArrayIndexOutOfBoundsException()
//            System.out.println(10/3); // new ArithmeticException()
//            System.out.println("江川比李刚帅!");
//        }catch (ArrayIndexOutOfBoundsException e){ // = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦!!");
//        }catch (ArithmeticException e){
//            System.out.println("除0错误!!");
//        }

//        try {
//            System.out.println(arr[2]); // new ArrayIndexOutOfBoundsException()
//            System.out.println(10/0); // new ArithmeticException()
//            System.out.println("江川比李刚帅!");
//        }catch (ArithmeticException e){
//            System.out.println("除0错误!!");
//        }catch (Exception e){ // = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦!!");
//        }

        try {
            System.out.println(arr[8]); // new ArrayIndexOutOfBoundsException()
            System.out.println(10 / 3); // new ArithmeticException()
            System.out.println("江川比李刚帅!");
        } catch (ArrayIndexOutOfBoundsException | ArithmeticException e) { // = new ArrayIndexOutOfBoundsException()
            System.out.println("出错啦!!");
        }


        System.out.println("李刚真帅!");


    }
}

void printStackTrace()

public class ExceptionDemo3 {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};

//        System.out.println(arr[8]);
//        System.out.println(3/0);

        try {
//            System.out.println(arr[8]);
            System.out.println(3/0);// new ArrayIndexOutOfBoundsException()
        } catch (Exception e) { // = new ArrayIndexOutOfBoundsException()
//            System.out.println(e.getMessage());
//            System.out.println(e.toString());
            //void printStackTrace()
            //将此throwable和其追溯打印到标准错误流。
            e.printStackTrace();
        }




        System.out.println("李刚是世界首富!!");
    }
}
try...catch...finally
无论try中的代码是否出错,finally都会执行。
finally一般来说,用作释放资源的作用。

四、File

File【文件】: 是计算机中所有文件的抽象表示, 将来File对象目标可能存在,也可能不存在。

构造方法:
    public File(String pathname)
    public File(String parent,String child)
    public File(File parent,String child)

路径:
    绝对路径【完整路径】:D:\projects\IdeaProjects\bigdara32\java\src\com\shujia\day15\ketang\a1.txt
    相对路径:java/src/com/shujia/day15/ketang/a1.txt

代码案例:

public class FileDemo1 {
    public static void main(String[] args) {
        //public File(String pathname)
//        File f1 = new File("D:\\projects\\IdeaProjects\\bigdara32\\java\\src\\com\\shujia\\day15\\ketang\\a1.txt");
//        System.out.println(f1);
//        File f2 = new File("java/src/com/shujia/day15/ketang/a1.txt");
//        System.out.println(f2);

        //public File(String parent,String child)
//        File f1 = new File("D:\\projects\\IdeaProjects\\bigdara32\\java\\src\\com\\shujia\\day15\\ketang","a1.txt");
//        System.out.println(f1);

        //public File(File parent,String child)
        File file = new File("D:\\projects\\IdeaProjects\\bigdara32\\java\\src\\com\\shujia\\day15\\ketang");
        File f1 = new File(file, "a1.txt");
        System.out.println(f1);

    }
}
创建功能
    public boolean createNewFile()
    public boolean mkdir()
    public boolean mkdirs()
删除功能
    public boolean delete()
重命名功能
    public boolean renameTo(File dest)

代码案例:

public class FileDemo2 {
    public static void main(String[] args) throws Exception{
        File file = new File("java/src/com/shujia/day15/ketang/a1.txt");
        //public boolean createNewFile()
//        System.out.println(file.createNewFile());

        //public boolean mkdir() 创建单极文件夹
//        System.out.println(file.mkdir());

        //public boolean mkdirs() 创建多极文件夹
//        System.out.println(file.mkdirs());

        //public boolean delete() 只能删除空文件夹,或一个文件
//        System.out.println(file.delete());

        //public boolean renameTo(File dest)
//        File file2 = new File("java/src/com/shujia/day15/ketang/李刚.txt");
//        System.out.println(file.renameTo(file2));


    }
}
判断功能
    public boolean isDirectory()
    public boolean isFile()
    public boolean exists()
    public boolean canRead()
    public boolean canWrite()
    public boolean isHidden()

代码案例:

public class FileDemo3 {
    public static void main(String[] args) {
        File file = new File("java/src/com/shujia/day15/ketang/李刚.txt");

        // public boolean isDirectory()
        System.out.println(file.isDirectory());

        //public boolean isFile()
        System.out.println(file.isFile());

        //public boolean exists()
        System.out.println(file.exists());

        //public boolean canRead() 是否可读
        System.out.println(file.canRead());

        //public boolean canWrite() 是否可写
        System.out.println(file.canWrite());

        //public boolean isHidden() 是否被隐藏
        System.out.println(file.isHidden());
    }
}
基本获取功能
    public String getAbsolutePath()
    public String getPath()
    public String getName()
    public long length()
    public long lastModified()

代码案例:

public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("java/src/com/shujia/day15/ketang/李刚.txt");

        // public String getAbsolutePath() 获取绝对路径
        System.out.println(file.getAbsolutePath());

        //public String getPath() 获取相对路径
        System.out.println(file.getPath());

        //public String getName() 获取文件或文件夹的名字
        System.out.println(file.getName());

        //public long length() 获取文件中字节数
        System.out.println(file.length());

        //public long lastModified() 获取上一次修改的时间戳【毫秒级别的】
//        System.out.println(file.lastModified());
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(new Date(file.lastModified()));
        System.out.println("上一次修改的时间:"+time);


    }
}
高级获取功能
    public String[] list()
    public File[] listFiles()

代码案例:

public class FileDemo5 {
    public static void main(String[] args) {
        File file = new File("java/src/com/shujia/day15/ketang");

        //public String[] list() 将目录下所有的文件以及文件夹的名字放到一个数组中返回
        String[] nameList = file.list();
        if(nameList!=null){
            for (String s : nameList) {
                System.out.println(s);
            }
        }

//        assert nameList!=null;
//        for (String s : nameList) {
//            System.out.println(s);
//        }

        //public File[] listFiles() 将目录下所有的文件以及文件夹都封装成一个一个的File对象放到一个数组中
        File[] files = file.listFiles();
        if(files!=null){
            for (File file1 : files) {
                System.out.println(file1);
            }
        }


    }
}

例题
需求:获取ketang目录下所有.txt后缀的文件
1、先获取所有文件,在筛选出以.txt结尾的文件

public class FileDemo6 {
    public static void main(String[] args) {
        File file = new File("java/src/com/shujia/day15/ketang");

        //获取当前目录下所有的文件或者文件夹的集合
        File[] files = file.listFiles();
        if(files!=null){
            for (File file1 : files) {
                if(file1.isFile() && file1.getName().endsWith(".txt")){
                    System.out.println(file1.getName());
                }
            }
        }
    }
}
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)

2、筛选出以.txt结尾的文件文件,添加到数组中

public class FileDemo7 {
    public static void main(String[] args) {
        File file = new File("java/src/com/shujia/day15/ketang");

        //public File[] listFiles(FilenameFilter filter)
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 当这里返回true的时候,表示将文件放到数组中
                // dir表示当前目录,name表示文件或者文件夹名字
                File f = new File(dir, name);
                return f.isFile() && f.getName().endsWith(".txt");
            }
        });
//       使用lambda表达式

//        File[] files = file.listFiles((dir, name) -> {
//            File f = new File(dir, name);
//            return f.isFile() && f.getName().endsWith(".txt");
//        });


        if(files!=null){
            for (File file1 : files) {
                System.out.println(file1);
            }
        }

    }
}

五、throws

throws: 抛出
在方法的定义上抛出异常类, throws本身是不会处理异常的,只是当时方法内部不用处理了,
但是当调用者调用有问题的方法时,需要调用者进行处理

throw: 抛出
在方法内部抛出异常对象,表示一个确定的异常

注意:
    当调用者调用抛出运行时期异常的方法时,可以选择不去处理,也能运行。
    当调用者调用抛出编译时期异常的方法是,必须要进行处理,否则编译不通过无法运行。

小故事理解 throw throws try...catch 的使用:
江川是一个快乐的小矿工,有一天他挖到了一个远古炸弹

标签:Exception,java,String,System,day15,File,println,public,out
From: https://www.cnblogs.com/w-ll/p/18473220

相关文章

  • java多线程
    学习java多线程packagecom.haole.testdemo1;classRunnableDemo3implementsRunnable{privateStringname;privateThreadx;RunnableDemo3(Stringa){name=a;}@Overridepublicvoidrun(){for(inti=0;i<4;......
  • Java面向对象之继承,深度剖析继承的使用
    各位看官早安午安晚安呀如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好欢迎您分享给更多人哦大家好我们今天来学习java面向对象的三大特性之一的继承那大家肯定要问什么是继承?继承有什么用?以及继承的语法格式是设么样的?接下来跟着小编我带领大家......
  • 数据结构(JAVA)包装类&泛型
    文章目录包装类基本数据类型和对应的包装类装箱和拆箱面试题泛型什么是泛型泛型的语法泛型类的使用泛型的使用裸类型(RawType)(仅需了解)擦除机制泛型的上界泛型方法包装类基本数据类型和对应的包装类注意,除了int基本数据类型的包装类是Integer和char基本数据类......
  • Java中JDK8-17新特性下
    JDK8-17新特性(第二部分)目录JDK8-17新特性(第二部分)switch表达式增强文本块标准化模式匹配局部变量类型判断switch表达式增强在Java中,switch语句的增强主要体现在Java12引入的预览特性(并在Java14中成为正式特性)中,即所谓的“SwitchExpressions”(switch表达式)。这个新特性使得s......
  • JavaWeb开发3
    JavaScript一门跨平台、面向对象的脚本语言,用来控制网页行为,能使网页可交互js引入方式内部脚本:将JS代码定义在HTML页面中JavaScript代码必须位于<script></script>在HTML文档中,可以在任意地方,放置任意数量的<script>一般会把脚本置于<body>元素的底部,可以改......
  • 【Java后端】SpringBoot 自动配置原理解析
    为什么就这一个注解,就可以让SpringBoot自动配置呢?为了更清晰地阐述SpringBoot自动配置的底层原理,我们将结合源码进行更深入的分析,并加入一些关键步骤的代码片段。 注意:按住Ctrl键不松,点击相应注解,即可进入对应源码1. @SpringBootApplication 注解的秘密:开启自动配置......
  • java 11天 StringBuffer static
    补充:1--100正则表达式1-100 100拿出去或上“[1-9][0-9]{0,1}|100”0--100  0和100拿出去或上“[1-9][0-9]{0,1}|100|0”获取常量池中的地址 String - intern();String学过23个 一.StringBufferStringBuffer 字符串长度+16 StringBuffer空间是2*oldCap......
  • Java工程师必备的20条SQL最佳实践详解
    在Java开发中,SQL是处理数据库交互的核心技能。高效的SQL查询不仅能够提升应用程序的性能,还能减少资源消耗和提高用户体验。以下是Java工程师必备的20条SQL最佳实践,每条都附有代码示例和详细解释。1.使用索引索引可以显著提高查询速度。为经常用于查询条件、排序和连接的......
  • 基于Java微信小程序的模拟考试系统(源码+lw+部署文档+讲解等)
    项目运行截图技术框架后端采用SpringBoot框架SpringBoot是一个用于快速开发基于Spring框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。SpringBoot通过自动化配置和约定大于......
  • java+vue计算机毕设高校图书馆借阅管理系统app【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和移动互联网的普及,高校学生的学习和生活方式正经历着深刻的变革。图书馆作为知识传播和学术研究的重要场所,其管理与服务模式......