成员内部类

特点:可以访问外部类的成员,包括私有成员
创建对象:外部类.内部类 对象名= new 外部类().new 内部类();
Outer.Inner oi = new Outer().new Inner();
在成员内部类中访问所在外部类对象:外部类名.this
public class Outer{
//内部类
public class Inner{ }
}

静态内部类(有static修饰):

创建对象:外部类.内部类 对象名= new 外部类.内部类();
MyInner.MyInter mm = new MyInner.MyInter();
静态内部类中可以直接访问外部类的静态成员 (静态允许访问静态)
静态内部类中不能直接访问外部类的实例成员:需要通过对象访问
class MyInner {
static class MyInter {
}
}
局部内部类:放在方法、代码块、构造器等执行体中的类

匿名内部类:

特点:定义在方法内部,需要存在一个接口或类,可一起完成继承、实现、方法重写、创建对象

Lambda

格式:( 匿名内部类被重写方法的形参列表 ) -> { 被重写方法的方法体代码 } > () —>{}
函数式接口含义:必须是接口,接口中只能有一个抽象方法,接口上使用==@FunctionalInterface==注解 判断
省略规则:

  • 参数类型可省略不写。
  • 如果只有一个参数,参数类型可以省略, () 也可省略。
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号,如果这行代码是return语句,必须省略return不写,也必须省略”;”

    Lambda表达式和匿名内部类的区别:
  • 所需类型不同
    匿名内部类:可以是接口,也可以是抽象类或者具体类
    Lambda表达式:只能是接口

  • 使用限制不同
    Lambda表达式适用于:接口中只有一个抽象方法
    匿名内部类适用于:有一个类或者接口
  • 实现原理不同
    匿名内部类:编译后产生一个单独的.class字节码文件
    Lambda表达式:编译后没有单独的.class字节码文件,对应的字节码在运行的时候动态生成

语法糖:实现原理不变, 但格式更加简化的语法

Object类

常见方法:
toString():返回当前对象在堆内存中的地址
equals:默认比较当前对象与另一个对象的地址是否相同

Objects类

equals:比较二个对象,会先进行非空判断,避免空指针异常
isNull:判断变量是否为null

Math类

介绍:数学运算的方法,使用类名调用
常见方法:
abs(int a): 获取参数绝对值
ceil(double a):向上取整
floor(double a):向下取整
round(float a):四舍五入
max(int a,int b):取二个值中的最大值
pow:(double a , double b):a的b次幂的值
random():获得[0.0 - 1.0)之间的小数随机值

System类

exit:终止虚拟机,非零表示异常终止
currentTimeMillis() : 返回1970年1月1日 0时0分0秒, 到现在所经历过的毫秒值
arraycopy (Object src, int srcPos, Object dest, int destPos, int length):
参数1 : 数据源 参数2 : 拷贝的起始位置 参数3 : 数据目的 参数4 : 拷贝的目标起始位置 参数5 : 拷贝的个数