成员内部类
特点:可以访问外部类的成员,包括私有成员
创建对象:外部类.内部类 对象名= 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 : 拷贝的个数