前言
之前一直对静态内部类模模糊糊,特地在此记录一下
一、静态内部类是什么?
静态内部类就是被static修饰的内部类,而且如果一个类被static修饰了,那么这个类就只能是一个内部类。
二、使用注意事项
1.静态内部类和静态方法一样,只能访问外部的静态成员变量和方法,不能访问非静态的成员变量和方法
2.静态内部类可以单独初始化
public class Outer {
public static class Inner {
}
}
public class Client {
public static void main(String[] args) {
Inner mInner = new Outer.Inner();
}
}
三、应用
1.当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候可以考虑静态内部类
例如bulider建造者模式,代码如下:
public class Person {
private String name;
private String role;
private int age;
//构造函数私有,只允许通过静态内部类的bulid()方法创建Person类实例
private Person() {
}
public static class Builder {
private String name;
private String role;
private int age;
public Builder() {
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setRole(String role) {
this.role = role;
return this;
}
//返回外部类实例
public Person build() {
Person person = new Person();
if (name != null) {
person.name = name;
}
if (role!= null) {
person.role = role;
}
person.age =age;
return person;
}
}
}
public class Client {
//使用
public static void main(String[] args) {
Person.Builder builder = new Person.Builder()
.setName("arong")
.setAge(20);
Person person1 = builder.build();
Person person2 = new Person.Builder()
.setAge(23)
.setName("老冯~~~")
.setRole("重庆军统")
.build();
}
}
2.静态内部类单例模式:
public class Single {
private Single(){
}
static class SingleHolder {
private static final Single instance = new Single();
}
public static Single getInstance() {
return SingleHolder.instance;
}
public static void main(String[] args) {
Single instance = Single.getInstance();
Single instance1 = Single.getInstance();
Single instance2 = Single.getInstance();
System.out.println(instance);
System.out.println(instance1);
System.out.println(instance2);
}
}
//输出结果:
单例模式.静态内部类单例.Single@7ba4f24f
单例模式.静态内部类单例.Single@7ba4f24f
单例模式.静态内部类单例.Single@7ba4f24f
总结
以上就是今天要讲的内容,本文仅仅简单介绍了静态内部类的一些简单使用,如有错误望指正