Java匿名内部类和Lambda表达式

  • 一、Java匿名内部类
  • 二、JavaLambda表达式
  • 全部代码:
  • 代码运行结果:

一、Java匿名内部类

我们在使用匿名内部类时,需要记住以下几个重要的知识点:
 ①匿名内部类不能有构造方法。 (因为匿名内部类是没有类名的)
 ②匿名内部类不能定义任何静态成员、方法和类。
 ③匿名内部类不能是抽象类。(因为在创建匿名内部类的时候,会立即创建匿名内部类的对象。从而也可知匿名内部类必须实现它的抽象父类或者接口里包含的所有抽象方法)
 ④匿名内部类不能是public,protected,private,static。
 ⑤只能创建匿名内部类的一个实例。
 ⑥ 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
 ⑦因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
 ⑧内部类只能访问外部类的静态变量或静态方法。
 ⑨匿名内部类访问局部变量时,该变量使用final修饰(JDK1.7以后编译器自动添加)
匿名类和内部类中的中的this :
  当我们会要用到一些内部类和匿名类。当在匿名类中用this时,
这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。


接口:
①用来定义标准(规范)
②常量,不能有普通变量
③没有构造方法
④没有普通方法
⑤成员方法:
1、抽象方法
2、static静态方法
3、使用default修饰的普通方法
接口多继承
类是单继承

二、JavaLambda表达式

  Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
  JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
  语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

在主函数里面:

全部代码:

package homework09.homework0910;
/*** 匿名内部类* Java Lambda表达式*/
public class Demo {public static void main(String[] args) {final int x=120;Zoo z=new Zoo() {//这属于匿名内部类@Overridepublic void test() {System.out.println("这是重写后的test方法!");System.out.println(x);}public void run(){System.out.println("这是匿名内部类中自己的方法!");}};z.test();//调用重写后的方法/* z.run();*///直接报错,如果匿名内部类中只有自己的run方法的话,可以调用,反之//这里是如何创建内部类的对象,通过先new主类,然后再创建内部类的对象Student.Student2 student = new Student().new Student2();student.test9();Student.Student1 s = new Student().new Student1();s.test3();//重写接口Animal中的抽象方法,匿名类实现Animal接口//()->{} 该匿名方法是重写Animal中的抽象方法testAnimal i=()->{//Java Lambda 表达式System.out.println("这是重写了类Animal中的抽象(abstract)方法");};//注意:分号不要漏掉i.test();//调用重写后的test方法/* Dog d = ()->{//抽象类不能使用Lambda表达式   直接报错};*///1.多个参数无返回Animal1 a1 = (int a,int b)->{System.out.println(a+b);};a1.sum(4, 5);//2.多个参数有返回Animal2 a2=(a,b)->{return a+b;};int a2sum=a2.sum(4, 9);System.out.println(a2sum);//3.当方法体中只有一行代码时,大括号可以省略Animal3 a3 = k->System.out.println(k);a3.sum(6);//4.当方法体中只有一行代码,并且带返回值时,return关键字可以省略Animal4 a4 = k->k;int a4sum=a4.sum(9);System.out.println(a4sum);//5.当方法没有参数时,小括号不能省Animal5 a5 = ()->11;int a5sum=a5.sum();System.out.println(a5sum);}
}
interface Animal5{public int sum();
}
interface Animal4{public int sum(int a);
}
interface Animal3{public void sum(int a);
}
interface Animal2{public int sum(int a,int b);
}
interface Animal1{public void sum(int a,int b);
}
abstract class Dog{public abstract void test();
}
interface Animal{//抽象方法public abstract void test();//JDK1.8以后才有的public default void test3(){System.out.println("test3");}
}
abstract class Zoo{//定义了一个抽象类public abstract void test();//定义了一个抽象方法
}
class Student{//类中的成员-->成员变量-->成员方法-->成员类public static final int A=100;//public static finalint a=20;int b=50;//编译器自动为变量b添加final关键字,供内部类里面能够输出成员变量b的值public static void test(){}public class Student1{//成员内部类所有访问修饰符都可以使用public void test3(){System.out.println(b);}}class Student2{int a=10;public void test9(){System.out.println("内部类中的成员变量值为:"+a);System.out.println(A);//内部类调用外部类的成员变量时,使用外部类的类名.this.成员变量名进行区分System.out.println("主类中的成员变量的值为:"+Student.this.a);}}
}

代码运行结果:

Java匿名内部类和Lambda表达式相关推荐

  1. java基础之lambda表达式

    java基础之lambda表达式 1 什么是lambda表达式 lambda表达式是一个匿名函数,允许将一个函数作为另外一个函数的参数,将函数作为参数传递(可理解为一段传递的代码). 2 为什么要用l ...

  2. Java 8 新增lambda表达式(-)

    2019独角兽企业重金招聘Python工程师标准>>> Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性 ...

  3. 匿名内部类和Lambda表达式

    匿名内部类 匿名内部类主要是针对继承(类继承.抽象类继承.接口实现)这一概念而形成的一种简化定义,首先我们来观察如下一段代码. 范例:观察传统实现方式的问题 interface IMessage {p ...

  4. java游侠_Java Lambda表达式初探

    Java Lambda表达式初探 前言 Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未必是坏事,但对个人学习而言,不去学习新技术就很可能被技术抛弃.Java 8一个重 ...

  5. 匿名内部类与Lambda表达式习题

    匿名内部类与Lambda表达式习题 1.写一个函数式接口 public Operation{ public int calc(int a,int b); } 在测试类中写一个method方法,参数为O ...

  6. 匿名内部类与Lambda表达式

    匿名内部类与Lambda表达式 一.匿名内部类 谁没有名字:匿名内部类指的是接口的实现类 或者 抽象类的子类没有名字. 1.前提: 1)必须要有一个接口.抽象类(普通类也可以,但是方法不会强制重写,不 ...

  7. java junit 异常_JUnit:使用Java 8和Lambda表达式测试异常

    java junit 异常 在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们 ...

  8. 带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito

    Mockito-Java8是一组Mockito附加组件,它们利用Java 8和lambda表达式使Mockito的模拟更加紧凑. 在2015年初,我进行了简短的演讲, Java 8为测试带来了力量! ...

  9. JUnit:使用Java 8和Lambda表达式测试异常

    在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们还有另一种处理异常的方法:使 ...

最新文章

  1. TP5 实现微信支付和支付宝支付
  2. Nginx入门简介和反向代理、负载均衡、动静分离理解
  3. 向anna学习系统结构和测试流程
  4. getimg()在java中,java – 使用getClass()加载资源getResource()
  5. 工作回报如何影响人的生产力_如何在减少工作的同时提高生产力
  6. 字符串,那些你不知道的事 1
  7. java远程获取linux文件_Java远程连接操作linux服务器,scp获取文件
  8. EM 算法的推导和解释
  9. 离散数学及其应用(一)
  10. 注意力机制论文:CCNet: Criss-Cross Attention for Semantic Segmentation及其PyTorch实现
  11. 网站服务器对域名有要求,网站域名备案对服务器的要求
  12. python图像拼接_python实现两张图片拼接为一张图片并保存
  13. 微信小程序checkbox的全选以及所有checkbox选中之后的全选
  14. Add Binary 二进制求和
  15. 资产计提折旧日志查询(AFBP)和数据反查(FB03 / AW01N)
  16. GitHub的Java面试项目
  17. 七、MySQL之数据定义语言(二)
  18. VMotion and Storage VMotion
  19. 28 岁程序员身价过亿,选择退休东渡日本
  20. 第三个Sprint ------第十一天

热门文章

  1. Poisson image editing算法实现的Matlab代码解析
  2. 经典视频编解码框架理解
  3. DFS 图遍历路径优化分析
  4. 丝雨学姐小灶班——Week 5
  5. Cesium洪水淹没分析 洪水淹没高度的上涨与下降
  6. [Kubernetes]谈谈容器跨主机网络
  7. 我的世界java版hud怎么设置_[MH]迷你HUD (MiniHUD)
  8. SpringMVC框架——本地上传和OSS上传
  9. nodejs框架express之使用中间件(初学)
  10. 小码哥-玩转【斗鱼直播APP】系列之框架搭建