lamada表达式以及各种内部类

1. 接口

  • JDK1.7之后,接口中可以定义有方法体的方法。实现类在实现时,可以不必重写。static修饰的,可通过接口名直接调用。而default修饰的,必须经过具体类实现后,用new关键字创建对象来调用。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 类和接口之间满足:has a
  • 接口和接口之间可以继承:extends

2. 函数式接口

  • 接口中只有一个抽象方法(函数式接口)
//一旦写上该标识就只能写一个抽象方法 可以不写,一个抽象方法也是函数式接口
@FunctionalInterface
interface C{
	int add(int x,int y);
}
  • 函数式接口(接口中有一个方法)->Lamda表达式(接口中必须只有一个方法)->内部类

3. 内部类

3.1 内部类的分类

在这里插入图片描述

  • 虽然内部类分很多种,但所有的内部类必须遵守以下规则:
    • 1.内部类的类名只用于定义它的类或者语句块之内,在外部引用时必须给出带有外部类名的完整名称。
    • 2.内部类的名字不允许与外部类的名字相同,外部类指的是包裹它的那个类。
    • 3.内部类可以是抽象类或接口,若是接口,则可以有其他内部类实现。

3.2.1 非静态实名内部类

定义方式

在这里插入图片描述

注意事项
  • 非静态实名内部类对应的是非静态成员方法
  • 对照非静态成员方法,可以总结出如下内容:
    • 非静态实名内部类是一个特殊的成员实例类,特殊在它是一个类;
    • 类只能被public或者默认修饰符修饰,但非静态实名内部类作为类成员,可以被private修饰;这是它作为类成员应有的特征,应有的权利
    • 既然是类成员,访问外部类(包裹类)的静态或者非静态成员是合法的,理由是成员方法可以访问,我作为比方法更高级的类自然也可以访问。所以:可以访问外部类所有成员
    • 既然是实例类成员,那么成员实例方法不能做的,成员实例类也不能做,这叫底线。所以方法中不能定义静态变量,因而内部类中不能定义静态成员。但内部类比它强的一点是可以定义静态常量
    • 内部类中的方法不具特殊性。
  • 案例佐证

在这里插入图片描述

创建方式

在这里插入图片描述

public class Demo02 {
	static int x = 9;
	//静态内部类不能访问外部类的非静态成员,可以访问静态成员
	static class Inner{
		int a = 3;
		static final int b = 9;
		static void f(){
			x = 9;
		}
	}
}

3.2.2 静态内部类(类比静态成员方法)

定义方式

在这里插入图片描述

注意事项
  • 对比静态成员方法:
    • 静态内部类不能访问外部类的非静态成员,可以访问静态成员,因为非静态成员在静态成员之后,这是符合静态成员方法的规则的
    • 和静态方法差不多,只不过多了一个new的过程
创建方式

在这里插入图片描述

3.2.3 局部实名内部类

注:局部内部类可以访问外部类的所有成员

定义方式

在这里插入图片描述

注意事项
  • 类比于局部变量
    • 局部变量是在栈中,所以局部匿名内部类也是同理,出栈便被消失。所以不能定义静态成员,包括属性和方法。但有其特殊一点是可以定义静态常量。
      在这里插入图片描述
    • 不能用修饰符修饰,这一点体现了局部变量的特性
    • 可以访问外部类所有成员,要不然 局部匿名内部类和自己的局部变量玩,没多大意义
    • Local variable a defined in an enclosing scope must be final or effectively final(在封闭范围中定义的局部变量必须是final或有效的final)当方法的内部类访问本方法内的变量是常量
      在这里插入图片描述
      在这里插入图片描述
创建方式

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

扫描二维码关注公众号,回复: 9260757 查看本文章

3.2.3 局部匿名内部类

注:匿名类不能定义静态成员,包括方法和属性。
在这里插入图片描述

3.2.5 实例匿名内部类

在这里插入图片描述

4. lambda表达式

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

  • 可省情况
    *在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 抽象类和接口的区别
    在这里插入图片描述
  • 注意:
    在这里插入图片描述

5. 内存管理

  • 堆内存->jvm管理->那段代码->垃圾回收器
  • 不是马上回收,先标记可以回收,线程统一起来再回收
  • 垃圾回收:null,是否被引用
    内存溢出:创建对象不够用
    内存泄漏:使用完对象,对象没有被回收,就放到堆内存当中,产生垃圾

不同业务卡 接口

发布了84 篇原创文章 · 获赞 90 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42512488/article/details/96099732
今日推荐