zoukankan      html  css  js  c++  java
  • Java静态内部类

    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()

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

  • 相关阅读:
    Idea中配置tomcat启动maven项目读取指定的profile文件
    idea下将springboot项目打成war包发布到本地tomcat服务器上
    NameNode多目录配置
    Android 集成百度ocr报错[283506] Load jni so library error
    Android 集成科大讯飞语音识别(语音听写)报错‘创建对象失败,请确认libmsc.so放置正确,且有调用createUtility进行初始化’
    Android 集成百度地图,定位,导航,围栏,禁区功能
    Android 加载本地图片失败的问题
    Android 闪光灯测心率
    剑指offer(一)
    腾讯云重启慢
  • 原文地址:https://www.cnblogs.com/lev1/p/11198738.html
Copyright © 2011-2022 走看看