在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。

如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)

1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法

2.静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。

3.静态内部类可以单独初始化:

Inner i = new Outer.Inner();

普通内部类初始化: (既然定义为内部类,就是不想外部访问,所以在外部初始化才这么特殊)

Outer o = new Outer();
Inner i = o.new Inner();

静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计,在知道如何初始化静态内部类,在《Effective Java》第二章所描述的静态内部类builder阐述了如何使用静态内部类:

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;}
}

静态内部类调用外部类的构造函数,来构造外部类,由于静态内部类可以被单独初始化说有在外部就有以下实现:

public Outer getOuter()
{Outer outer = new Outer.Builder(2).withName("Yang Liu").build();return outer;
}

对于静态类总结是:

1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。

2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。

希望有所收获。

原文:https://www.cnblogs.com/Alex--Yang/p/3386863.html

Java静态类 Builder(建造者)模式相关推荐

  1. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  2. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  3. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  4. Java设计模式之建造者模式(精髓版)

    目录 1.建造者模式阐述 2.使用Java代码实现建造者模式 3.为什么需要使用建造者模式? 4.建造者模式与工厂方法模式有什么区别? 1.建造者模式阐述 Java 建造者模式是一种创建型设计模式,其 ...

  5. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  6. JAVA设计模式之建造者模式

    转自 JAVA设计模式之建造者模式 建造者模式(Builder)的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂对象的创建型 ...

  7. 一文弄懂Java设计模式之建造者模式:图解+游戏角色生成实例

    文章目录 详解Java设计模式之建造者模式 案例引入建造者模式 建造者模式 定义 UML类图表示 模式结构 案例分析与代码实现 案例类图实现 代码结构 代码实现 结果分析 指挥者类的深入讨论 钩子方法 ...

  8. 【Java设计模式】建造者模式、原型模式

    建造者模式 (1)需要建造很多零件 (2)需要装配起来 通常用于构建一些复杂的对象.可能需要和工厂模式互相搭配. • 场景: – 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品 ...

  9. (设计模式四)java设计模式之建造者模式

    建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.解决的问题 平常一般创建对象,需要new,然后通过set方法给每个属性设置,当创建多个对象的时候,代码重复性 ...

  10. 【Java设计模式】建造者模式(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

最新文章

  1. Vbox共享文件夹不显示了
  2. (五)我的JavaScript系列:JavaScript的糟粕
  3. 项目经理常扮演的角色
  4. MANIFEST.MF文件全面解析
  5. IIS7中WCF配置问题集合
  6. solaris 10安装Oracle10.2g
  7. 蓝桥杯大赛 青少年创意编程 第十一届 C++组
  8. Pycharm 入门问题
  9. Linux云自动化运维第三课
  10. 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节
  11. 国内pip源提示“not a trusted or secure host”解决方案
  12. 要开始算法了 什么顺序呢?
  13. 计算机网络分层协议及各层功能
  14. PDF转成图片后不清晰怎么办呢?
  15. UI设计到底是什么:什么叫ui设计?
  16. Android息屏状态下启动App
  17. 模糊综合评判法实现学生互评
  18. 学渣小论文投稿期刊记录总结
  19. 对抗噪音,一键清晰,HMS Core音频编辑服务给你“录音棚”般的体验
  20. 数据结构 时间复杂度 空间复杂度 一看就懂版本

热门文章

  1. 广东的 44场“新型招聘会”帮助大学生就业
  2. Day43-Java面试系列(七)- Redis面试专题
  3. licheepi nano BS8112A触摸按键之长按短按
  4. Linux服务器遇到攻击封禁IP、解封IP
  5. AD显示“Net has no driving source”的解决办法
  6. 机器学习基础:ROC曲线与AUC计算详解
  7. 二维码生成及识别接口
  8. 通信行业如何进行数字化转型?
  9. 2020最新互联网数据调查显示,Kotlin-势必取代-Java?,java从入门到精通下载
  10. 关于vRA 6.2.1(vCAC)公网端口映射