java的静态内部类

只是一个简单的记录。因为一直排斥java这个东西。java跟c++比是很不错的一个语言,至少内存管理这么麻烦的东西不用操心了。但是和不断崛起的脚本语言比起来,效率差的太多。无论如何做android还是需要java的,所以遇到什么就看点什么。

既然要用静态内部类,那么就看看为什么不用非静态内部类:

package com.company;

class Company {

    private String theCEO = "stupid";
    private static String companyName = "STUPID COM";

    class Employee {
        public Employee() {
            // 1
            System.out.println("company name - " + companyName);
            // 2
            System.out.println("CEO - " + theCEO);
        }
    }

    public Company(){
        System.out.println("Company object is created");
    }
}

public class Main {

    public static void main(String[] args) {
        // 3
        Company company = new Company();
        // 4
        Company.Employee employee = company.new Employee();
    }
}

首先创建一个叫做Company的类,这个类有一个companyName静态成员和一个theCEO非静态成员。静态的公司名值为二货公司,这个二货公司有一个非静态的二货CEO。然后给这个二货公司放一个非静态的员工。

  1. 这个员工可以访问到静态的公司名。
  2. 这个员工也可以访问到非静态的CEO。
  3. 要初始化员工,那就必须先初始化公司对象。
  4. 初始换员工用的不是new,而是company.new。是公司对象.new

太麻烦了,如果内部类不是静态的。要用这个内部类就必须先初始化包裹类。也是,如果不初始化出来对应的包裹类,内部类对象怎么能访问这些包裹类对象的非静态实例对象呢。

所以还是用静态类好了:

package com.company;

class Company {

    private String theCEO = "stupid";
    private static String companyName = "STUPID COM";

    // 1
    static class Employee {
        public Employee() {
            System.out.println("company name - " + companyName);
            // 2
            //System.out.println("CEO - " + theCEO);
        }
    }

    public Company(){
        System.out.println("Company object is created");
    }
}

public class Main {

    public static void main(String[] args) {
//        Company company = new Company();
//        Company.Employee employee = company.new Employee();

        // 3
        Company.Employee employee = new Company.Employee();
    }
}

还是一个二货公司和这个公司的二货CEO还有一个员工。

  1. static,员工类变成静态内部类。
  2. 静态内部类不能再访问包裹类的非静态成员。
  3. 看起来正常的初始化方法:new Company.Employee()

一般来说,内部类不需要访问包裹类的非静态成员的时候。或者只是做一个工具给外部调用,而这些工具需要按照功能区分为的时候使用静态内部类。

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/5192206.html

时间: 2024-12-02 10:28:20

java的静态内部类的相关文章

教你使用Java的静态内部类

12.3.4 静态内部类 在上一小节我们讨论了内部类,即在一个类中包含有另外一个或者多个类(见本书12.3.3小节).与 内部类相似,静态内部类指在一个类的内部包含有另外一个或者多个静态类.例如: public class OuterClass { ... static class StaticInnerClass1 { //内部静态类 //只可以访问OuterClass的静态成员 ... } //StaticInnerClass结束 ... static class StaticInnerCl

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个题都自己测试给出了答案 ,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步! 以下内容来自这位前辈 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题

【转】Java知识点集锦(1~40)

1. 面向对象的特征有哪些方面? 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. 继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的<Java与模式>或<设计模式精解>中关于桥梁模式的部分). 封装

Java面试必看二十问题

大家都应该知道Java是目前最火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.究竟这些新入职的Java程序员是入坑还是入行呢?那就要看他们对于Java这门语言的看法了.不管如何,在入职之前,问题会要经过面试,那么Java面试题是怎么出的呢?下面罗列了20道常见初级Java面试题,简直是入职者必备! 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和

[JAVA &amp;#183; 初级]:12.内部类

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又分为:常规内部类.局部内部类.匿名内部类和静态嵌套类四种. 常规/局部内部类 包含在一个类的类体中的类. 扩展:外部类的概念:包含了内部类的类. 问:在内部类的方法中,是否可以直接访问外部类的成员? 答: 肯定的. 问:在外部类的方法中,是否可以直接访问内部类的成员? 案: 否定的. 问: 那,如何访问? 答: 先创建内部类的对象,再通过对象去访问. Demo <span style="font-size:18px

Java知识点集锦

我转载的地址:https://yq.aliyun.com/articles/54080?spm=5176.100239.blogcont53681.26.EPtb27#23 1. 面向对象的特征有哪些方面? 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. 继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软

图片-java中定义了一个静态内部类,在主函数中访问此内部类中静态函数时只能通过建立对象调用而不是类名调用

问题描述 java中定义了一个静态内部类,在主函数中访问此内部类中静态函数时只能通过建立对象调用而不是类名调用 图片简略,图片的说明解释了图片大意定义的外部类 外部类中的内部类,包括的静态函数 用类名调用方式调用内部类中静态函数 报错提示如图 用调用非静态函数方法尝试 编译运行成功 如图,为什么定义了一个静态内部类,在主函数中访问此内部类中静态函数时只能通过建立对象调用而不是类名调用,谁能帮忙解答疑惑? 解决方案 你的静态内部类是定义在外部类中的,它可以理解为寄生物,它的宿主是外部类,虽然静态类

Java多继承方法(名)冲突和成员内部类、局部内部类、静态内部类、匿名内部类

Java内部类     ①内部类是在一个java类体内,再定义一个类,即外部类的内部再定义一个类(相对的).      ②内部类分为四类:          成员内部类.局部内部类.静态内部类.匿名内部类      ③内部类作为外部类的一个成员,并依附于外部类而存在.包括:成员内部类.局部内部类.匿名内部类      ④内部类可以由private.public.protected.default访问修饰符和static修饰:      ⑤而外部类,即和public类平行的,只能有default修

Java编程中静态内部类与同步类的写法示例_java

java静态内部类 将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致.不过其细节方面仍然有很大的不同.具体来说,主要有如下几个地方要引起各位程序开发人员的注意.     (一)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的.也就是说,在非静态内部类中不可以声明静态成员.     (二)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是