重生之我要精通JAVA--第五周笔记

news2024/12/24 0:32:47

文章目录

  • API
    • JDK7时间
      • Date时间类
      • Calendar
      • SimpleDateFormat 类
        • SimpleDateFormat 类作用
    • JDK8时间
      • Zoneld时区
    • 包装类
      • Integer成员方法
    • Arrays
  • Lambda表达式
    • 标准格式
    • 注意点
    • 好处
    • 省略写法
  • 集合进阶
    • Collection
    • 迭代器遍历
      • Collection集合获取迭代器
      • Iterator中的常用方法
      • 细节注意点
    • 增强for遍历
      • 格式
    • Lambda表达式遍历
    • List
      • 特点
      • 特有方法
    • 五种遍历方法
    • ArrayList集合底层原理
    • LinkedList集合
    • 泛型
      • 好处
      • 细节
      • 泛型类
      • 泛型方法
      • 泛型接口
    • 数据结构
      • 平衡二叉树(左旋)
      • 平衡二叉树(右旋)
      • 数据结构(平衡二叉树)需要旋转的四种情况
        • 1.左左:(1次旋转)
        • 2.左右:(2次旋转)
        • 3.右右:(1次旋转)
        • 4.右左:(2次旋转)
      • 红黑树
        • 数据结构(红黑树)红黑规则
        • 添加节点规则
    • Set
      • HashSet
        • 哈希值
        • 特点
        • HashsetJDK8以后底层原理
      • LinkedHashset底层原理
      • Treeset的特点
      • Treeset的两种比较方式
    • 双列集合
      • Map
      • HashMap
      • LinkedHashMap
      • TreeMap
        • 代码书写两种排序规则
      • 可变参数
      • 细节
      • Collections
    • 不可变集合
  • Stream流
    • 步骤
    • 中间方法
    • 终结方法
  • 方法引用
    • 引用成员方法
    • 方法引用的规则
    • 引用数组的构造方法
  • 异常
    • JVM默认处理异常的方式:
    • 捕获异常
      • 格式
      • 灵魂四问
    • Throwable的成员方法
    • 自定义异常
      • 步骤
  • File
    • 路径

API

JDK7时间

Date时间类

Date类是一个JDK写好的avabean类,用来描述时间,精确到毫秒
利用空参构造创建的对象,默认表示系统当前时间,
利用有参构造创建的对象,表示指定的时间

创建时间对象

Date date = new Date(); //系统当前时间
Date date =new Date(指定毫秒值); //时间原点开始加指定毫秒值后的时间

修改时间对象中的毫秒值:
void setTime(毫秒值);时间原点开始加指定毫秒值后的时间获取时间对象中的毫秒值
long getTime();

Calendar

  • Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
  • 细节:Calendar是一个抽象类,不能直接创建对象,

获取日历类对象方法:static Calendar getInstance()

国外月份减1

平闰年判断练习

  public static void method1() {
        Scanner sc = new Scanner(System.in);
        Calendar calendar = Calendar.getInstance();
        int year = sc.nextInt();
        calendar.set(year, 2, 1);
        calendar.add(Calendar.DATE, -1);
        int date = calendar.get(Calendar.DATE);
        if (date == 29) {
            System.out.println("闰年");
        } else {
            System.out.println("平年");
        }
    }

SimpleDateFormat 类

SimpleDateFormat 类作用
  • 格式化:把时间变成我们喜欢的格式。
  • 解析:把字符串表示的时间变成Date对象。
构造方法说明
public simpleDateFormat()构造一个simpleDateFormat,使用默认格式
public SimpleDateFormat(string pattern)构造一个simpleDateFormat,使用指定的格式
常用方法说明
public final string format(Date date)格式化(日期对象->字符串)
public Date parse(string source)解析(字符串 ->日期对象)
public class test02 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat();

        Date date1 = new Date();
        String s = sdf.format(date1);
        System.out.println(s);

        Date date2 = sdf.parse("2024/5/11 下午9:58");
        System.out.println(date2);
    }
}
public class test02 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = new Date();
        String s = sdf.format(date1);
        System.out.println(s);

        Date date2 = sdf.parse("2024-05-11 22:04:28");
        System.out.println(date2);
    }
}

sdf.parse只能解析sdf对应的格式

JDK8时间

  1. Date类
  2. 日期格式化类:SimpleDateFormat
  3. 日历类:Calendar
  4. 工具类

Zoneld时区

方法名说明
static Set\<string> getAvailableZoneIds()获取Java中支持的所有时区
static ZoneId systemDefault()获取系统默认时区
static ZoneId of(String zoneId)()获取一个指定时区

包装类

基本类型引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
方法名说明
public Integer(int value)根据传递的整数创建一个Integer对象
public Integer(string s)根据传递的字符串创建一个Integer对象
public static Integer valueof(int i)根据传递的整数创建一个Integer对象
public static Integer valueof(string s)根据传递的字符串创建一个Integer对象
public static Integer valueof(string s,int radix)根据传递的字符串和进制创建一个Integer对象

Integer成员方法

方法名说明
public static Sting toBinaryString(int i)得到二进制
public static String toOctalString(int i)得到八进制
public static String toHexString(int i)得到十六进制
public static int parselnt(String s)将字符串类型的整数转成int类型的整数

Arrays

操作数组的工具类

方法名说明
public static String toString(数组)把数组拼接成一个字符串
public static int binarySearch(数组, 查找的元素)二分查找法查找元素
public static int[] copyOf(原数组, 新数组长度)拷贝数组
public static int[] copyOfRange(原数组, 起始索引, 结束索引)拷贝数组(指定范围)
public static void fill(数组, 元素)填充数组
public static void sort(数组)按照默认方式进行数组排序
public static void sort(数组, 排序规则)按照指定的规则排序

Lambda表达式

标准格式

Arrays.sort(arr,(Integer ol,Integer o2)->{
	return o1 - o2;
	}
);

注意点

  • Lambda表达式可以用来简化匿名内部类的书写
  • Lambda表达式只能简化函数式接口的匿名内部类的写法
  • 函数式接口:
    有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@Functionalinterface注解

好处

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。

省略写法

核心:可推导,可省略

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略

image-20240513223720598

集合进阶

List系列集合:添加的元素是有序可重复有索引

Set系列集合:添加的元素是无序不重复无索引

Collection

方法名称说明
public boolean add(E e)把给定的对象添加到当前集合中
public void clear()清空集合中所有的元素
public boolean remove(E e)把给定的对象在当前集合中删除
public boolean contains(Object obj)判断当前集合中是否包含给定的对象
public boolean isEmpty()判断当前集合是否为空
public int size()返回集合中元素的个数/集合的长度

迭代器遍历

迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。

image-20240514132737331

Collection集合获取迭代器

方法名称说明
Iterator\<E> iterator()返回迭代器对象,默认指向当前集合的0索引

Iterator中的常用方法

方法名称说明
boolean hasNext()判断当前位置是否有元素,有元素返回true,没有元素返回false
E next()获取当前位置的元素,并将迭代器对象移向下一个位置

细节注意点

  1. 报错NoSuchElementException
  2. 迭代器遍历完毕,指针不会复位
  3. 循环中只能用一次next方法
  4. 迭代器遍历时,不能用集合的方法进行增加或者删除

增强for遍历

  • 增强for的底层就是迭代器,为了简化迭代器的代码书写的
  • 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
  • 所有的单列集合和数组才能用增强for进行遍历

格式

for (元素的数据类型 变量名 : 数组或者集合) {
    
}
for (String s : list) {
    System.out.println(s);
}

修改增强for中的变量,不会改变集合中原本的数据。

Lambda表达式遍历

得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

方法名称说明
default void forEach(Consumer<? super T> action):结合lambda遍历集合

List

特点

  • 有序:存和取的元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复

特有方法

  • Collection的方法List都继承了
  • List集合因为有索引,所以多了很多索引操作的方法
方法名称说明
void add(int index, E element)在集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index, E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素

五种遍历方法

  1. 迭代器遍历:在遍历的过程中需要删除元素,请使用迭代器
  2. 列表迭代器:在遍历的过程中需要添加元素,请使用列表迭代器
  3. 增强for遍历:仅仅想遍历,那么使用增强for或Lambda表达式
  4. Lambda表达式:同上
  5. 普通for:如果遍历的时候想操作索引,可以用普通for。

ArrayList集合底层原理

  1. 利用空参创建的集合,在底层创建一个默认长度为0的数组
  2. 添加第一个元素时,底层会创建一个新的长度为10的数组
  3. 存满时,会扩容1.5倍
  4. 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

image-20240513231320978

image-20240513231201455

LinkedList集合

  • 底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。
  • LinkedList本身多了很多直接操作首尾元素的特有API。
方法签名说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素

image-20240514131504648

泛型

泛型:是IDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查
泛型的格式:<数据类型>
注意:泛型只能支持引用数据类型

好处

  • 统一数据类型。
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

细节

  • 泛型中不能写基本数据类型
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型
  • 如果不写泛型,类型默认是Object

泛型类

使用场景:当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类

修饰符 class 类名<类型> {
    
}

public class ArrayList<E> {
    
}

泛型方法

方法中形参类型不确定时:
方案①:使用类名后面定义的泛型(所有方法都能用)
方案②:在方法申明上定义自己的泛型(只有本方法能用)

修饰符<类型> 返回值类型 方法名(类型 变量名){
    
}

public<T> void show(T t){
    
}

泛型接口

修饰符 interface 接口名<类型>{
    
}

public interface List<E>{
    
}

重点::如何使用一个带泛型的接口

方式1:实现类给出具体类型
方式2:实现类延续泛型,创建对象时再确定

数据结构

平衡二叉树(左旋)

确定支点:从添加的节点开始,不断的往父节点找不平衡的节点

  1. 以不平衡的点作为支点

  2. 把支点左旋降级,变成左子节点

  3. 晋升原来的右子节点

  4. 以不平衡的点作为支点

  5. 将根节点的右侧往左拉

  6. 原先的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右子节点

image-20240514153849795 image-20240514153954294

平衡二叉树(右旋)

  1. 以不平衡的点作为支点
  2. 就是将根节点的左侧往右拉
  3. 原先的左子节点变成新的父节点,并把多余的右子节点出让,给已经降级的根节点当左子节点

image-20240514154131736

image-20240514154214326

数据结构(平衡二叉树)需要旋转的四种情况

  1. 左左
  2. 左右
  3. 右右
  4. 右左
1.左左:(1次旋转)

当根节点左子树的左子树有节点插入,导致二叉树不平衡

image-20240514154530370

image-20240514154545511

2.左右:(2次旋转)

当根节点左子树的右子树有节点插入,导致二叉树不平衡

image-20240514154728774

image-20240514154826761

image-20240514154856111

3.右右:(1次旋转)

当根节点右子树的右子树有节点插入,导致二叉树不平衡

image-20240514155111034

image-20240514155140560

4.右左:(2次旋转)

当根节点右子树的左子树有节点插入,导致二叉树不平衡

image-20240514155312748

image-20240514155420205

image-20240514155439036

红黑树

  • 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构
  • 1972年出现,当时被称之为平衡二叉B树。后来,1978年被修改为如今的"红黑树"
  • 它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色
  • 每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的
数据结构(红黑树)红黑规则

①每一个节点或是红色的,或者是黑色的
②根节点必须是黑色
③如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的
④如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
⑤对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

添加节点规则

默认颜色:添加节点默认是红色的(效率高)

image-20240514161213066

Set

  • 无序:存取顺序不一致

  • 不重复:可以去除重复

  • 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素

  • Hashset:无序、不重复、无索引

  • LinkedHashset:有序、不重复、无索引

  • Treeset:可排序、不重复、无索引

HashSet

  • Hashset集合底层采取哈希表存储数据

  • 哈希表是一种对于增删改查数据性能都较好的结构

  • JDK8之前:数组+链表

  • JDK8开始:数组+链表+红黑树

哈希值
  • 根据hashcode方法算出来的int类型的整数
  • 该方法定义在Object类,所有对象都可以调用,默认使用地址值进行计算
  • 一般情况下,会重写hashCode方法,利用对象部的属性值计算哈希值
特点
  • 如果没有重写hashCode方法,不同对象计算出的哈希值是不同的
  • 如果已经重写hashCode方法,不同的对象只要属性值相同,计算出的哈希值就是一样的
  • 在小部分情况下,不同的属性值或者不同的地址值计算出来的哈希值也有可能一样(哈希碰撞)
HashsetJDK8以后底层原理
  1. 创建一个默认长度16,默认加载因为0.75的数组,数组名table

  2. 根据元素的哈希值跟数组的长度计算出应存入的位置

  3. 判断当前位置是否为null,如果是null直接存入

  4. 如果位置不为null,表示有元素,则调用equals方法比较属性值

    一样:不存----------不一样:存入数组,形成链表
    JDK8以前:新元素存入数组,老元素挂在新元素下面
    JDK8以后:新元素直接挂在老元素下面

IDK8以后,当链表长度超过8,而且数组长度大于等于64时,自动转换为红黑树

如果集合中存储的是自定义对象,必须要重写hashCode和eguals法

LinkedHashset底层原理

  • 有序、不重复、无索引。
  • 这里的有序指的是保证存储和取出的元素顺序一致
  • 原理:底层数据结构是依然哈希表,只是每个元素又额外的多了一个双链表的机制记录存储的顺序。

Treeset的特点

  • 不重复、无索引、可排序
  • 可排序:按照元素的默认规则(有小到大)排序
  • Treeset集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。

Treeset的两种比较方式

方式一:

默认排序/自然排序:Javabean类实现Comparable接口指定比较规则

方式二:

比较器排序:创建TreeSet对象时候,传递比较器Comparator指定规则

使用原则:默认使用第一种,如果第一种不能满足当前需求,就使用第二种

双列集合

① 双列集合一次需要存一对数据,分别为键和值
②键不能重复,值可以重复
③ 键和值是-一对应的,每一个键只能找到自己对应的值
④ 键+值这个整体 我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象"

Map

方法名称说明
V put(K key, V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数
  • put方法的细节:
    添加/覆盖
    在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回nu11
    在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回

HashMap

  • HashMap是Map里面的一个实现类
  • 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了
  • 特点都是由键决定的:无序、不重复、无索引

LinkedHashMap

  • 由键决定:有序不重复无索引
  • 这里的有序指的是保证存储和取出的元素顺序一致
  • 原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序

TreeMap

  • TreeMap跟Treeset底层原理一样,都是红黑树结构的。
  • 由键决定特性:不重复、无索引、可排序
  • 可排序:对键进行排序
  • 注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则
代码书写两种排序规则
  • 实现Comparable接口,指定比较规则。
  • 创建集合时传递Comparator比较器对象,指定比较规则。

可变参数

方法形参的个数是可以发生变化的,0,1,2,3…
格式:属性类型…名字
int…args

细节

  1. 在方法的形参中最多只能写一个可变参数
  2. 在方法的形参当中,如果出了可变参数以外,还有其他的形参,那么可变参数要写在最后

Collections

  • java.util.Collections:是集合工具类
  • 作用:Collections不是集合,而是集合的工具类,
方法名称说明
public static <T> boolean addAll(Collection<T> c, T... elements)批量添加元素
public static void shuffle(List<?> list)打乱List集合元素的顺序
public static <T> void sort(List<T> list)排序
public static <T> void sort(List<T> list, Comparator<? super T> c)根据指定的规则进行排序
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)以二分查找法查找元素
public static <T> void copy(List<? super T> dest, List<? extends T> src)拷贝集合中的元素
public static <T> void fill(List<? super T> list, T obj)使用指定的元素填充集合
public static <T> T max(Collection<? extends T> coll)获取最大值
public static <T> T min(Collection<? extends T> coll)获取最小值
public static void swap(List<?> list, int i, int j)交换集合中指定位置的元素

不可变集合

  • 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。
  • 当集合对象被不可信的库调用时,不可变形式是安全的。
方法名称说明
static <E> List<E> of(E...elements)创建一个具有指定元素的List集合对象
static <E> Set<E> of(E...elements)创建一个具有指定元素的Set集合对象
static <K, V> Map<K, V> of(E...elements)创建一个具有指定元素的Map集合对象

Stream流

结合了Lambda表达式,简化集合、数组的操作

步骤

  1. 先得到一条Stream流(流水线),并把数据放上去
  2. 利用Stream流中的API进行各种操作
获取方式方法名说明
单列集合default Stream<E> stream()Collection中的默认方法
双列集合无法直接使用stream流
数组public static <T> Stream<T> stream(T[] array)Arrays工具类中的静态方法
一堆零散数据public static <T> Stream<T> of(T… values)Stream接口中的静态方法

中间方法

名称说明
Stream<T> filter(Predicate<? super T> predicate)过滤
Stream<T> limit(long maxSize)获取前几个元素
Stream<T> skip(long n)跳过前几个元素
Stream<T> distinct()元素去重,依赖hashCodeequals方法
static <T> Stream<T> concat(Stream a, Stream b)合并a和b两个流为一个流
Stream<R> map(Function<T, R> mapper)转换流中的数据类型

注意

  1. 中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
  2. 修改Stream流中的数据,不会影响原来集合或者数组中的数据

终结方法

名称说明
void forEach(Consumer action)遍历
long count()统计
toArray()收集流中的数据,放到数组中
collect(Collector collector)收集流中的数据,放到集合中

toArray()

  1. 直接使用toArray()方法:
Object[] arr1 = list.stream().toArray();

将流中的元素按照其出现顺序,收集到一个Object类型的数组中。

  1. 使用toArray(IntFunction)方法:
String[] arr2 = list.stream().toArray(new IntFunction<String[]>() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
});

apply的形参:流中数据的个数,要跟数组的长度保持一致

apply的返回值:具体类型的数组

允许指定数组的长度,并根据需要为其分配内存。

它的作用是根据流中元素的数量创建一个指定类型的数组,然后将流中的元素按照其出现顺序放入数组中。

在这个例子中,我们实现了IntFunction接口,并覆盖了其中的apply()方法。这个方法接受一个整数参数,表示数组的长度。在apply()方法中,我们根据这个长度创建了一个String类型的数组,然后返回它。这个数组最终用于收集流中的元素

方法引用

image-20240516200137159

::为方法引用符

用法:类::方法名

引用成员方法

格式:对象::成员方法

  • 其他类:其他类对象::方法名
  • 本类:this::方法名
  • 父类:super::方法名

方法引用的规则

  1. 需要有函数式接口
  2. 被引用的方法必须已经存在
  3. 被引用方法的形参,需要跟抽象方的第二个形参到最后一个形参保持一致,返回值需要保持一致。
  4. 被引用方法的功能需要满足当前的需求

引用数组的构造方法

格式:数据类型[ ]::new
范例:int[ ]::new

image-20240517165729774

异常

image-20240517170720014

Error:代表的系统级别错误(属于严重问题)
系统一旦出现问题,sun公司会把这些错误封装成Error对象,
Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。

Exception:叫做异常,代表程序可能出现的问题,
我们通常会用Exception以及他的子类来封装程序出现的问题。

运行时异常:RuntimeException及其子类
编译阶段不会出现异常提醒,
运行时出现的异常(如:数组索引越界异常)。

JVM默认处理异常的方式:

  1. 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
  2. 程序停止执行,异常下面的代码不会再执行了

捕获异常

格式

try{
    可能出现异常的代码;
}catch(异常类名 变量名){
    异常的处理代码;
}

目的:当代码出现异常时,可以让程序继续往下执行。

image-20240517173204451

灵魂四问

image-20240517173805963

Throwable的成员方法

方法名称说明
public String getMessage()返回此 throwable 的详细消息字符串
public String toString()返回此可抛出的简短描述
public void printStackTrace()把异常的错误信息输出在控制台

自定义异常

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造

步骤

  1. 定义自定义异常类

    你可以创建一个继承自 ExceptionRuntimeException 的新类。继承 Exception 会创建一个受检异常(checked exception),继承 RuntimeException 会创建一个非受检异常(unchecked exception)。

    java复制代码// 自定义受检异常
    public class CustomCheckedException extends Exception {
        public CustomCheckedException(String message) {
            super(message);
        }
        
        public CustomCheckedException(String message, Throwable cause) {
            super(message, cause);
        }
    }
    
    // 自定义非受检异常
    public class CustomUncheckedException extends RuntimeException {
        public CustomUncheckedException(String message) {
            super(message);
        }
        
        public CustomUncheckedException(String message, Throwable cause) {
            super(message, cause);
        }
    }
    
  2. 使用自定义异常

    你可以在代码中抛出和捕获自定义异常。

    java复制代码public class Main {
        public static void main(String[] args) {
            try {
                methodThatThrowsCheckedException();
            } catch (CustomCheckedException e) {
                e.printStackTrace();
            }
    
            try {
                methodThatThrowsUncheckedException();
            } catch (CustomUncheckedException e) {
                e.printStackTrace();
            }
        }
    
        public static void methodThatThrowsCheckedException() throws CustomCheckedException {
            // 某些代码逻辑
            throw new CustomCheckedException("This is a custom checked exception");
        }
    
        public static void methodThatThrowsUncheckedException() {
            // 某些代码逻辑
            throw new CustomUncheckedException("This is a custom unchecked exception");
        }
    }
    

File

路径

相对路径

路径1:“a.txt”
路径2:“abc\\a.txt”

绝对路径

路径1:“c:\\a.txt”
路径2:“c:\\abc\\a.txt”

  • File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径
  • 这个路径可以是存在的,也允许是不存在的
方法名称说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child)根据父路径名对应文件对象和子路径名字符串创建文件对象

参考资料:黑马程序员Java零基础视频教程

已经到底啦!!

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

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

相关文章

【软考中级 软件设计师】计算机网络和安全

计算机网络和安全是软件设计师&#xff08;软考中级&#xff09;考试中的重要组成部分&#xff0c;它涵盖了网络基础、网络协议、网络架构、网络安全等多个方面。以下是一些核心概念和要点&#xff0c; 计算机网络基础 OSI七层模型&#xff1a;物理层、数据链路层、网络层、传…

【20天拿下Pytorch:Day 7】Dataset和DataLoader

文章目录 1. Dataset和DataLoader概述1.1 概要1.2 获取一个batch数据的步骤1.3 Dataset和DataLoader的功能分工1.4 Dataset和DataLoader的主要接口 2. 使用Dataset创建数据集2.1 根据Tensor创建数据集2.2 根据图片目录创建图片数据集2.3 创建自定义数据集 3. 使用DataLoader加载…

C++ TCP发送Socket数据

DEVC需要加入ws2_32库 #include <iostream> #include <winsock2.h>#pragma comment(lib, "ws2_32.lib")void sendData(const char* ip, int port, const char* data) {WSADATA wsaData;SOCKET sockfd;struct sockaddr_in server_addr;// 初始化Winsock…

打气球小游戏

1.气球往上飘 我们声明两个符号常量来作为窗体的长和宽,接着就是常规操作 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600#include<easyx.h> #include<stdio.h> int main() {initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();get…

php部分特性漏洞学习

php部分函数漏洞学习 简单总结一些我遇到的ctf中的php的一些函数或特性的漏洞&#xff0c;我刷题还是太少了&#xff0c;所以很多例子来自ctfshow&#xff0c;以后遇到相关赛题再更新 1.MD5和其他hash 弱类型比较 php中&#xff0c;有两中判断相等的符号&#xff0c;和&…

【Linux】进程信号及相关函数/系统调用的简单认识与使用

文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…

树莓派 Raspberry Pi M.2 HAT+ 现已发售!原理图流出!

​Raspberry Pi M.2 HAT 使您能够将 M.2 M-key 外设&#xff08;如 NVMe 驱动器和人工智能加速器&#xff09;连接到 Raspberry Pi 5。它能够提供与这些外设之间的快数据传输&#xff08;高达 500 MB/s&#xff09;&#xff0c;现在就可以从树莓派的授权经销商网络购买&#xf…

智能网关和交换机在智慧路灯杆上的用途差别

智慧路灯杆是智能城市建设中的一个重要组成部分&#xff0c;它整合了智能照明、视频监控、交通管理、环境监测、网络覆盖、信息发布、一键告警等多种功能。针对智慧路灯杆的使用场景&#xff0c;智能网关和交换机各自发挥着不同的作用&#xff0c;并且拥有各自的优缺点&#xf…

5.14.3 UNETR:用于 3D 医学图像分割的 Transformers

具有收缩和扩展路径的全卷积神经网络 (FCNN) 在大多数医学图像分割应用中表现出了突出的作用。在 FCNN 中&#xff0c;编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用&#xff0c;这些特征和上下文表示可用于解码器的语义输出预测。 在FCNN中&#xff0c;收缩…

包装类..

定义&#xff1a;基本数据类型对应的对象。 如何获取包装类&#xff1a;直接赋值即可&#xff1b;Integer i10; 其中的一个成员方法&#xff1a; public static int parseInt(String s)——把字符串类型的整数转成int 类型的整数。 8种包装类中&#xff0c;除了character都…

力扣刷题---1748.唯一元素的和【简单】

题目描述 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,2] 输出&#xff1a;4 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4 。 示例 2&#xff1a;…

单词可交互的弧形文本

在一个项目中&#xff0c;要求把少儿读本做成电子教材呈现出来&#xff0c;电子书的排版要求跟纸质书一致。其中&#xff0c;英语书有个需求&#xff1a;书中有些不规则排版的文本&#xff08;如下图所示&#xff09;&#xff0c;当随书音频播放时&#xff0c;被读到的文本要求…

注意力机制篇 | MSFE:即插即用的多尺度滑窗注意力(附源码实现)

前言:Hello大家好,我是小哥谈。多尺度滑窗注意力(Multi-Scale Sliding Window Attention,MSFE)是一种用于处理图像的深度学习模型。它通过引入多尺度特征提取和滑窗注意力机制来提高图像识别的准确性。在MSFE中,模型采用多尺度卷积神经网络来提取图像的特征,然后使用滑窗…

同旺科技 FLUKE ADPT 隔离版发布 ---- 2

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B 正面&#xff1a; 反面&#xff1a; 侧面&#xff1a; 开孔位置&#xff08;可…

一种综合评价及决策方法:层次分析法AHP

大家好&#xff0c;层次分析法(Analytic Hierarchy Process&#xff0c;AHP)是一种多准则决策方法&#xff0c;它帮助决策者处理复杂的决策问题&#xff0c;将其分解成层次结构&#xff0c;然后通过两两比较来确定各个层次的因素之间的相对重要性。这种分析方式允许决策者对问题…

抖店,今年入场还有机会吗?从客观角度分析!

大家好&#xff0c;我是电商小V 伴随着短视频平台的兴起&#xff0c;也慢慢的步入了电商市场&#xff0c;成为了一个新的电商模式&#xff0c;抖音小店就是依靠着短视频达人带货的流量模式&#xff0c;可以说一直处于红利期&#xff0c;享受着这个短视频风口&#xff0c;也是吸…

前端更改线上请求地址

由于后台接口更改 , 线上请求地址需从 /api/api/ 改成 /api/ , 需实现的效果如下图 1 在原本的vite.config.js中将前端做的端口转发内容更改 , 更改一行即可 import { defineConfig } from vite import react from vitejs/plugin-react import path from path import * as fs …

C语言指针相关知识(第四篇章)(非常详细版)

文章目录 前言一、什么是回调函数二、qsort函数的介绍(默认升序排序)三、qsort函数的模拟实现&#xff08;通过冒泡排序&#xff09;总结 前言 本文介绍了回调函数&#xff0c;qsort函数的使用&#xff0c;以用冒泡排序来模拟实现qsort函数 提示&#xff1a;以下是本篇文章正文…

大语言模型量化方法对比:GPTQ、GGUF、AWQ 包括显存和速度

GPTQ: Post-Training Quantization for GPT Models GPTQ是一种4位量化的训练后量化(PTQ)方法&#xff0c;主要关注GPU推理和性能。 该方法背后的思想是&#xff0c;尝试通过最小化该权重的均方误差将所有权重压缩到4位。在推理过程中&#xff0c;它将动态地将其权重去量化为f…

【wvp】获取丢包及码率等参数

目录 设计 测试 swagger 设计 /** * 获取推流过程中的bytesSpeed,loss等统计信息 * 方案1&#xff1a;每个app stream 一个线程&#xff0c;定时获取统计信息。当subscribe 时&#xff0c;进行“增加&#xff1b;修改&#xff1b;加入队列”操作。 * 缺点&#xff1a; 占用…