static可以修饰内部类,通常用来给外部类赋值 例如 建造者模式
静态内部类不能使用外部类非静态的属性,必须用对象名调用
在外部类中 创建静态内部类可以直接创建,不需要创建外部类
不能使用成员内部类的方式创建静态内部类对象
内部类 对象名 = new 内部类();
外部类.内部类 对象名 = new 外部类.内部类();
外部类直接通过类名去调用内部类中的静态属性
外部类.内部类.属性 =
如果外部类中的静态方法和内部类的属性同名 通过外部类的类名去调用。
建造者模式 举例:
/**
* 建造者模式
* 通过静态内部类给外部类赋值
*/
public class WeiXin {
private String userName;
private String pwd;
private int age;
private String email;
private boolean sex;
// 构造方法传递 builder对象的目的就是给 外部类weixin的各种属性赋值
WeiXin(Builder b){
this.userName = b.userName;
this.pwd = b.pwd;
this.age = b.age;
this.email = b.email;
this.sex = b.sex;
}
@Override
public String toString() {
return "WeiXin [userName=" + userName + ", pwd=" + pwd + ", age=" + age
+ ", email=" + email + ", sex=" + sex + "]";
}
static class Builder{
private String userName;
private String pwd; // 必填项
// 选填项
private int age;
private String email;
private boolean sex;
public Builder(String userName,String pwd){
this.userName = userName;
this.pwd = pwd;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setSex(boolean sex) {
this.sex = sex;
return this;
}
public Builder setEmail(String email) {
this.email = email;
return this;
}
// 内部类创建外部类对象用的 则需要new 外部类的对象
public WeiXin build(){
return new WeiXin(this);
}
// 有这个方法就可以 WeiXin weixin = new WeiXin.Builder().build();
// 将内部类对象作为外部类的参数传递过去 目的是给 外部类属性赋值
}
public static void main(String[] args) {
// 直接创建微信对象
WeiXin weiXin = new WeiXin(new Builder("保镖", "123456"));
// 通过内部类的build方法创建微信对象
Builder builder = new Builder("保镖", "345678");
builder.setAge(22);
builder.setEmail("没有@qq.com");
builder.setSex(false);// false指代男
WeiXin weiXin2 = builder.build();
System.out.println(weiXin2.toString());
// 最简便的创建微信对象的格式 注意; build() 要放到最后
WeiXin weiXin3 = new WeiXin.Builder("保镖", "567890").setAge(12).setEmail("aaa#@qq.com").setSex(false).build();
}
}