4静态内部类(Static Inner Classes)

马克-to-win:这里的内部类的static,意思是它可以不用实例化外部类,就自己单独被实例化,单独存在(有点像生活中的办公室和办公桌(独立于办公室,办公桌也可以存在)),静态方法不就不用实例化类,直接用吗?就实例化而言,静态内部类和外层类之间完全没有任何关系,相互独立。谁爱怎么样,就怎么样!谁想实例化谁就实例化, 不管对方的感受。当然要想让它们有关系,也可以,见下面例子中的tc.core=nc;

重要语法:马克-to-win:1)静态内部类里的任何方法(静态或非静态)不允许访问外层类里的实例属性或方法。(因为外层类本身可能没有被实例化),想访问通过下面例子中的tc.core=nc。2)静态属性和方法无论在外层类还是静态内部类, 都可以被任意调用(对方或自己或测试类)。

例2.4

class ShellMark_to_win {
    static  int ss_i ;
    private int si_k;
    Core core;
    static class Core {
        static  int cs_m ;
        int ci_j;
        public Core(int j) {
            ss_i = 2;//可以直接访问外层类的静态域
            cs_m=3;
            //k=9;//马克-to-win:compile error,static class can not refer to a non-static field,因为静态内部类可以脱离外层实例而单独存在,静态内部类可能已经被实例化,而外层类没有被实例化,外层的实例变量就不能被访问。像原来的静态 方法似的,不能访问实例变量
            this.ci_j = j;
        }
        public String toString()
        {
            //ShellMark_to_win.changTopValue();//可以访问外层类的静态方法
            //insMethod();//不能从静态类里访问外层类的实例方法。
            return "ci_j=" + ci_j + ";ss_i=" + ss_i+" ;cs_m="+cs_m;// 马克-to-win:这里不能写+k,因为cocs_mpile error,static class can not refer to a non-static field,像原来的静态方法似的,不能访问实例变量
        }
        static int changValue()
        {   //inscs_method();//不能从静态类里访问实例方法。
            cs_m=cs_m+2;
            ss_i=ss_i+2;
            //k=9;//马克-to-win:这里不能写+k,因为compile error,static class can not refer to a non-static field,像原来的静态方法似的,不能访问实例变量
          //  ShellMark_to_win.changTopValue();完全可以调用
            System.out.println("cs_m is "+cs_m+" ss_i is"+ss_i);
            //ci_j=ci_j+2;//错误, 静态方法无法访问非静态变量
            return cs_m;
        }
    }
    public String toString() {
        //Core.changValue();//可以访问静态内部类的静态方法     
        return "si_k=" + si_k + ";ss_i=" + ss_i+"cs_m is "+Core.cs_m;
    }
    void insMethod()
    {
     
    }
    static int changTopValue()
    {
        ShellMark_to_win.Core.cs_m=ShellMark_to_win.Core.cs_m+2;
        ss_i=ss_i+2;
        return ss_i;
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(ShellMark_to_win.ss_i+" "+ShellMark_to_win.Core.cs_m);
        System.out.println(ShellMark_to_win.changTopValue());
        System.out.println(ShellMark_to_win.Core.changValue());
        ShellMark_to_win tc = new ShellMark_to_win();
        System.out.println("tc is "+tc);
/* 马克-to-win:since Core is static member, we can use in this way.不用实例化外部类, 就可以单独存在 */
        ShellMark_to_win.Core nc = new ShellMark_to_win.Core(5);
/*加上下面两句话,可以让外层类和内部类产生联系而且相互改值*/       
   //     tc.core=nc;
   //     tc.core.ci_j=100;
        System.out.println("nc is "+nc);
        nc.changValue();
        System.out.println("tc is "+tc);
    }
}

更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/103109972

什么是静态内部(Static Inner)类,语法要注意什么?的更多相关文章

  1. C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。

    除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适 ...

  2. java--抽象类实例(包含静态内部抽象类)

    静态内部抽象类可以被继承. public class testfather { public static void main(String[] args) { person.talk2 a = ne ...

  3. 静态关键字static(2)

    static关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static ...

  4. 静态导入Static import

    静态导入Static import 要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类. 使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名 ...

  5. 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式

    一.static关键字 1.1.static关键字 静态:static用法:是一个修饰符,用于修饰成员(成员变量,成员函数)static 修饰的内容,所有对象共享当成员被静态修饰后,就多了一个调用方式 ...

  6. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  7. 深入解析ES6 更易于继承的类语法的使用

    和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 ...

  8. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  9. 【ES6】更易于继承的类语法

    和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 ...

  10. java中的静态变量---static

    用static修饰符修饰的数据成员,并不是属于那个对象的,而是属于类.静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好. 当然它也是被保存到类的方法中的,而不是对象内存中,大家都是可以访 ...

随机推荐

  1. JZ-033-丑数

    丑数 题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. ...

  2. Vue3中setup语法糖学习

    目录 1,前言 2,基本语法 2,响应式 3,组件使用 3.1,动态组件 3.2,递归组件 4,自定义指令 5,props 5.1,TypeScript支持 6,emit 6.1,TypeScript ...

  3. laravel7 搜索分页

    html: <form action="{{url('http://www.yanbing.com/fang/index')}}" method="get" ...

  4. 一比一还原axios源码(四)—— Axios类

    axios源码的分析,到目前为止,算上第0章已经四章了,但是实际上,还都没有进入axios真正的主线,我们来简单回顾下.最开始我们构建了get请求,写了重要的buildURL方法,然后我们处理请求体请 ...

  5. CF587F&CF547E题解

    这两道题好像啊 贡献一种使用SAM和ACAM草两道题的方法 下面假装有 \(O(\sum |S|=m)=O(n)\). 你看看,这CF换过多少个出题人啦?换汤不换药啦!其实这两道题是同一个人出的 CF ...

  6. Windows原理深入学习系列-信任等级检查

    这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ...

  7. MySQL基础_索引

    MySQL 索引(入门): 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些 ...

  8. Linux kernel cfg80211_mgd_wext_giwessid缓冲区溢出漏洞

    受影响系统:Linux kernel <= 5.3.2描述:CVE(CAN) ID: CVE-2019-17133 Linux kernel是开源操作系统Linux所使用的内核. Linux k ...

  9. ctf之计算器

    题目信息如下: 打开环境,发现是一道简单的计算题 只能输入一位数字 F12查看源码发现作者将最大长度设置为1,我们将最大长度修改了即可 输入答案即可得到flag

  10. jdk源码阅读笔记

    1.环境搭建 http://www.komorebishao.com/2020/idea-java-jdk-funyard/ 2. 好的源码阅读资源 https://zhuanlan.zhihu.co ...