2-Java进阶知识总结-2-递归-异常-流-File

news2025/4/22 18:40:17

文章目录

  • Java SE进阶知识总结-2
  • Objects、Math、System、BigDecimal
    • Objects
    • Math
    • System
    • BigDecimal
  • 包装类
    • 基本数据类型对应的包装类
    • 自动拆箱和自动装箱
    • 包装类常见问题
  • 时间类
    • JDK8(-)
    • JDK8(+)
      • 日历类(获取当前时间)
      • 日期格式化类(格式化时间)
      • 时间类(获取时间)
      • 工具类(计算时间间隔)
  • 递归
  • 异常
    • 异常体系
    • 异常处理方式
      • 默认
      • try...catch....
    • throw和throws
  • Stream流
    • 思想
    • 流对象获取
      • 集合获取流对象
      • 数组获取流对象
      • 零散的数据获取流对象
    • 流的中间操作方法
    • 流的终结操作方法
    • 流的收集操作
  • File类
    • File类创建
    • 路径概念
    • File类常用方法
    • File类创建和删除方法
    • File类遍历方法

Java SE进阶知识总结-2

Objects、Math、System、BigDecimal

都是讲的方法,常用常新

Objects

所有的类都直接或间接继承该类(祖宗类),其内的方法都可用

Math

包含基本的数字运算方法

System

都是静态方法,可以直接调用

BigDecimal

用于解决小数运算中,出现的不精确问题

包装类

将基本数据类型,转为引用数据类型,就可以方便的使用一些方法

基本数据类型对应的包装类

基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

自动拆箱和自动装箱

JDK5之后,有自动拆、装箱

基本数据类型和对应的包装类可以直接相互赋值运算,不用担心转换问题

包装类常见问题

public static void main(String[] args) {
    Integer i1 = 127;
    Integer i2 = 127;
    System.out.println(i1 == i2);       // true

    Integer i3 = 129;
    Integer i4 = 129;
    System.out.println(i3 == i4);       // false

    Long i11 = 129L;
    Long i22 = 129L;

    System.out.println(i11 == i22);     // false
    System.out.println(i11.equals(i22));  // true
}

自动装箱的本质是调用底层装箱方法

  • 数值范围在-128-127,给定指定数组,不会创建新的对象,所以上述比较结果是true

  • 数值范围在-128-127,会创建新的对象,所以上述比较结果是false

时间类

JDK8以前的时间类JDK8以后的时间类
设计欠妥,使用不方便,已淘汰设计合理,功能丰富,使用方便
都是可变对象,修改后会丢失原有数据都是不可变对象,修改后返回新的时间对象
线程不安全线程安全
只能精确到毫秒可以精确到纳秒

JDK8(-)

Date、SimpleDateFormat、Calendar

JDK8(+)

日历类(获取当前时间)

LocalDate、LocalTime、LocalDateTime

日期格式化类(格式化时间)

DateTimeFormatter

时间类(获取时间)

Instant、ZoneId、ZoneDateTime

工具类(计算时间间隔)

Period、Duration、ChronoUnit

递归

方法直接或间接的调用本身

异常

要求:

  • 看得懂异常信息
  • 了解异常体系结构和分类
  • 掌握异常的两种处理方式
  • 自定义异常

异常体系

image-20231012110005662

  • Error
    • 严重级别问题
  • Exception
    • RuntimeException 及其子类:运行时异常
    • 除RuntimeException 之外所有的异常:编译时异常(起提醒作用,要在准备运行前解决)

异常处理方式

默认

  • 虚拟机在异常代码位置,自动创建一个异常对象:ArithmeticException
  • 在出现异常的地方抛出给调用者,再抛出给JVM虚拟机
  • 虚拟机接收到异常对象后,在控制台输出异常信息
  • 程序终止,异常点后续代码不再运行

try…catch…

  • 可以捕捉异常后,给出处理方案
  • 代码可以继续运行

throw和throws

throwthrows
用在方法中,作用:抛出异常对象用在方法名后面,作用:声明该方法存在异常,需要调用者进行处理
补:异常是编译型异常,必须用throws;异常是运行时异常,不需要声明

Stream流

简化对集合、数据的一些复杂操作

  • 集合知识点:Java进阶知识点-3-集合

思想

  • 将数据放到流中(获取流对象)

  • 中间方法:对流对象进行操作,操作后的返回值依然是流对象

  • 终结方法:对流对象的最终操作,操作后的流对象不可再用

    • 操作后或没有返回值,或返回值不再是流对象
    • 被终结方法操作过的流对象,不能再进行中间方法操作

流对象获取

集合获取流对象

package com.itheima.day12.stream;

import java.util.*;
import java.util.function.Consumer;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class StreamDemo1 {
    /*
        获取Stream流对象演示
            - 将数据放在流水线的传送带上

            1. 集合获取 Stream 流对象 (使用Collection接口中的默认方法)
                    default Stream<E> stream()

                    * Map集合获取Stream流对象, 需要间接获取
                            - map.entrySet().stream()
     */
    public static void main(String[] args) {
		method1();

    }

    private static void method1() {
        Set<String> set = new HashSet<String>();
        set.add("张三丰");
        set.add("张无忌");
        set.add("张翠山");
        set.add("王二麻子");
        set.add("张良");
        set.add("谢广坤");

        set.stream().forEach(s -> System.out.println(s));


        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("张三丰", 100);
        map.put("张无忌", 35);
        map.put("张翠山", 55);
        map.put("王二麻子", 22);
        map.put("张良", 30);
        map.put("谢广坤", 55);

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        entrySet.stream().forEach(s -> System.out.println(s));
    }
}

数组获取流对象

package com.itheima.day12.stream;

import java.util.*;
import java.util.function.Consumer;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class StreamDemo1 {
    /*
        获取Stream流对象演示
            - 将数据放在流水线的传送带上
            
            2. 数组获取 Stream 流对象 (使用Arrays数组工具类中的静态方法)
                    static <T> Stream<T> stream (T[] array)
     */
    public static void main(String[] args) {
		method1();

    }


    private static void method1() {
        List<String> list = new ArrayList<String>();
        list.add("张三丰");
        list.add("张无忌");
        list.add("张翠山");
        list.add("王二麻子");
        list.add("张良");
        list.add("谢广坤");

        list.stream().forEach(s -> System.out.println(s));
    }
}

零散的数据获取流对象

package com.itheima.day12.stream;

import java.util.*;
import java.util.function.Consumer;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class StreamDemo1 {
    /*
        获取Stream流对象演示
            - 将数据放在流水线的传送带上

            3. 零散的数据获取 Stream 流对象 (使用 Stream 类中的静态方法)
                    static <T> Stream<T> of(T... values)
     */
    public static void main(String[] args) {
        Stream.of(1, 2, 3, 4, 5, 6).forEach(s -> System.out.println(s));
        Stream.of("张三", "李四", "王五", "赵六").forEach(s -> System.out.println(s));
    }
}

流的中间操作方法

image-20231019101125477

package com.itheima.day12.stream;

import java.util.ArrayList;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class StreamDemo2 {
    public static void main(String[] args) {
        // 需求: 将集合中以 【张】 开头的数据,过滤出来并打印在控制台
        ArrayList<String> list = new ArrayList<String>();
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");

        list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
        System.out.println("-------------------------------------");
        // 需求1: 取前3个数据在控制台输出
        list.stream().limit(3).forEach(s -> System.out.println(s));
        System.out.println("-------------------------------------");
        // 需求2: 跳过3个元素, 把剩下的元素在控制台输出
        list.stream().skip(3).forEach(s -> System.out.println(s));
        System.out.println("-------------------------------------");
        // 需求3: 跳过2个元素, 把剩下的元素中前2个在控制台输出
        list.stream().skip(2).limit(2).forEach(s -> System.out.println(s));
        System.out.println("-------------------------------------");
        // 需求4: 取前4个数据组成一个流
        Stream<String> s1 = list.stream().limit(4);
        // 需求5: 跳过2个数据组成一个流
        Stream<String> s2 = list.stream().skip(2);
        // 需求6: 合并需求4和需求5得到的流, 并把结果在控制台输出
        Stream<String> s3 = Stream.concat(s1, s2);
        // s3.forEach(s -> System.out.println(s));
        System.out.println("-------------------------------------");
        // 需求7: 合并需求4和需求5得到的流, 并把结果在控制台输出,要求字符串元素不能重复
        s3.distinct().forEach(s -> System.out.println(s));
    }
}

流的终结操作方法

image-20231019101302884

package com.itheima.day12.stream;

import java.util.stream.Stream;

public class StreamDemo3 {
    /*
        Stream流的终结操作方法
            - 流水线中的最后一道工序
            
            public void forEach (Consumer action) 对此流的每个元素执行遍历操作
            public long count () 返回此流中的元素数
     */
    public static void main(String[] args) {
        long count = Stream.of(1, 2, 3, 4, 5, 6).filter(s -> s % 2 == 0).count();
        System.out.println(count);
    }
}

流的收集操作

  • 将Stream流操作后的结果转回到集合
    • 流(中间)操作的返回对象还是流,所以不会对源数据进行修改

image-20231019101503760

package com.itheima.day12.stream;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo4 {
    /*
        Stream流的收集操作

            public R collect (Collector c) : 将流中的数据收集到集合

                Collectors
                    public static <T> Collector toList()
                    public static <T> Collector toSet()
                    public static  Collector toMap(Function keyMapper , Function valueMapper)
     */
    public static void main(String[] args) {

        List<Integer> list1 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).filter(s -> s % 2 == 0).collect(Collectors.toList());

        System.out.println(list1);


        Set<Integer> list2 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10).filter(s -> s % 2 == 0).collect(Collectors.toSet());
        System.out.println(list2);
    }
}

File类

File类代表操作系统的文件对象(文件、文件夹)

File类创建

image-20231019111619266

package com.itheima.day12.file;

import java.io.File;
import java.io.IOException;

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("D:\\A.txt");
        f1.createNewFile();

        File f2 = new File("D:\\test");
        System.out.println(f2.exists());

        File f3 = new File("D:\\", "test");
        System.out.println(f3.exists());

        File f4 = new File(new File("D:\\"), "test");
        System.out.println(f4.exists());
    }
}
  • File封装的对象可以定位文件和文件夹
  • File封装的对象仅仅是一个路径名,路径可以存在,也可以不存在

路径概念

  • 相对路径:相对于当前项目
  • 绝对路径:从盘符根目录开始,一直到某个具体的文件或文件夹

File类常用方法

image-20231019112130128

  • length()方法,对于文件对象,返回的是正确的字节个数;对于文件夹对象,返回的是错误的字节个数

  • getPath(),返回定义文件时使用的路径,比较鸡肋

package com.itheima.day12.file;

import java.io.File;
import java.util.Date;

public class FileMethodDemo3 {
    /*
        File类常见方法 :

            1. 判断相关
                    public boolean isDirectory() : 判断是否是文件夹
                    public boolean isFile() : 判断是否是文件
                    public boolean exists() : 判断是否存在

            2. 获取相关
                    public long length() : 返回文件的大小(字节数量)
                                                * 文件对象操作, 返回正确的字节个数
                                                * 文件夹对象操作, 返回的是错误的字节个数

                    public String getAbsolutePath() : 返回文件的绝对路径
                    public String getPath() : 返回定义文件时使用的路径   比较鸡肋
                    public String getName() : 返回文件的名称,带后缀
                    public long lastModified() : 返回文件的最后修改时间(时间毫秒值)

     */
    public static void main(String[] args) {
        File f1 = new File("D:\\A.txt");
        System.out.println(f1.isDirectory());       // false
        System.out.println(f1.isFile());            // true
        System.out.println(f1.exists());            // true

        System.out.println("----------------------");

        File f2 = new File("D:\\test");

        System.out.println(f1.length());
        System.out.println(f2.length());

        System.out.println("----------------------");

        File f3 = new File("A.txt");
        System.out.println(f3.getAbsolutePath());

        System.out.println("----------------------");

        System.out.println(f1.getName());
        System.out.println(f2.getName());
        System.out.println(f3.getName());

        System.out.println("----------------------");

        long time = f1.lastModified();
        System.out.println(new Date(time));
    }
}

File类创建和删除方法

image-20231019112421476

package com.itheima.day12.file;

import java.io.File;
import java.io.IOException;

public class FileMethodDemo4 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("src\\com\\itheima\\day12\\B.txt");
        System.out.println(f1.createNewFile());

        File f2 = new File("src\\com\\itheima\\day12\\aaa");
        System.out.println(f2.mkdirs());

        File f3 = new File("src\\com\\itheima\\day12\\C.txt");      // 也是创建的文件夹,C.txt就是文件夹的名字
        															// 创建的是什么,跟路径没关系,跟调用的方法有关
        System.out.println(f3.mkdirs());

        System.out.println(f1.delete());
        System.out.println(f2.delete());
    }
}

File类遍历方法

package com.itheima.day12.file;

import java.io.File;

public class FileMethodDemo5 {
    /*
        File类的遍历方法 :
            public File[] listFiles() 获取当前目录下所有的  "一级文件对象"  返回 File 数组

     */
    public static void main(String[] args) {
        File f = new File("D:\\test");

        File[] files = f.listFiles();

        for (File file : files) {
            System.out.println(file);
        }
    }
}
  • 当调用者File表示的路径不存在时,返回null
  • 当调用者File表示的路径是文件时,返回null
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位!

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

BUUCTF 文件中的秘密 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 小明经常喜欢在文件中藏一些秘密。时间久了便忘记了&#xff0c;你能帮小明找到该文件中的秘密吗&#xff1f; 密文&#xff1a; 下载附件&#xff0c;解压得到JPEG图片。 解题思路&#xff1a; 1、根据题目提示…

预训练+微调 逆合成预测

【JCIM 2020】数据增强预训练基于模板 Template methods Figure 1. 预训练微调 workflow 首先&#xff0c;通过增强的反应数据&#xff08;真实存在的数据计算机生成的反应数据&#xff09;进行Pretrain Encoder A&#xff0c; 2、只使用真实反应数据对Pretrain Encoder A 进…

最小生成树专题1 最小生成树-Prim算法

题目&#xff1a; 样例1&#xff1a; 输入 4 5 0 1 3 0 2 2 0 3 3 2 3 1 1 2 1 输出 4 样例2&#xff1a; 输入 3 1 0 1 1 输出 -1 思路&#xff1a; Prim 算法和 朴素版的 Dijkstra 有点类似&#xff0c;也叫做 朴素版Prim算法&#xff0c;但也还是有点区别。 Dijkstra 中…

​CRM系统如何选型?

不少企业都想要使用CRM客户管理系统&#xff0c;但往往在CRM选型阶段就被折腾的五迷三道。CRM系统选型难在哪里&#xff1f;下面我们从企业用户和CRM厂商两方面进行分析&#xff0c;来说说关于CRM系统选型的那些事。 企业自身原因&#xff1a; 1、认知偏差 看到一个观点&…

GNN图神经网络入门

1.为什么会提出图神经网络&#xff1f; 答&#xff1a;为了处理图Graph这种特殊的数据结构。 2.为什么要与神经网络搭上关系&#xff1f; 答&#xff1a;利用神经网络能够拟合任意函数的能力&#xff08;或者理解为强大的为特征变换能力&#xff09;。 3.图神经网络的最终目的是…

Ajax、Json深入浅出,及原生Ajax及简化版Ajax

Ajax 1.路径介绍 1.1 JavaWeb中的路径 在JavaWeb中&#xff0c;路径分为相对路径和绝对路径两种&#xff1a; 相对路径&#xff1a; ./ 表示当前目录(可省略) ../ 表示当前文件所在目录的上一级目录 绝对路径&#xff1a; http://ip:port/工程名/资源路径 2.2 在JavaWeb中…

EG网关串口连接台达PLC

EG网关串口连接台达PLC 前言&#xff1a;台达PLC是一款国产优秀的可编程控制器&#xff0c;广泛应于工业控制领域&#xff0c;是一款性能高&#xff0c;运行稳定的控制器。此次我们要把台达DVP-ES系列PLC通过modbus驱动连接到EMCP物联网云平台&#xff08;简称EMCP&#xff09;…

一些额外且好用的 icon 图库

一些额外且好用的 icon 图库 之前偶然逛到 最佳 Icon 图标库推荐&#xff0c;收藏等于学会&#xff0c;这个真的挺好用的&#xff0c;不过这里的 icon 都是和 React 组件绑定了&#xff0c;额外补充一些不和框架绑定的图库 font awesome 这个应该用的人满多的&#xff0c;算…

基于springboot实现时间管理系统项目【项目源码+论文说明】

基于springboot实现时间管理系统演示 摘要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括时间管理系统的网络应用&#xff0c;在外国时间管理系统已经是很普遍的方式&#xff0c;不过国内的管理系统可能还处于起步阶段。时…

KNN 和 SVM 图片分类 任务 代码及细节分享

使用KNN (K-最近邻) 方法进行图像分类也是一个常见的选择。以下是 使用sklearn的KNeighborsClassifier进行图像分类的Python脚本&#xff1a; import os import cv2 import numpy as np import logging from sklearn.neighbors import KNeighborsClassifier from sklearn.met…

jdbc 中 Statement 不能避免注入式漏洞(SQL注入漏洞)

注入式漏洞 也称为 SQL注入漏洞&#xff0c;是一种常见的应用程序安全漏洞。当应用程序将用户输入的数据直接 拼接 到SQL查询语句中&#xff0c;而未对输入进行有效的过滤和转义时&#xff0c;攻击者可通过构造恶意的输入来执行非法的SQL语句&#xff0c;从而实现对应用程序的攻…

esp32c3-microPython开发固件烧录用户手册

esp32c3-microPython开发固件烧录用户手册1.4 文章目录 esp32c3-microPython开发固件烧录用户手册1.4烧录所需硬件软件工具Thonnyflash_download_tools 插座与USB转TTL模块之间接线esp32-C3版本插座&#xff08;底板4针&#xff09; 下载对应的 MicroPython固件烧录MicroPython…

grafana InfluxDB returned error: error reading influxDB 400错误解决

问题&#xff1a; 如图提示错误解决 确认自己的docker容器是否配置了以下3个字段 DOCKER_INFLUXDB_INIT_USERNAMExxx DOCKER_INFLUXDB_INIT_PASSWORDyyy DOCKER_INFLUXDB_INIT_ADMIN_TOKENzzz 如果有&#xff0c;在grafana中需要添加header配置Header: Authorization , Value…

将自己本地项目上传到git,IDEA图文操作

文章目录 一、初始化git仓库二、gitee创建仓库三、输入自己仓库的地址四、在添加所修改的文件可能的错误 五、合并需上传文件六、上传参考文档 一、初始化git仓库 在自己的项目中&#xff0c;命令行中输入 git init二、gitee创建仓库 新建仓库 设置仓库参数&#xff0c;设置…

C语言的const函数修饰指针

文章目录 一、const函数的作用 int a 10; int *p ; p &a;从上面的代码分析&#xff0c;p 存放的就是a的地址&#xff0c; *p 存放的就是 a 的值。 一、const函数的作用 一旦使用了const函数修饰一个变量&#xff0c;那么这个变量就无法变化了。 所以下面三种情况&#…

分享一下在微信小程序里怎么添加会员充值功能

在微信小程序中添加会员充值功能&#xff0c;可以提升用户的消费体验&#xff0c;增加商家的销售收入。下面是一篇关于如何在微信小程序中添加会员充值功能的软文。 标题&#xff1a;微信小程序实现会员充值功能&#xff0c;提升用户忠诚度与销售收入 随着移动支付的普及&…

JavaSE 二叉树

目录 1 树型结构1.1 概念1.2 树的表示形式1.3 树的应用 2 二叉树2.1 概念2.2 二叉树的基本形态2.3 两种特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储2.6 二叉树的基本操作2.6.1 二叉树的遍历2.6.2 二叉树的基本操作 2.7 基础练习题2.7.1 二叉树的前序遍历2.7.2 二叉树中序遍历…

怎么防止U盘复制电脑文件

怎么防止U盘复制电脑文件 安企神U盘管理系统下载使用 说到防止U盘复制电脑文件也是一个老生常谈的话题了&#xff0c;因为U盘的主要目的是在不同设备之间传输文件。对于企业来说&#xff0c;有的重要信息是不能对外泄露的&#xff0c;出于安全考虑&#xff0c;企业往往是禁止…

SpringDoc上传附件或文件 - Swagger3

摘要 从Swagger2 升级到 Swagger3 之后发现对于附件出现了问题。 依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.7.0</version></dependency>问题描述 在Sw…