不知不觉,我正式入职到部门实习也有一周多的时间了,这段时间确实学到了不少东西。从大公司的办公、办事的流程准则,到程序员的日常研发工作和其中的注意事项,导师和同事们都很乐于帮助我融入这个新环境。 因为实习生不用加班,业余时间也比较多。便想着利用空闲时间来深入学习、总结一些平时工作中遇到的知识点和代码细节,把之前因为准备期末都快要荒废掉的写博客总结的习惯重新拾回来。fighting~!
前几天,我在看部门项目源码的时候,读到了这样的一个结构:
public class A{
......//一些属性和方法
public static class B{
......
}
......//一些属性和方法
}
发现在许多实际应用的工程文件中,静态内部类和静态变量的使用很普遍。于是翻阅了一些书籍资料,深入学习了静态内部类,在此做个总结。如有不足、不当之处,欢迎拍砖指正~
在考虑使用静态内部类时,一般有这样的场景需求:当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建,这时我们会考虑采用静态内部类的设计。
对于在外部类的各个方法间定义的内部类,静态与非静态在使用时有不同的限制,主要总结为以下的几个区别:
(1)在方法间定义的非静态内部类: ● 外围类和内部类可互相访问自己的私有成员。 ● 非静态内部类中不能定义静态成员变量与方法。 (2)在方法间定义的静态内部类: ● 只能访问外部类的静态成员变量与方法。 ● 在创建静态内部类实例时不需要将静态内部类的实例绑定在外部类的实例上。(即内部类可以单独创建实例)
/**
* 声明静态内部类实例与非静态内部类实例的区别示例。
*/
// 静态内部类可以单独初始化:
Inner i = new Inner();
// 非静态内部类初始化:
Outer o = new Outer();
Inner i = o.new Inner();
关于静态内部类,《Effective Java》一书中还给出了一个这样的使用例子:
public class Outer {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(int age) {
this.age = age;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Outer build() {
return new Outer(this);
}
}
private Outer(Builder b) {
this.age = b.age;
this.name = b.name;
}
}
书中给出了静态内部类使用的两点总结: 1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。 2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。
不难看出,这样的模式使用,是符合面向对象的基本设计原则—— 开-闭原则 的。所谓开闭原则,即为尽可能地使程序设计能够对以后的扩展开放,而对修改关闭。上面例子中的withName和withAge方法都可以看作是程序设计模式对扩展开放的例子。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183431.html原文链接:https://javaforall.cn