文章目录
内部类
内部类就是定义在一个类里面的类,里面的类可以理解成寄生,外部类可以理解成宿主。
静态内部类(了解)
static修饰,属于外部类本身。
//外部类
public class Outer {
//学习静态成员内部表
public static class Inner{
private String name;
private int age;
public Inner() {
}
public Inner(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
public class Tets {
public static void main(String[] args) {
Outer.Inner a=new Outer.Inner("k",18);
}
}
静态内部类可以直接访问外部类的静态变量,但不能访问外部类的实例对象。
成员内部类(了解)
无static修饰,属于外部类的对象
public class Outer {
public class Inner{
private String name;
private int age;
}
}
public class Test {
public static void main(String[] args) {
Outer.Inner in=new Outer().new Inner();
}
}
成员内部类可以直接访问外部类的静态成员。
成员内部类的实例丰富可以直接访问外部类的实例成员。
Demo
public class Demo {
private int heartbeat=150;
public class heart{
private int heartbeat=110;
public void show(){
int heartbeat=78;
System.out.println(heartbeat);//78
System.out.println(this.heartbeat);//110
System.out.println(Demo.this.heartbeat);//150
}
}
}
局部内部类(鸡肋语法,了解)
局部内部类放在方法,代码块,构造器等执行体中。
局部内部类的类文件名为:外部类$N内部类.class。
匿名内部类(重点)
本质上是一个没有名字的局部内部类,定义在方法,代码块中等。
作用:方便创建子类对象,最终目的为了简化代码编写。
public class Test {
public static void main(String[] args) {
Animal a=new Animal() {
@Override
public void run() {
System.out.println("run");
}
};
a.run();
}
}
abstract class Animal{
public abstract void run();
}
特点:
匿名内部类是一个没有名字的内部类;
匿名内部类写出来就会产生一个匿名内部类的对象;
匿名内部类的对象类型相当于是当前new的类型的子类类型。
Demo
常用API
ToString
开发中直接输出对象的地址其实是毫无意义的,更多是希望看到对象的内容数据而不是对象的地址信息。
ToString存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。
equals
一般使用Objects.equals,当某个值为null时,Object.equals会报错,但是Objects不会,Objects.equals(s1,s2)。
StringBuilder
public class StringbuliderDemo {
public static void main(String[] args) {
StringBuilder s=new StringBuilder();
s.append("s");
s.append(1);
s.append(2.2);
s.append('c');
//支持链式编程
s.append("s").append(1).append(2.2).append('c');
s.reverse().append("ss");
//StringBuilder只是拼接字符串的手段,最终的结果还是要恢复成字符串
String res=s.toSrting();
}
}
Math
System
currentTimeMills()返回从1970-1-1 00:00:00走到此刻的总的毫秒值。
arraycopy:
BigDecimal
用于解决浮点型运算精度失真的问题。