javaSE基础进阶知识笔记4——异常

文章展示了Java中如何创建不可变集合,以及从JDK9开始支持的特性。接着详细介绍了Stream流的使用,包括过滤、映射、限制、跳过等操作,并演示了如何从集合、Map和数组中获取Stream。此外,文章还讨论了异常处理的基本概念,如编译时异常和运行时异常的处理机制,并提供了自定义异常的例子。
摘要由CSDN通过智能技术生成

创建不可变集合

jdk9开始支持

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

package org.example.d4_dmeo;

import java.util.List;

public class Demo2 {
    public static void main(String[] args) {
        List<Double> list=List.of(23.0,22.6,22.4);
        System.out.println(list);
        //其余一样
    }
}

stream流

stream流的概述

在这里插入图片描述

在这里插入图片描述

package org.example.d1_stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo1 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌","张三丰","孙悟空","张强");
/*
        List<String> list1=new ArrayList<>();
        //找出姓张的
        for (String s : list) {
            if (s.startsWith("张")){
                list1.add(s);
            }
        }
        System.out.println(list1);

        //找出三个字符的
        List<String> list2=new ArrayList<>();
        for (String s : list1) {
            if (s.length()==3){
                list2.add(s);
            }
        }
        System.out.println(list2);
        */

        //使用stream流
        list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
    }
}

stream流的获取

在这里插入图片描述
在这里插入图片描述

package org.example.d1_stream;

import java.util.*;
import java.util.stream.Stream;

public class Demo2 {
    public static void main(String[] args) {
        System.out.println("===============Collection集合获取流=====================");
        Collection<String> list=new ArrayList<>();
        Stream<String> stream = list.stream();
        System.out.println("=========================Map集合获取流====================");
        Map<String,Integer> map=new HashMap<>();
        //键流
        Stream<String> stream1 = map.keySet().stream();
        //值流
        Stream<Integer> stream2 = map.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> stream3 = map.entrySet().stream();
        System.out.println("=======================数组获取流==========================");
        String[] s={"孙悟空","猪八戒","沙和尚","唐僧"};
        Stream<String> stream4 = Arrays.stream(s);
        Stream<String> s1 = Stream.of(s);
    }
}

stream流的常用API

在这里插入图片描述
在这里插入图片描述

package org.example.d1_stream;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class Demo3 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌","张三丰","孙悟空","张强");
/*
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        }).forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        */
        list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
        System.out.println(list.stream().filter(s -> s.length() == 3).count());
        list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
        list.stream().filter(s->s.startsWith("张")).skip(2).forEach(s -> System.out.println(s));

        //Map加工方法
        //给集合元素前面都加上一个:黑马的
        /*
        list.stream().map(new Function<String, Object>() {
            @Override
            public Object apply(String s) {
                return "黑马的"+s;
            }
        }).forEach(s-> System.out.println(s));
        */
        list.stream().map(s -> "黑马的"+s).forEach(s -> System.out.println(s));


        //把所有的名称都加工成学生对象
        list.stream().map(s -> new Student(s)).forEach(s -> System.out.println(s));

        //合并流
        Stream<String> s1=list.stream().filter(s -> s.startsWith("张"));
        Stream<String> s2=Stream.of("JAVA1","JAVA2");
        Stream<String> concat = Stream.concat(s1, s2);
        concat.distinct().forEach(s -> System.out.println(s));
        //distinct()方法是去重复
    }
}

收集stream流

在这里插入图片描述
在这里插入图片描述

package org.example.d1_stream;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demo2 {
    public static void main(String[] args) {
        System.out.println("===============Collection集合获取流=====================");
        Collection<String> list=new ArrayList<>();
        Stream<String> stream = list.stream();
//        List<String> list1=stream.collect(Collectors.toList());
//        System.out.println(list1);
        //流只能使用一次
        Set<String> set=stream.collect(Collectors.toSet());
        System.out.println(set);

        Object[] objects=stream.toArray();
        System.out.println(Arrays.toString(objects));

        
    }
}

异常处理

异常概述、体系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见运行时异常

在这里插入图片描述

常见编译时异常

在这里插入图片描述

异常的默认处理流程

在这里插入图片描述

编译时异常的处理机制

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package org.example.d2_exception;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo1 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        parseTime("2021-11-12 11:22:30");
        System.out.println("程序结束。。。");
    }
    public static void parseTime(String date){
        try {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            Date date1=sdf.parse(date);
            System.out.println(date1);

            InputStream is=new FileInputStream("E:/meinv.jpg");
        } catch (ParseException e) {
            System.out.println("日期格式不对");
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

package org.example.d2_exception;

import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo2 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        try {
            parseTime("2021-11-12 11:22:30");
            System.out.println("方法成功");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("方法错误");
        }
        System.out.println("程序结束。。。");
    }

    public static void parseTime(String date) throws Exception{

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date date1 = sdf.parse(date);
        System.out.println(date1);

        InputStream is = new FileInputStream("E:/meinv.jpg");

    }
}

运行时异常的处理机制

在这里插入图片描述
程序会自动抛出运行时异常,只需在最外层(main方法中)调用try/catch进行处理,保证程序正常运行即可。

异常案例

在这里插入图片描述

package org.example.d2_exception;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (true){
            try {
                System.out.println("请您输入价格:");
                String priceStr=sc.nextLine();
                double price=Double.valueOf(priceStr);
                if (price>0){
                    System.out.println(price+"价格正确");
                    break;
                }else {
                    System.out.println("请重新输入,价格不能为负数");
                }
            } catch (NumberFormatException e) {
                System.out.println("请输入合法的价格");
            }
        }
    }
}

自定义异常

在这里插入图片描述
在这里插入图片描述

package org.example.d2_exception;

public class AgeIlLegalException extends Exception{
    public AgeIlLegalException() {
    }

    public AgeIlLegalException(String message) {
        super(message);
    }
}

package org.example.d2_exception;

public class Demo4 {
    public static void main(String[] args) {
        try {
            checkAge(124);
        } catch (AgeIlLegalException e) {
            e.printStackTrace();
        }
    }

    public static void checkAge(int age) throws AgeIlLegalException {

        if (age < 0 || age > 100)
            throw new AgeIlLegalException(age + " is illLegal");
        else {
            System.out.println("年龄合法,推荐产品给其购买");
        }
    }
}

注意

  • throw: 在方法内部直接创建一个异常对象,并从此点抛出
  • throws:用在方法申明上,抛出方法内部的异常

参考视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值