Java旅程 Day04

今日学习总结

今天因为早上有课所以有些摆烂,但是上课大部分时间在看狂神最后的2P——自定义异常小结和JAVASE总结。
中午下课吃完饭背完英语一点钟,玩会手机两点钟睡觉,没怎么睡好就到了三点半,起来学习,但是一开始的学习没怎么进入状态,大概半个多小时才进入状态。
今天也就学了六七个小时吧。

总结一哈

今天进入了多线程的学习
了解了程序进程线程的概念

程序:是程序和指令的有序集合,本身没有任何运行的含义,是静态的。

进程:执行程序的一次执行过程,是一个动态的概念。它是系统资源分配的单位。

通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个进程,不然没有存在的意义。

线程:CPU调度和执行的单位。

小总结:
1.main方法是主线程,是系统的入口,用于执行整个程序。
2.线程就是独立的执行路径

线程的创建

有三种创建方式:

1.自定义线程类继承Thread类
2.实现Runnable接口(推荐)
3.实现Callable接口(了解)

静态代理

静态代理模式总结:
1.真实对象和代理对象都要实现同一个接口(结婚Marry)
2.代理对象要代理真实角色
好处:
1.代理对象可以做很多真实对象做不了的事情
2.真实对象专注做自己的事情
示例代码(结婚例子)

package com.seawatcher.www.project01;

public class StaticProxy {
    public static void main(String[] args) {
        //真实对象
        //Teacher teacher = new Teacher();老师要结婚
        //把老师丢给婚庆公司
       /* WeddingCompany weddingCompany = new WeddingCompany(new Teacher());
        weddingCompany.Marriage();*/

        //Runnable接口和Thread代理都有run方法,
        //最后调用的是Thread的start方法,但实际执行的还是Runnable中的run方法中的方法体
        //Thread代理真实对象(Runnable接口),调用start()方法Thread。
        new Thread(()-> System.out.println("我爱你")).start();//lambda表达式

        //精简代码
        new WeddingCompany(new Teacher()).Marriage();
    }
}
interface Marry{
    void Marriage();
}
class Teacher implements Marry{
    @Override
    public void Marriage() {
        System.out.println("老师要结婚了,很开心");
    }
}
class WeddingCompany implements Marry{
    //代理谁-真实目标角色
    private Marry target;

    public WeddingCompany(Marry target){
        this.target = target;
    }

    @Override
    public void Marriage() {
        before();
        this.target.Marriage();//真实对象 调用了一个结婚
        after();
    }
    private void before() {
        System.out.println("结婚之前,布置现场");
    }
    private void after() {
        System.out.println("结婚之后,收款");
    }
}

Lambda表达式的使用

Lambda表达式的出现是为了简化代码

使用Lambda表达式的意义
1.避免匿名内部类定义过多
2.让代码看起来更简洁
3.去掉一堆没有意义的代码,留下核心的逻辑。

函数式接口

当接口中只有一个抽象方法的时候,就是函数式接口。
对于函数式接口,可以通过Lambda表达式来创建接口对象。

函数式接口示例代码:

package com.seawatcher.www.project02;

public class TestLambda02 {
    public static void main(String[] args) {
        PrintRec printRec = null;
        int x = 5;

        //1.lambda表示简化
        /*PrintRec printRec = (int row)-> {
            for (int i = 0; i < row; i++) {
                for (int j = row - i - 1; j >= 0; j--) {
                    System.out.print(" ");
                }
                for (int j = 0; j <= i; j++) {
                    System.out.print("*");
                }
                for (int j = 0; j < i; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        };*/

        //2.简化参数类型
        /*printRec = (row)-> {
            for (int i = 0; i < row; i++) {
                for (int j = row - i - 1; j >= 0; j--) {
                    System.out.print(" ");
                }
                for (int j = 0; j <= i; j++) {
                    System.out.print("*");
                }
                for (int j = 0; j < i; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        };*/

        //3.简化括号
        /*printRec = row-> {
            for (int i = 0; i < row; i++) {
                for (int j = row - i - 1; j >= 0; j--) {
                    System.out.print(" ");
                }
                for (int j = 0; j <= i; j++) {
                    System.out.print("*");
                }
                for (int j = 0; j < i; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        };*/
        //4.去掉花括号 要求只有一行代码
        //前提是接口是函数式接口(接口中只有一个方法)
        //多个参数也可以去掉参数类型 要去掉就都去了 但是不能简化参数括号
        printRec = row-> System.out.println("I love u");

        printRec.printRec(x);
        /*printRec = new PrintRec() {//匿名内部类
            @Override
            public void printRec(int row) {
                for (int i = 0; i < row; i++) {
                    for (int j = row - i - 1; j >= 0; j--) {
                        System.out.print(" ");
                    }
                    for (int j = 0; j <= i; j++) {
                        System.out.print("*");
                    }
                    for (int j = 0; j < i; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                }
            }
        };*/

    }
}
interface PrintRec{
    void printRec(int row);
}
/*
class RecPrint implements PrintRec{
    @Override
    public void printRec(int row) {

    }
}*/

收尾

放张JAY,推荐歌曲《枫》, 今日毕。
Java旅程 Day04

上一篇:Day04


下一篇:api课堂笔记_day04