JAVA静态内部类_java静态内部类实例化

JAVA静态内部类_java静态内部类实例化写在前面  不知不觉,我正式入职到部门实习也有一周多的时间了,这段时间确实学到了不少东西。从大公司的办公、办事的流程准则,到程序员的日常研发工作和其中的注意事项,导师和同事们都很乐于帮助我融入这个新环境。  因为实习生不用加班,业余时间也比较多。便想着利用空闲时间来深入学习、总结一些平时工作中遇到的知识点和代码细节,把之前因为准备期末都快要荒废掉的写博客总结的习惯重新拾回来。fighting~!


Jetbrains全系列IDE稳定放心使用

写在前面


  不知不觉,我正式入职到部门实习也有一周多的时间了,这段时间确实学到了不少东西。从大公司的办公、办事的流程准则,到程序员的日常研发工作和其中的注意事项,导师和同事们都很乐于帮助我融入这个新环境。
  因为实习生不用加班,业余时间也比较多。便想着利用空闲时间来深入学习、总结一些平时工作中遇到的知识点和代码细节,把之前因为准备期末都快要荒废掉的写博客总结的习惯重新拾回来。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.net/183431.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 在Win10下 用 Powershell 或 CMD 完成文件的 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 等哈希校验[通俗易懂]

    在Win10下 用 Powershell 或 CMD 完成文件的 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 等哈希校验[通俗易懂]文章目录前言CertUtil[选项]-hashfileInFile[HashAlgorithm]使用简单使用总结前言发现Windows10自带哈希校验工具CertUtil[选项]-hashfileInFile[HashAlgorithm]选项可以没有选项:-Unicode–以Unicode编写重定向输出-gmt–将时间显示为GMT-seconds–用秒和毫秒显示时间-v

    2022年9月3日
  • 进程处于挂起状态表示_挂起进程转换图

    进程处于挂起状态表示_挂起进程转换图文章目录引言挂起状态是什么?挂起状态和阻塞状态有什么区别?如何主动挂起程序总结引言以前对于这个概念始终比较模糊,遂在解决后记录博客,希望帮助到有同样问题的朋友。挂起状态是什么?我们一般认为进程有五个状态,即新建态,就绪态,阻塞态,运行态,终止态。而在这些状态之外还存在着一个状态,我们称之为挂起状态,它既可以是我们客户主动使得进程挂起,也可以是操作系统因为某些原因使得进程挂起。总而言之引入挂起状态的原因有以下几种:用户的请求:可能是在程序运行期间发现了可疑的问题,需要暂停进程。父进程的请求:

    2022年10月29日
  • leetcode-152. 乘积最大子数组(动态规划+滚动数组)「建议收藏」

    leetcode-152. 乘积最大子数组(动态规划+滚动数组)「建议收藏」给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。typedef long long ll;const int N = 1e5 + 10;const int INF = 0x3f3f3f3f;int f[2][

    2022年8月9日
  • R语言批量生成CaseWhen的解决方案

    R语言批量生成CaseWhen的解决方案R语言case_when批量生成自定义函数

    2022年9月6日
  • IDEA超级实用的几个快捷键[通俗易懂]

    最近开始使用IDEA,突然发现的比较的实用的几个快捷键 这些快捷键用的好的话真的可以提升很多效率 还有一些比较简单的快捷键,相信大家都会 Ctrl+X:剪切 Ctrl+C:复制 Ctrl+V:粘贴 C

    2022年3月13日
  • pytest skipif_skip的中文是什么

    pytest skipif_skip的中文是什么前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号