一:线程的三种创建方式
1.Thread class——继承Thread类
2.Runnable接口——实现Runnable接口
3.Callable接口——实现Callable接口
1:不建议使用,避免OPP单继承局限性
2:推荐使用,避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
3:可以定义返回值,可以抛出异常
二:静态代理
模式总结;
1.真实对象和代理对象都要实现同一个接口。
2.代理对象要代理真实角色
比如我结婚,婚庆公司会来帮我主持,我就是真实对象。
好处:
1.代理对象可以做很多真实对象做不了的事情。
2.真实对象专注做自己的事情。
三:Lamda表达式
用于避免匿名内部类定义过多,属于函数式编程,去掉一堆没有意义的代码,只留下核心的逻辑。
//推导lambda表达式 public class TestLambdal { //3静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("i like lambda3"); } } like = new Like3(); like.lambda(); //5匿名内部类,没有类的名称,必须借助接口或者父类 like = new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; like.lambda(); //6用lambda简化 like = ()-> { System.out.println("i like lambda5"); }; like.lambda(); } } //1定义一个函数式接口 interface ILike{ void lambda(); } //2实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
不同变量类型的列举
/*总结: lambda表达式只能有一行代码的情况下才能简化成一行,如果有多行,那么就用代码块包裹起来 前提是接口为函数式接口即只有一个函数方法 多个不同类型参数也可以去掉参数类型,要去掉就都去掉*/ public class Testlambda2 { public static void main(String[] args) { ILove love = null; love = (a,b)-> System.out.println("i love you" + a + b); love.lambda(2,"sd"); } } interface ILove{ void lambda(int a,String b); }