Java 学习--黑马徐老师一--200

总结:
类名的首字母大写

方法55-62
return在无返回值的方法中不需要写;

返回数组的索引

public class method1 {
    public static void main(String[] args) {
        int[] arr = {1, 4, 7, 9};
        System.out.println(getIndex(arr, 8));
    }

    public static int getIndex(int[] arr, int n) {
        for (int i = 0; i < arr.length; i++) {
            if (n == arr[i]) {
                return i;
            }
        }
        return -1;
    }
}

判断两个整型数组是否相等

public class method1 {
    public static void main(String[] args) {
        int[] arr1 = {1, 4, 9, 7};
        int[] arr2 = {1, 4, 9, 7};
        System.out.println(isSame(arr1, arr2));
        System.out.println(compare(arr1, arr2));
    }

    public static boolean compare(int[] arr1, int[] arr2) {
        if (arr1.length == arr2.length) {
            for (int i = 0; i < arr1.length; i++) {
                if (arr1[i] != arr2[i]) {
                    return false;
                }
            }
            return true;
        } else {
            return false;
        }
    }

    public static boolean isSame(int[] arr1, int[] arr2) {
        if (arr1.length != arr2.length) { //先判断长度不相等就return false
            return false;
        } else {
            for (int i = 0; i < arr1.length; i++) {
                if (arr1[i] != arr2[i]) {
                    return false;//数组对应位置的值进行比较,不等就返回false
                }
            }
            return true;
        }
    }
}

方法重载
在这里插入图片描述
return关键字的使用
在这里插入图片描述
在这里插入图片描述
63-69编程训练
在这里插入图片描述
在这里插入图片描述

public class test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票原价");
        double money = sc.nextDouble();
        System.out.println("请输入机票的月份1-12");
        int month = sc.nextInt();
        System.out.println("请输入舱位类型");
        String type = sc.next();
        System.out.println(calc(money, month, type));
    }

    /**
     * 定义方法按接受信息统计优惠价格
     */
    public static double calc(double money, int month, String type) {
        if (month >= 5 && month <= 10) {
            switch (type) {
                case "头等舱":
                    money *= 0.9;
                    break;
                case "经济舱":
                    money *= 0.85;
                    break;
                default:
                    System.out.println("输入的舱位类型有误");
                    money = -1; //表示当前无法计算价格
            }
        } else if (month == 11 || month == 12 || month >= 1 && month <= 4) {
            switch (type) {
                case "头等舱":
                    money *= 0.7;
                    break;
                case "经济舱":
                    money *= 0.65;
                    break;
                default:
                    System.out.println("输入的舱位类型有误");
                    money = -1; //表示当前无法计算价格
            }

        } else {
            System.out.println("您输入的月份有误");
            money = -1; //表示当前无法计算价格
        }
        return money;
    }
}

在这里插入图片描述

public class test2 {
    public static void main(String[] args) {
        for (int i = 101; i < 200; i++) {
            //信号位标记
            boolean flag = true;//开始认为是素数
            //2在这些数中找素数
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    flag = false;
                    break; //结束循环
                }
            }
            //3输出素数
            if (flag) {
                System.out.println(i + "\t");
            }
        }
    }
}

在这里插入图片描述

public class test3 {
    public static void main(String[] args) {
        System.out.println(creatCode(5));
    }

    public static String creatCode(int n) {
        String code = "";
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            int type = r.nextInt(3);//0 ,1,2
            switch (type) {
                case 0:
                    char ch = (char) (r.nextInt(26) + 65);
                    code += ch;
                    //生成大写字符
                    break;
                case 1:
                    char ch1 = (char) (r.nextInt(26) + 97);
                    code += ch1;
                    break;
                case 2:
                    code += r.nextInt(10);
                    break;

            }
        }
        return code;
    }
}

数组反转

public class test5 {
    public static void main(String[] args) {
        int[] arr = {1, 9, 8, 3};
        jiaohuan(arr);
        get(arr);

    }

    public static int[] jiaohuan(int[] arr) {
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
        return arr;
    }

    public static void get(int[] arr) {
        if (arr != null && arr.length > 0) {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                if (i == arr.length - 1) {
                    sb.append(arr[i]);
                } else {
                    sb.append(arr[i]);
                    sb.append(",");
                }

            }
            sb.append("]");
            System.out.println(sb);
        }
    }
}

70-77面向对象
面向对象案例

public class TestMovie {
    public static void main(String[] args) {
//        Movie m1 = new Movie("长津湖",9.7,"wujing");
        Movie m2 = new Movie("长津湖2", 9.2, "wu2");
        Movie m3 = new Movie("长津湖3", 9.3, "wu3");
        System.out.println(m2.getClass());
        System.out.println(m2.getClass().getName());
        System.out.println(m2.getClass().getSimpleName());

        //定义一个电影的数组,存储电影的对象
        // arr[] arrs = new arr[3];
        Movie[] movies = new Movie[3];
        movies[0] = new Movie("长津湖", 9.7, "wujing");
        movies[1] = m2;
        movies[2] = m3;
        for (int i = 0; i < movies.length; i++) {
            System.out.println(movies[i]); //取得是地址
            System.out.print(movies[i].getName() + "\t");
            System.out.print(movies[i].getScore() + "\t");
            System.out.print(movies[i].getActor() + "\t");
            System.out.println("-------------");

        }
    }
}
import java.util.ArrayList;

public class TestMovie2 {
    public static void main(String[] args) {
        Movie m1 = new Movie("长津湖", 9.7, "wujing");
        Movie m2 = new Movie("长津湖2", 9.2, "wu2");
        Movie m3 = new Movie("长津湖3", 9.3, "wu3");
        ArrayList<Movie> movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        System.out.println(movies); //打印的是地址
        for (int i = 0; i < movies.size(); i++) {
            System.out.println(movies.get(i).getName());
        }
    }
}
package xulaoshi.demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

public class TestMovie3 {
    public static void main(String[] args) {
        Movie m1 = new Movie("长津湖", 9.7, "wujing");
        Movie m2 = new Movie("长津湖2", 9.2, "wu2");
        Movie m3 = new Movie("长津湖3", 9.3, "wu3");
        Collection<Movie> movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        movies.forEach(new Consumer<Movie>() {
            @Override
            public void accept(Movie movie) {
                System.out.println(movie.getName());
            }
        });

        movies.forEach(movie -> System.out.println(movie.getName()));
    }
}

package xulaoshi.demo;

public class Movie {
    private String name;
    private Double score;
    private String actor;

    public Movie(String name, Double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public Movie() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

78-85 API String&ArrayList
在这里插入图片描述
常用stringAPI
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

public class TestString {
    public static void main(String[] args) {
        char[] ch = {'a', 'b'};
        String s = new String(ch);
        System.out.println(s); //ab
    }
}

随机生成验证码

public class TestString {
    public static void main(String[] args) {
        //定义一个可能出现的字符信息
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        //循环5次,每次生成一个随机
        String code = "";
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            int index = r.nextInt(data.length());
            char ch = data.charAt(index);
            code += ch;
        }
        System.out.println(code);
    }
}

模拟用户登录
在这里插入图片描述
手机号屏蔽
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

遍历并删除数据

package xulaoshi.api;

import java.util.ArrayList;

public class TestList {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(23);
        list.add(56);
        list.add(46);
        list.add(96);
        list.add(22);
        list.add(21);
        list.add(576);
        System.out.println(list);

        for (int i = 0; i < list.size(); i++) {
            int score = list.get(i);
            if (score < 50) {
                list.remove(i);
                i--; //删除成功必须往前退一步
            }

        }
        System.out.println(list);

        for (int i = list.size() - 1; i >= 0; i--) {
            int score = list.get(i);
            if (score < 50) {
                list.remove(i);
            }
        }
        System.out.println(list);
    }
}

在这里插入图片描述

package xulaoshi.api;

import java.util.ArrayList;
import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("01", "xiaoming", 20, "class1"));
        students.add(new Student("02", "xiaom2", 22, "class2"));
        students.add(new Student("03", "xiaom3", 23, "class3"));
        students.add(new Student("04", "xiaom4", 24, "class4"));
        //遍历学生信息
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println(s.getStudyNumber() + "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName());
        }
        //定义方法完成学号的搜索功能
        Scanner sc = new Scanner(System.in);
        while (true) {  //死循环,可以无数次查询
            System.out.println("请您输入学号查询学生对象");
            String studyNumber = sc.next();
            //调用方法查询
            Student s = getStudentById(students, studyNumber);
            //判断是否存在学生对象地址
            if (s == null) {
                System.out.println("对不起,查无此人");
            } else {
                System.out.println("您查询的信息如下");
                System.out.println(s);
                System.out.println(s.getStudyNumber() + "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName());
            }
        }

    }

    /**
     * 根据学生的学号,查询学生对象返回
     *
     * @param students    存储全部学生对象的集合
     * @param studyNumber 搜索的学生的学号
     * @return 学生对象|null
     */
    public static Student getStudentById(ArrayList<Student> students, String studyNumber) {
        //遍历学生对象
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            //询问当前遍历的学号是否是要找的学号
            if (s.getStudyNumber().equals(studyNumber)) {
                //这个s代表的学生对象,就是要找的,返回他
                return s;
            }
        }
        //查无此人
        return null;

    }
}

93-95面向对象进阶课程
在这里插入图片描述
96
在这里插入图片描述
在这里插入图片描述

package d1;

public class Student {
    /**
     * 实例成员变量,误static修饰,属于对象
     */
    private String name;

    /**
     * 静态成员方法,有static修饰,归属于类,可以被共享使用,用类名或者对象名都可以访问
     */
    public static int getMax(int age1, int age2) {
        return age1 > age2 ? age1 : age2;
    }

    /**
     * 实例方法时属于对象的,只能用对象触发访问
     */
    public void study() {
        System.out.println(name);
    }

    public static void main(String[] args) {
        //1类名.静态成员方法
        System.out.println(Student.getMax(1,2));
        //注意,同一个类中,访问静态方法类名可以不写,
        System.out.println(getMax(3,9));

        //2对象要用实例方法
        Student s = new Student();
        s.name = "lily";
        s.study();
    }

}

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

在这里插入图片描述

package d2;

import java.util.Random;

/**
 * 工具类
 */
public class Utils {
    /**
     * 注意:由于工具类无需创建对象,所以把其构造器私有化显得专业
     */
    private Utils(){}
    /**
     * 静态方法
     */
    public static String createVerifyCode(int n) {
        //开发一个验证码
        //1定义一个变量记住验证码
        String code = "";
        //2定义一个变量记住全部验证码字符
        String data = "abcdefghijkABCDEFGHIJK0123456789";
        //3定义一个循环生成几个随机索引,去得到几个字符
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            //4获取随机索引对应的字符,链接给code
            int index = r.nextInt(data.length());
            code = code + data.charAt(index);
        }
        System.out.println("验证码:" + code);
        return code;
    }

    public static void main(String[] args) {
        createVerifyCode(3);
    }
}


package d3;

/**
 * 完成数组工具类的设计
 */
public class ArrayUtils {
    /**
     * 私有构造器
     */
    private ArrayUtils() {
    }

    /**
     * 工具方法:静态方法
     */
    public static String toString(int[] arr) {
        //1一些校验
        if (arr == null) {
            return null;
        }
        //2拼接内容并返回,兼容arr=[]
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            result += (i == arr.length - 1 ? arr[i] : arr[i] + ",");
        }
        result += "]";
        return result;
    }

    public static void main(String[] args) {
        int[] arr = null;
        int[] arr1 = {};
        int[] arr2 = {1, 2, 3};
        System.out.println(ArrayUtils.toString(arr));  //null
        System.out.println(ArrayUtils.toString(arr1));  //[]
        System.out.println(toString(arr2));  //[1,2,3]
    }
}

99代码块
在这里插入图片描述
在这里插入图片描述

package d3;


import java.util.ArrayList;

public class StaticTest {
    /**
     * 定义一个静态集合,因为这个集合只要加载一次,系统也只需要一副牌
     */
    public static ArrayList<String> cards = new ArrayList<String>();

    /**
     * 在main方法之前,把54张牌加载进去,后续游戏就可以直接使用了
     */
    static {
        //3正式做牌,放大集合里去
        //定义一个数组存储点数,类型确定,个数确定
        String[] sizes = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        String[] colors = {"♥", "♠", "♦", "♣"};
        //遍历点数,四个3就放一起了
        for (int i = 0; i < sizes.length; i++) {
            //sizes[i]
            //遍历花色
            for (int j = 0; j < colors.length; j++) {
                //colors[j]
                //一张牌
                String card = sizes[i] + colors[j];
                //把牌添加到集合里去
                cards.add(card);
            }

        }
        //单独加入大王,小王
        cards.add("🃏大");
        cards.add("🃏小");
    }

    public static void main(String[] args) {
        //模拟游戏启动前,初始化54张牌
        System.out.println("新牌" + cards);
    }
}

100在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
103-104
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
105
在这里插入图片描述
106
在这里插入图片描述
107
在这里插入图片描述
108
在这里插入图片描述
109
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
抽象类案例
在这里插入图片描述

package d7_abstract;

/**
 * 抽象父类
 */
public abstract class Card {
    private String name;  //主人名称
    private double money;

    /**
     * 每个子类一定要支付,但是支付情况不一样,所以父类把支付定义成抽象方法,交给具体子类实现
     */
    public abstract void pay(double moneyPay);

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}

package d7_abstract;

public class GoldCard extends Card {
    @Override
    public void pay(double moneyPay) {
        //优惠后的金额计算出来
        double rs = moneyPay * 0.88;
        double lastMoney = getMoney() - rs;
        System.out.println(getName() + "当前账户总金额" + getMoney() + ",当前消费了" + rs + ",消费后剩余" + lastMoney);
        setMoney(lastMoney);  //更新当前账户余额
    }
}

package d7_abstract;

public class Test {
    public static void main(String[] args) {
        GoldCard c = new GoldCard();
        c.setMoney(10000);
        c.setName("lily");
        c.pay(300);
        System.out.println("余额" + c.getMoney());
    }
}

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

在这里插入图片描述

在这里插入图片描述
public final static handle ,模板方法需要用final关键字修饰,因为模板方法不希望被重写
在这里插入图片描述
111接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package d11;

public interface SportMan {
    public void run();

    void competition();

}

package d11;

public interface Law {
    void rule();

}

package d11;

/**
 * 实现类,子类
 */
public class PingPangMan implements SportMan,Law{
    private String name;

    public PingPangMan(String name) {
        this.name = name;
    }

    @Override
    public void rule() {
        System.out.println(name+"需要遵守法律");
    }

    @Override
    public void run() {
        System.out.println(name+"需要跑步");
    }

    @Override
    public void competition() {
        System.out.println(name+"需要比赛");
    }
}

package d11;

public class Test {
    public static void main(String[] args) {
        PingPangMan p = new PingPangMan("zhang");
        p.rule();
        p.run();
        p.competition();
    }
}

接口多继承,整合多个接口为一个接口,便于子类实现

package d11;

public interface Law {
    void rule();

}

package d11;

public interface People {
    void eat();
}

package d11;

public interface SportMan extends Law,People{
    public void run();

    void competition();

}

package d11;

/**
 * 实现类
 */
//public class BasketMan implements People,Law,SportMan{
public class BasketMan implements SportMan{
    @Override
    public void rule() {

    }

    @Override
    public void eat() {

    }

    @Override
    public void run() {

    }

    @Override
    public void competition() {

    }
}

112-113
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
113-114
多态综合案例
在这里插入图片描述

package d4;

/**
 * usb接口规范
 */
public interface USB {
    //接入 拔出
    void connect();
    void unconnect();
}

package d4;

/**
 * 实现类
 */
public class KeyBoard implements USB{
    private String name;

    public KeyBoard(String name) {
        this.name = name;
    }

    @Override
    public void connect() {
        System.out.println(name+"接入");
    }

    /**
     * 独有功能
     */
    public void keyDown(){
        System.out.println(name+"独有功能");
    }
    @Override
    public void unconnect() {
        System.out.println(name+"拔出");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package d4;

public class Mouse implements USB{
    private String name;

    public Mouse(String name) {
        this.name = name;
    }

    @Override
    public void connect() {
        System.out.println(name+"接入");
    }

    /**
     * 独有功能
     */
    public void dbClick(){
        System.out.println(name+"鼠标双击");
    }
    @Override
    public void unconnect() {
        System.out.println(name+"拔出");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package d4;

public class Computer {
    private String name;

    public Computer(String name) {
        this.name = name;
    }
    public void start(){
        System.out.println(name+"开机了");
    }

    /**
     * 提供安装USB的入口
     */
    public void installUSB(USB usb){
        //多态   usb==鼠标还是键盘
        usb.connect();
        //独有功能,先判断,在强转
        if (usb instanceof KeyBoard){
            KeyBoard k=(KeyBoard) usb;
            k.keyDown();
        }else if (usb instanceof Mouse){
            Mouse m= (Mouse) usb;
            m.dbClick();
        }
        usb.unconnect();
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package d4;

public class Test {
    public static void main(String[] args) {
        //创建电脑对象
        Computer c = new Computer("电脑1");
        c.start();
        //2创建鼠标对象,键盘对象
        USB u = new KeyBoard("键盘1");
        c.installUSB(u);
        USB m = new Mouse("罗技");
        c.installUSB(m);
    }
}

115 内部类
在这里插入图片描述
116 匿名内部类
在这里插入图片描述

package d8;

public class Test {
    public static void main(String[] args) {
//        Animal a = new Tiger();
//        a.run();

        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("run run");
            }
        };
        a.run();
    }

}
//class Tiger extends Animal{
//    @Override
//    public void run() {
//        System.out.println("老虎跑的快");
//    }
//}

abstract class Animal{
    public abstract void run();
}

之前的写法

package d8;

public class Test2 {
    public static void main(String[] args) {
        Student student = new Student();
        go(student);
    }
    /**
     * 学生、老师、运动员可以一起参加游泳
     */
    public static void go(Swimming s){
        System.out.println("开始");
        s.swim();
    }
}
class Student implements Swimming{
    @Override
    public void swim() {
        System.out.println("比赛开始");
    }
}
interface Swimming{
    void swim();
}

匿名内部类

package d8;

public class Test2 {
    public static void main(String[] args) {
        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生游泳");
            }
        };
        go(s);
       
        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("teacher游泳");
            }
        });
    }
    /**
     * 学生、老师、运动员可以一起参加游泳
     */
    public static void go(Swimming s){
        System.out.println("开始");
        s.swim();
    }
}

interface Swimming{
    void swim();
}

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

package d9;

public class Student {
    private String name;
    private char sex;
    private int age;

    public Student() {
    }

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //重写object方法,可以打印出子类内容
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

    /**
     * 自己重写equals,自己指定规则,两个对象的内容一样,就认为时相等的
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (sex != student.sex) return false;
        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

}

package d9;

/**
 * 掌握object类中toString方法的使用
 */
public class Test {
    public static void main(String[] args) {
        Student s = new Student("lily", '女', 20);
        String res = s.toString();
        System.out.println(res);
        //默认可以省略toString()不写,都是返回地址
        System.out.println(s.toString());
        System.out.println(s);
        Student s2 = new Student("lily", '女', 20);
        //比较地址
        System.out.println(s.equals(s2));
        System.out.println(s==s2);
    }
}

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

package d10;

import java.util.Objects;

public class TestObject {
    public static void main(String[] args) {
        String s1=null;
        String s2= new String("hello");
        System.out.println(s1.equals(s2));  //可能出现空指针异常
        System.out.println(Objects.equals(s1,s2));
        //两种写法一样
        System.out.println(Objects.isNull(s1));  //true
        System.out.println(s1==null);  //true
    }
}

118 stringbuilder
在这里插入图片描述

package d10;

public class StringBuilderTest {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("s");
        sb.append(2);
        System.out.println(sb);
        //支持链式编程
        sb.append(3).append("r");
        System.out.println(sb);  //s23r
        //反转
        sb.reverse().append(110);
        System.out.println(sb);  //r32s110
        System.out.println(sb.length());  //7
        //恢复成String,因为一些场景传参需要String
        String s = sb.toString();
        check(s);  //r32s110
    }

    public static void check(String data) {
        System.out.println(data);
    }
}

package d10;

public class StringBuilderTest2 {
    public static void main(String[] args) {
        int[] arr1=null;
        System.out.println(toStringMethod(arr1));  //null
        int[] arr2 ={1,4,7,8};
        System.out.println(toStringMethod(arr2));  //[1,4,7,8]

    }
    /**
     * 定义一个方法接收整形数组,返回数组内容格式
     */
    public static String toStringMethod(int[] arr){
        if (arr!=null){
            //开始拼接数组
            StringBuilder sb = new StringBuilder("[");

            for (int i = 0; i < arr.length; i++) {
                sb.append(arr[i]).append(i==arr.length-1? "":",");
            }
            sb.append("]");
            return sb.toString();
        }else {
            return null;
        }
    }
}

119 math system
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

package d10;

import java.util.Date;

public class DataDemo {
    public static void main(String[] args) {
        //创建一个Date类对象,代表系统此刻日期时间对象
        Date d = new Date();
        System.out.println(d);
        //获取时间毫秒值
        long time =d.getTime();
        System.out.println(time);
        
        System.out.println("---------计算当前时间往后走1小时121秒后的时间-------------");
        Date d1 = new Date();
        System.out.println(d1);
        //得到当前时间的毫秒值
        long time2= System.currentTimeMillis();
        time2+=(60*60+121)*1000;
        //把时间毫秒值转换成对应的日期对象
        Date d2 = new Date(time2);
        System.out.println(d2);
        Date d3 = new Date();
        d3.setTime(time2);
        System.out.println(d3);
//        Tue Mar 15 21:49:59 CST 2022
//        1647352199519
//        ---------计算当前时间往后走1小时121秒后的时间-------------
//        Tue Mar 15 21:49:59 CST 2022
//        Tue Mar 15 22:52:00 CST 2022
//        Tue Mar 15 22:52:00 CST 2022
    }
}

121 日期时间date
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class date {
    public static void main(String[] args) {
        //拿到系统此刻日历对象
        Calendar ca = Calendar.getInstance();
        System.out.println(ca);
        //获取日历的信息
        int year = ca.get(Calendar.YEAR);
        System.out.println(year);
        //为某个时间段加减时间
        ca.add(Calendar.DAY_OF_YEAR,+2);
        ca.add(Calendar.HOUR,1);
        //拿到此时日期对象
        Date time = ca.getTime();
        System.out.println(time);

    }

}

122 jdk date新增api在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
demo4
在这里插入图片描述
在这里插入图片描述
instant
在这里插入图片描述
dateTimeformatter
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
123 包装类
在这里插入图片描述
在这里插入图片描述
124 正则表达式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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



public class ArrayDemo {
    public static void main(String[] args) {
        int[] ages = {12, 34, 32, 43, 3, 5};
        Arrays.sort(ages);
        System.out.println(Arrays.toString(ages));

        Integer[] ages1={3,4,54,64,77};
        Arrays.sort(ages1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(ages1));

    }
}

对象比较排序,自定义比较器
在这里插入图片描述
126
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

127 lambda 表达式
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package oop.d7;

import java.util.Arrays;
import java.util.Comparator;

public class Lambda {
    public static void main(String[] args) {
        Animal animal = new Animal() {
            @Override
            public void run() {
                System.out.println("-----run1");
            }
        };
        go(animal);

        Animal animal2 = ()-> {
                System.out.println("--------run2");
        };
        go(animal2);

        go(new Animal() {
            @Override
            public void run() {
                System.out.println("-----run3");
            }
        });

        go(() -> {System.out.println("------run4");
        });
    }

    public static void go(Animal animal){
        System.out.println("---go1---");
        animal.run();
        System.out.println("---go2---");
    }
}



128-132128collection集合体系在这里插入图片描述

package xulaoshi.collection;

import java.util.*;

public class collection {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("ssd");
        list.add("ssw");
        list.add("ss3");
        list.add("ss4");
        System.out.println(list);
        //将list转换成数组
        Object[] objects = list.toArray();
        System.out.println(Arrays.toString(objects));
        //将数组转换成list
        List<Object> list1 = Arrays.asList(objects);
        System.out.println(list1);
    }
}

129 Collection 迭代器
在这里插入图片描述

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

collection集合三种遍历方式

package xulaoshi.collection;

import java.util.*;
import java.util.function.Consumer;

public class collection {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("ssd");
        list.add("ssw");
        list.add("ss3");
        list.add("ss4");
        System.out.println(list);
        //遍历一
        //得到当前集合的迭代器对象
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
        //遍历二
        for (String s : list) {
            System.out.println(s);
        }
        //遍历三 lamda foreach
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //简化写法
        list.forEach(s -> System.out.println(s));
        //简化写法
        list.forEach(System.out::println);
    }
}

131 list集合 集合并发修改异常
在这里插入图片描述
在这里插入图片描述

132
在这里插入图片描述
自定义泛型类
在这里插入图片描述
泛型方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
泛型接口
在这里插入图片描述

在这里插入图片描述

泛型的上下限
在这里插入图片描述

在这里插入图片描述

134 set集合的特点:
无序、
不重复、
无索引:``没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素
set集合实现类的特点:
Hashset:无序、(一次无序)不重复、无索引
linkedHashset:有序、不重复、无索引
Treeset:排序、不重复、无索引
set集合打印出来都是元素内容

在这里插入图片描述

package set;

import java.util.HashSet;
import java.util.Set;

/**
 * set集合把重复的内容去掉一个,需要重写对象的equals和hashcode方法
 */
public class SetDemo {
    public static void main(String[] args) {
        Set<Student> sets = new HashSet<>(); //采用多态方式创建
        Student s1 = new Student("xiao1",20,'男');
        Student s11 = new Student("xiao1",20,'男');
        Student s2 = new Student("xiao2",22,'女');
        Student s3 = new Student("xiao3",23,'男');
        sets.add(s1);
        sets.add(s11);
        sets.add(s2);
        sets.add(s3);
        System.out.println(sets);  //没有重写equals和hashcode打印四个值,重写之后去重 
        // [Student{name='xiao2', age=22, sex=女}, Student{name='xiao1', age=20, sex=男}, Student{name='xiao3', age=23, sex=男}]
    }
}

package set;

public class Student {
    private String name;
    private int age;
    private char sex;

    public Student() {
    }

    public Student(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        if (sex != student.sex) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        result = 31 * result + (int) sex;
        return result;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

TreeSet集合默认规则
对于数值类型:Integer Double,按照大小进行升序排序;
对于字符串类型:按照首字符的编号进行升序排序
对于自定义类型,如Student对象,无法直接排序,需要制定规则
方式一:让自定义的类,student实现comparable接口,重写里面的compare To 方法来制定比较规则
方式二:TreeSet集合有参构造器,可以设置comparator接口对应的比较器对象,来制定比较规则

package set;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * TreeSet排序,方式一:让自定义的类,student实现comparable接口,重写里面的compare To 方法来制定比较规则
 */
public class SetDemo {
    public static void main(String[] args) {
        Set<Student> sets = new TreeSet<>();
        Student s1 = new Student("xiao1",25,'男');
        Student s11 = new Student("xiao1",20,'男');
        Student s2 = new Student("xiao2",22,'女');
        Student s3 = new Student("xiao3",23,'男');
        sets.add(s1);
        sets.add(s11);
        sets.add(s2);
        sets.add(s3);
        System.out.println(sets);
    }
}

package set;

public class Student implements Comparable<Student>{ //传参Student,alt+enter重写compare To方法
    private String name;
    private int age;
    private char sex;

    public Student() {
    }

    public Student(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
    
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }

    @Override
    public int compareTo(Student o) {
//        return this.age-o.age;// 如果==0认为重复,会去掉
        return this.age-o.age>=0?1:-1;// 如果有相等的也显示
    }
}

package set;

import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * TreeSet排序
 */
public class SetDemo {
    public static void main(String[] args) {
//        Set<Student> sets = new TreeSet<>(new Comparator<Student>() {
//            //方式二,默认使用


//            @Override
//            public int compare(Student o1, Student o2) {
//                return o1.getAge()-o2.getAge();//升序
                return o2.getAge()-o1.getAge();//降序
//                //浮点型使用Double。compare
                return Double.compare(o1.getAge(),o2.getAge());//升序
//            }
//        });

        Set<Student> sets = new TreeSet<>(( o1, o2)->  Double.compare(o1.getAge(),o2.getAge()));

        Student s1 = new Student("xiao1",25,'男');
        Student s11 = new Student("xiao1",20,'男');
        Student s2 = new Student("xiao2",22,'女');
        Student s3 = new Student("xiao3",23,'男');
        sets.add(s1);
        sets.add(s11);
        sets.add(s2);
        sets.add(s3);
        System.out.println(sets);
    }
}

package set;

public class Student {
    private String name;
    private int age;
    private char sex;

    public Student() {
    }

    public Student(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }

}

135 集合的操作工具类Collections

package xulaoshi.collections;

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

public class CollectionDemo1 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
//        arrayList.add("ss");
//        arrayList.add("as");
//        arrayList.add("de");
//        arrayList.add("rfss");
        Collections.addAll(arrayList,"ss","kkk","hjk","jkk"); //批量添加
        System.out.println(arrayList);
        Collections.shuffle(arrayList);
        System.out.println(arrayList);
        Collections.sort(arrayList);  //升序排序
        System.out.println(arrayList);
    }
}

collection 排序

package xulaoshi.collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CollectionDemo2 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("11", "xiao", 33, "class1"));
        students.add(new Student("12", "xia2o", 21, "class2"));
        students.add(new Student("13", "xia3o", 29, "class3"));
        students.add(new Student("14", "xia4o", 18, "class4"));
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return Integer.compare(o1.getAge(), o2.getAge());
            }
        });
        System.out.println(students);
        Collections.sort(students, (o1, o2) -> Integer.compare(o1.getAge(), o2.getAge()));
        System.out.println(students);
    }
}

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

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("红星艾克",3);
        hashMap.put("ss",1);
        hashMap.put("apple",2);
        hashMap.put("ss",2);  //键不能重复
        hashMap.put(null,null);
        System.out.println(hashMap); //{ss=2, null=null, apple=2, 红星艾克=3}
    }
}
import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("红星艾克",3);
        hashMap.put("ss",1);
        hashMap.put("apple",2);
        hashMap.put("ss",2);  //键不能重复
        hashMap.put(null,null);
        System.out.println(hashMap); //{ss=2, null=null, apple=2, 红星艾克=3}
    }
}

map遍历方式一
在这里插入图片描述

package xulaoshi.map;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MapDemo {

    public static void main(String[] args) {
        Map<String, Integer> maps = new LinkedHashMap<>();
        maps.put("红星艾克",3);
        maps.put("python",1);
        maps.put("apple",2);
        maps.put(null,null);
        System.out.println(maps);
        //一键找值,先找到所有的键
        Set<String> keys = maps.keySet();
        for (String key : keys) {
            Integer value = maps.get(key);
            System.out.println(key+":"+value);
        }
        //二键值对,不推荐
        Set<Map.Entry<String, Integer>> entries = maps.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+":"+value);
        }
        //foreach遍历
        maps.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String key, Integer value) {
                System.out.println(key+":"+value);
            }
        });
        //foreach遍历简化写法
        maps.forEach((k, v)-> {
            System.out.println(k+":"+v);
                    });
    }
}

138

package xulaoshi.map;

import java.util.HashMap;
import java.util.Random;

public class MapDemo2 {
    public static void main(String[] args) {
        //把80个学生的数据拿过来
        String[] selects={"A","B","C","D"};
        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 80; i++) {
            sb.append(selects[r.nextInt(selects.length)]);
        }
        System.out.println(sb);
        //定义一个map集合定义最终的结果
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < sb.length(); i++) {
            char c = sb.charAt(i);
            //判断map集合是否存在键
            if (map.containsKey(c)){
                //让值加一
                map.put(c,map.get(c)+1);
            }else {
                map.put(c,1);
            }
        }
        //输出map
        System.out.println(map);
    }
}

139集合嵌套
在这里插入图片描述

package xulaoshi.map;

import java.util.*;

public class MapDemo3 {
    public static void main(String[] args) {
        //记录每个学生选择的情况
        HashMap<String, List<String>> data = new HashMap<>();
        //单个学生的选择情况
        ArrayList<String> selects = new ArrayList<>();
        Collections.addAll(selects, "A", "B");
        data.put("ss", selects);
        System.out.println(data);
        //单个学生的选择情况
        ArrayList<String> selects1 = new ArrayList<>();
        Collections.addAll(selects1, "A", "B", "D");
        data.put("er", selects1);
        System.out.println(data);
        //单个学生的选择情况
        ArrayList<String> selects2 = new ArrayList<>();
        Collections.addAll(selects2, "A", "C", "D");
        data.put("sanr", selects2);
        System.out.println(data);
        //统计每个景点选择的人数
        HashMap<String, Integer> infos = new HashMap<>();
        //提权所有人选择的经典信息
        Collection<List<String>> values = data.values();
        for (List<String> value : values) {
            for (String s : value) {
                if (infos.containsKey(s)) {
                    infos.put(s, infos.get(s) + 1);
                } else {
                    infos.put(s, 1);
                }
            }
        }
        System.out.println(infos);
    }

}

141 Stream流的作用?
简化集合数组的api,结合了lambda表达式

package stream;

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

public class StreamDemo1 {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        Collections.addAll(names,"张三丰","张无忌","赵敏");
        System.out.println(names);
        //从集合中找出姓张的放到集合中
        List<String> zhangList = new ArrayList<>();
        for (String name : names) {
            if(name.startsWith("张")){
                zhangList.add(name);
            }
        }
        System.out.println(zhangList);
        //找名称长度是三的姓名
        List<String> zhangThreeList = new ArrayList<>();
        for (String name2 : zhangList) {
            if (name2.length()==3){
                zhangThreeList.add(name2);
            }
        }
        System.out.println(zhangThreeList);

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

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

package stream;

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

public class StreamDemo2 {
    public static void main(String[] args) {
        /**------------Collection获取Stream------------------*/
        List<String> list = new ArrayList<>();
        Stream<String> s = list.stream();
        /**------------Map集合获取Stream------------------*/
        Map<String, Integer> maps = new HashMap<>();
        //键流
        Stream<String> keyStream = maps.keySet().stream();
        //值流
        Stream<Integer> valueStream = maps.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> keyAndValueStream = maps.entrySet().stream();
        /**------------数组获取Stream------------------*/
        String[] names = {"zhaomin", "xiaoWang"};
        Stream<String> nameStream = Arrays.stream(names);
        Stream<String> nameStream2 = Stream.of(names);
    }
}

常用api使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package stream;

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

public class StreamDemo3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"张三丰","张无忌","赵敏","周芷若","张三丰");
        list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        long count = list.stream().filter(s -> s.length() == 3).count();
        System.out.println(count);
        //limit取前几个
        list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(System.out::println);
        //skip前几个
        list.stream().filter(s -> s.startsWith("张")).skip(2).forEach(System.out::println);
        //Map加工方法
        //给集合元素前面加上一个”黑马“
        list.stream().map(s -> "黑马"+s).forEach(System.out::println);
        //把所有的名称都加工成一个学生对象
//        list.stream().map(s -> new Student(s)).forEach(System.out::println);
        list.stream().map(Student::new).forEach(System.out::println);
    }
}

综合案例练习

package stream;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo4 {
    public static double allMoney;
    public static double allMoney2;

    public static void main(String[] args) {
        List<Employee> one = new ArrayList<>();
        one.add(new Employee("猪八戒", '男', 30000, 25000, null));
        one.add(new Employee("孙悟空", '男', 25000, 1000, "顶撞上司"));
        one.add(new Employee("沙僧", '男', 20000, 20000, null));
        one.add(new Employee("小白龙", '男', 20000, 25000, null));

        List<Employee> two = new ArrayList<>();
        two.add(new Employee("猪八戒2", '男', 15000, 25000, null));
        two.add(new Employee("孙悟空2", '男', 20000, 1000, "顶撞上司"));
        two.add(new Employee("沙僧2", '男', 50000, 20000, null));
        two.add(new Employee("小白龙2", '女', 20000, 25000, "被打"));
        two.add(new Employee("小白龙22", '女', 20000, 0, null));
        //开发一部的最高工资
        //制定大小规则
//        Employee e = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())).get();
//        System.out.println(e);
        TopperFormer topperFormer = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .map(e -> new TopperFormer(e.getName(), e.getSalary() + e.getBonus())).get();
        System.out.println(topperFormer);

        //统计平均工资,去掉最高工资最低工资
        one.stream().sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .skip(1).limit(one.size() - 2).forEach(e -> {
                    //求综合,剩余员工的总和
                    allMoney += (e.getSalary() + e.getBonus());
                });
        System.out.println("开发一部的平均工资是" + allMoney / (one.size() - 2));

        //合并两个集合,再统计
        Stream<Employee> s1 = one.stream();
        Stream<Employee> s2 = two.stream();
        Stream<Employee> s3 = Stream.concat(s1, s2);
        s3.sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .skip(1).limit(one.size() + two.size() - 2).forEach(e -> {
                    allMoney2 += (e.getSalary() + e.getBonus());
                });
//        System.out.println("开发部门的平均工资是:"+allMoney2/(one.size()+ two.size()-2));
        //解决精度问题
        BigDecimal a = BigDecimal.valueOf(allMoney2);
        BigDecimal b = BigDecimal.valueOf(one.size() + two.size() - 2);
        System.out.println("开发部门的平均工资是:" + a.divide(b, 2, RoundingMode.HALF_UP));
    }
}

package stream;

public class Employee {
    private String name;
    private char sex;
    private double salary;
    private double bonus;
    private String punish;

    public Employee() {
    }

    public Employee(String name, char sex, double salary, double bonus, String punish) {
        this.name = name;
        this.sex = sex;
        this.salary = salary;
        this.bonus = bonus;
        this.punish = punish;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    public String getPunish() {
        return punish;
    }

    public void setPunish(String punish) {
        this.punish = punish;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", salary=" + salary +
                ", bonus=" + bonus +
                ", punish='" + punish + '\'' +
                '}';
    }
}

package stream;

public class TopperFormer {
    private String name;
    private double money;

    public TopperFormer() {
    }

    public TopperFormer(String name, double money) {
        this.name = name;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "TopperFormer{" +
                "name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

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

收集Stream流到集合或数组中去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package stream;

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

/**
 * 收集Stream流到集合或数组中去
 */
public class StreamDemo5 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"张三丰","张无忌","赵敏");
        Stream<String> stream = list.stream().filter(s -> s.startsWith("张"));
        stream.toList();
//        List<String> zhangList = stream.collect(Collectors.toList());
//        System.out.println(zhangList);

        //注意流只能使用一次
        Set<String> zhangSet = stream.collect(Collectors.toSet());
        System.out.println(zhangSet);

        Stream<String> s3= list.stream().filter(s -> s.startsWith("张"));
        Object[] arrs = s3.toArray();
        System.out.println("数组内容"+ Arrays.toString(arrs));
    }
}

在这里插入图片描述

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

142-143
在这里插入图片描述

运行时异常,parse下面报错,alt+enter有两种处理异常方式
第一:throws,最终抛到jvm,出现问题仍然会运行失败
第二:try–catch
在这里插入图片描述
在这里插入图片描述

package Exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo {
    public static void main(String[] args) throws ParseException {
        String date = "2015-01-12 10:11:12";
        //创建一个简单的格式化日期类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //解析字符串时间为日期对象
        Date d = sdf.parse(date);
        System.out.println(d);
    }
}

package Exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo {
    public static void main(String[] args) {
        String date = "2015-01-12 10:11:12";
        //创建一个简单的格式化日期类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //解析字符串时间为日期对象
        Date d = null;
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(d);
    }
}


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

143 处理方式一:如果有多个异常,可连续抛出,但实际上只执行了一个,先抛出去一个之后后面的代码就不会执行了,可一只抛出一个异常处理throws Exception;这种方式不好,发现异常不处理,最终还是抛给虚拟机,引起程序死亡。

处理方式二:try–catch,发生异常的方法自己独自去处理,程序可以继续往下执行

处理方式三:前两者结合,可以知道底层的调用情况
方法直接将Throws抛出给调用者
调用者收到异常后直接捕获处理 try-catch

package Exception;

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

public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("========开始========");
        parseTime("2011-11-11 01:12:13");
        System.out.println("========结束========");
    }
    public static void parseTime(String date){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = sdf.parse(date);
            System.out.println(d);
            FileInputStream fileInputStream = new FileInputStream("E:/ha.png");
        } catch (ParseException e) {
            e.printStackTrace();  //打印日常栈信息
            System.out.println("日期格式不对");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("您的文件没有");
        }
    }

}

建议写法,try-catch后抛Exception异常一次即可

package Exception;

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

public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("========开始========");
        parseTime("2011-11-11 01:12:13");
        System.out.println("========结束========");
    }
    public static void parseTime(String date){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = sdf.parse(date);
            System.out.println(d);
            FileInputStream fileInputStream = new FileInputStream("E:/ha.png");
        } catch (Exception e) {
            e.printStackTrace();  //打印日常栈信息
        }
    }

}

方式三推荐使用,底层异常往外抛,上层调用者捕获

package Exception;

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

public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println("========开始========");
        try {
            parseTime("2011-11-11 01:12:13");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("========结束========");
    }
    public static void parseTime(String date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(date);
        System.out.println(d);
        FileInputStream fileInputStream = new FileInputStream("E:/ha.png");
    }
}

144自定义异常
使用try-catch包一层,解决,转换成Double类型的价格的错误,即使用户输入字符串,程序仍运行直到输入正常价格

package Exception;

import java.util.Scanner;

public class ExceptionDemo4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            try {
                System.out.println("请输入合法的价格");
                String priceStr = sc.nextLine();
                //转换成Double类型的价格
                Double price = Double.valueOf(priceStr);
                //判单价格是否大于0
                if (price > 0) {
                    System.out.println("定价" + price);
                    break;  //退出while
                } else {
                    System.out.println("价格必须是正数");
                }
            } catch (NumberFormatException e) {
                System.out.println("用户输入的数据有误,请输入正数");
            }
        }
    }
}

自定义异常案例

package Exception;

public class AgeilleageException extends Exception{
    /**
     * 继承Exception
     * 重写构造其
     */
    public AgeilleageException() {
    }

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

package Exception;

public class ExceptionDemo5 {
    public static void main(String[] args) {
        try {
            checkAge(-9);
        } catch (AgeilleageException e) {
            e.printStackTrace();
        }
    }
    public static void checkAge(int age) throws AgeilleageException {
        if (age<0||age>200){
            //抛出异常,用throw new 自定义对象抛出
            throw new AgeilleageException(age+"不合法");
        }else{
            System.out.println("年龄合法");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值