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

关于Java内部类的初始化

Java类的位置

1、在同个Java文件中,但不是内部类

public class Test {

}
class T{

}
  • 这里的T不是内部类,只是在Test.java文件的内部而已。
  • T 的修饰符只允许使用“public”、“abstract”和“final”。
  • T的实例化过程和主类没有区别
T t = new T();

就可以,在本Java文件和其他Java文件都是这样实例化。但是要注意,由于没有权限修饰符是默认包访问权限,所以只能在包内实例化。

2、常规内部类

public class Outter{
    class Inner {}
    public void fun(){
        Inner in = new Inner();
    }
    public void fun2(){
        Outter out = new Outter();
        Outter.Inner in = out.new Inner();
        Outter.Inner in2 = new Outter().new Inner();
    }
}

要实例化内部类对象,必须先有外部类对象,通过外部类对象.new 内部类();来实例化内部类对象,在其他文件或者其他包内都是这样,只是要能在其他包实例化的话,内部类Inner还得加上修饰符public。

3、静态内部类

class Outter {
    private static int age = 12;
    static class Inner {
        public void print() {
            System.out.println(age);
        }
    }
}

public class test1 {
    public static void main(String[] args) {
        Outter.Inner in = new Outter.Inner();
        in.print();
    }
}

实例化静态内部类和实例化常规内部类有类似的地方,而不同之处在与静态内部类由于是静态的,所以不需要外部类对象就可以实例化,如上例Outter.Inner in = new Outter.Inner();
在其他Java文件也是这么实例化的。

4、局部内部类

    public class A {  
        class B {  

        }  

        public void pint() {  
            class C {  
            }  
            new C();  
        }  

        public void pint(boolean b) {  
            if (b) {  
                class D {  
                }  
                new D();  
            }  
        }  
    }  

局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内,所以只能在方法或者该作用域内实例化。

5、匿名内部类

new ClassOrInterfaceName(){
    /*类体*/ }

匿名内部类可以继承一个类或实现一个接口,这里的ClassOrInterfaceName是匿名内部类所继承的类名或实现的接口名。但匿名内部类不能同时实现一个接口和继承一个类,也不能实现多个接口。如果实现了一个接口,该类是Object类的直接子类,匿名类继承一个类或实现一个接口,不需要extends和implements关键字。

相关文章:

  • noi 1.5 45:金币
  • nginx location配置
  • ArcGIS Engine 编辑- IWorkspaceEdit
  • Access-Control-Allow-Origin与跨域
  • linux下alsa架构音频驱动播放wav格式文件
  • [转].NET Core配置文件加载与DI注入配置数据
  • Makefile注意点总结
  • 深入浅出Puppet(一)
  • Mirco F-measure and Macro F-measure
  • mac上使用zsh配置环境变量
  • find用法积累
  • c# 静态变量【学习笔记】
  • linux内核栈与用户栈【转】
  • NodeJS Stream 二:什么是 Stream
  • 枚举转中文,通过反射方法与描述的方式获取
  • 【前端学习】-粗谈选择器
  • 【刷算法】求1+2+3+...+n
  • C++入门教程(10):for 语句
  • CEF与代理
  • CentOS 7 防火墙操作
  • C学习-枚举(九)
  • ES10 特性的完整指南
  • flask接收请求并推入栈
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaWeb(学习笔记二)
  • Just for fun——迅速写完快速排序
  • Next.js之基础概念(二)
  • Objective-C 中关联引用的概念
  • Promise面试题2实现异步串行执行
  • ubuntu 下nginx安装 并支持https协议
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 开源地图数据可视化库——mapnik
  • 来,膜拜下android roadmap,强大的执行力
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 自动记录MySQL慢查询快照脚本
  • 最近的计划
  • ###STL(标准模板库)
  • (poj1.3.2)1791(构造法模拟)
  • (八)c52学习之旅-中断实验
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (剑指Offer)面试题34:丑数
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (九)信息融合方式简介
  • (六)Hibernate的二级缓存
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)linux 命令大全
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET 指南:抽象化实现的基类
  • .net实现客户区延伸至至非客户区
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net中应用SQL缓存(实例使用)
  • ??myeclipse+tomcat
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?