Java旅程 Day04
2021/4/22 22:55:50
本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?