java静态内部类

参考:https://blog.csdn.net/sweetlyl006/article/details/140401823

静态内部类的特点

  1. 不依赖外部类实例:静态内部类的创建不依赖于外部类的实例,可以直接通过外部类名创建静态内部类的实例。
  2. 访问限制:静态内部类可以访问外部类的静态成员,但不能直接访问外部类的非静态成员。如果需要访问非静态成员,可以通过创建外部类的实例来实现。
  3. 封装性:静态内部类可以实现更高的封装性,使相关的类更紧密地绑定在一起,从而提高代码的可读性和可维护性。

静态内部类的使用场景

  1. 辅助类:静态内部类常用于实现一些只为外部类服务的辅助类。
  2. Builder模式:静态内部类经常用于实现Builder模式,简化对象的创建过程。
  3. 与外部类紧密相关的类:如果一个类只在外部类的上下文中有意义,可以将其作为静态内部类。

静态内部类可以访问外部类的静态方法,不能访问非静态方法

package org.example.java.innerStaticClass;

public class OuterClass {
    private static String staticOuterFiled = "静态外部变量";

    public static class InnerClass{
        public static void print() {
            System.out.println(staticOuterFiled);
        }
    }

    public void useInnerClass() {
        InnerClass.print();
    }

    public static void main(String[] args) {
        InnerClass innerClass = new OuterClass.InnerClass();
        innerClass.print();

        OuterClass outerClass = new OuterClass();
        outerClass.useInnerClass();

        OuterClass.InnerClass.print();

    }


}

可以通过静态内部类初始化外部类

package org.example.java.innerStaticClass;

import org.springframework.security.core.parameters.P;

public class Person {
    private String name;
    private Integer sex;
    private Integer age;

    public Person(Builder builder) {
        this.name = builder.name;
        this.sex = builder.sex;
        this.age = builder.age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

    public static class Builder {
        private String name;
        private Integer sex;
        private Integer age;

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public Builder setSex(Integer sex) {
            this.sex = sex;
            return this;
        }

        public Builder setAge(Integer age) {
            this.age = age;
            return this;
        }

        public Builder() {
        }

        public Builder(String name, Integer sex, Integer age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }

        public Person build() {
            return new Person(this);
        }
    }

    public static void main(String[] args) {
//        Person person = new Person.Builder()
//                .setName("张生")
//                .setAge(22)
//                .setSex(0)
//                .build();

        Person person=new Person
                .Builder("张森", 23, 0)
                .build();

        System.out.println(person);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值