当前位置: 首页 > article >正文

0426 java内部类

静态内部类

使用static修饰的内部类我们称之为静态内部类,我们要知道只要是static修饰的类那它一定是内部类,不可能是外部类。 静态内部类与非静态内部类之间存在一个最大的区别,非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类的对象,但是静态内部类却没有。没有这个引用就意味着:

  • 它的创建不需要依赖于外围类的对象
  • 它不能使用任何外围类的非static成员变量和方法(因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象)见下面例子
  • 静态内部类内允许有static属性、方法;
public class OuterClass {

    String outerField = "Outer field";
    static String staticOuterField = "Static outer field";

    class InnerClass {
        void accessMembers() {
            System.out.println(outerField);
            System.out.println(staticOuterField);
        }
    }

    static class StaticNestedClass {
        void accessMembers(OuterClass outer) {
            // Compiler error: 不能访问Outer class的非static变量
            // System.out.println(outerField);
            System.out.println(outer.outerField);
            // 可以通过创建外部类的对象来访问外部类的非static变量
            System.out.println(staticOuterField);
        }
    }
}

为什么只有成员内部类能加static,外部类不能加?
静态内部类的应用场景??

成员内部类 (非静态成员内部类)

  1. inner和outer有相同名称变量或方法时,默认使用的是谁的?
    inner的。
  2. 第一题中,如何调用outer的变量或方法?
外部类.this.成员变量
外部类.this.成员方法
  1. 如何创建一个inner对象?
    一般有以下两种:
public class OutClass {
 
    private InnerClass getInner() {
        return new InnerClass();
    }
 
    public class InnerClass{}
 
    public static void main(String... str) {
        OutClass out = new OutClass();
 
        InnerClass inner1 = out.getInner();
        InnerClass inner2 = out.new InnerCLass();
    }
}

参考:
添加链接描述


http://www.kler.cn/a/15601.html

相关文章:

  • 李秀贤主演警匪片《蓝色霹雳火》
  • Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建
  • 【c++笔试强训】(第十一篇)
  • 活着就好20241118
  • MSTP知识点
  • 计算机网络在线测试-概述
  • 针对Vue前后端分离项目的渗透思路
  • 【Python_Opencv图像处理框架】信用卡数字识别项目
  • ORACLE常用命令
  • java基础+注解笔记【狂神说java】
  • Go基础篇:类型系统
  • “数字中国·福启海丝”多屏互动光影艺术秀27日在福州举办
  • Windows更新【bug】
  • (一)Kubernetes - 介绍
  • Disruptor --优雅的使用
  • 国民技术N32G430开发笔记(5)- 基本定时器TIM6的使用
  • 外网SSH远程连接linux服务器,看这一篇就够了
  • 动态内存管理
  • 【zotero】从知网万方维普WOS等数据库上导出格式引文-引文格式到zotero中
  • 【RPA开发】lxml 库之 etree 使用详解
  • AI智能课程:第五讲chatGPT搞定APP小程序
  • 【VM服务管家】VM4.x算法模块开发_4.2 联合OpenCV开发
  • 推荐一些免费可用的热门 API
  • JAVA面试中遇到的那些坑,80%的人都种过招
  • 【web基础】html常用标签+作品展示
  • 如何在自己的Maven工程上搭建Mybatis框架?