最近在看Java相关知识的时候发现Java中同时存在内部类以及非公有类概念,而且这两个类都可以不需要单独的文件编写,可以与其他类共用一个文件。现根据个人总结将两者的异同点总结如下,如有什么不当地方,欢迎大家指正。

1、非公有类和内部类对应的文件名与这两种类的类名无关;

2、一个源文件中可以包含多个非公有类或者内部类;

3、非公有类不能使用public关键字(一般前面不加关键字),内部类可以使用public、private、protected关键字;

4、非公有类中可以添加0到多个内部类;

5、非公有类是包可见的,一个包中只能有一个同名非公有类,所以在包外无法调用非公有类;但是在包外可以通过包中外部类对象调用该包中的内部类

6、非公有类在源文件中直接调用,例如,在源文件Test.java中存在一个公有类Test,一个非公有类priTest,那么可以使用preTest pt = new preTest() 实例化一个非公有类的对象;而对于内部类,在非静态方法外部必须使用外部类的对象来调用内部类的构造方法,例如在源文件Outer.java中存在一个外部类Outer,一个内部类Inner,那么使用以下方式调用内部类:Outer out = new Outer(),Inner in = out.new Inner()。在非静态方法内部直接使用new类实例化内部类对象,即Inner in = new Inner()

7、非公有类只能通过创建公有类对象实现对于公有类的成员变量的使用,而内部类可以随意使用外部类的成员变量(包括私有变量)而不用生成外部类的对象。

8、如果源文件中有一个公有类和多个非公有类,在编译的时候编译器会为文件中每个类创建一个单独的.class文件,文件名就是对应的类名(所以一个包中只能有一个同名的非公有类);假如一个文件中有一个外部类,多个内部类,则在编译的时候也会为每个类创建一个.class文件,但是内部类对应的文件名为"外部类$内部类.class",$代表这个内部类所属的外部类。

9、在内部类中访问变量有三种形式:
a、变量名--访问局部变量;
b、this.变量名--访问内部类变量;
c、外部类名.this.变量名--访问外部类变量。

如果内部类没有同名成员变量和局部变量,内部类可以直接通过变量名访问外部类变量,而不用指定"外部类名.this.变量名"。

10、如果一个内部类是静态内部类,使用关键字static,则内部类只能访问外部类的静态成员变量,同时可以将"外部类名.内部类名"看成一个整体,直接new出内部类的对象,而不用先生成外部类对象,例如外部类为Out,静态内部类为In,则可以使用Out.In in = new Out.In()直接创建内部类对象。

11、如果一个内部类是“私有的”,则该类只能在外部类中生成对象进行操作,而无法再使用Out.In in = new Out().new In()生成内部类对象。

java 内部类与外部类的区别的更多相关文章

  1. java内部类 和外部类的区别

    java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...

  2. java:内部类与外部类的区别和联系

    注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...

  3. Java内部类与外部类的那些事

    昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类) ...

  4. Java内部类和外部类的通信探索

    1.内部类访问外部类的成员和方法 在内部类中,可以无障碍地访问外部类的所有成员和方法. 在下面的实验代码中,可以看到,内部类sl可以访问外部类的私有成员:sz 和 cur. 同时可以访问私有方法:pr ...

  5. java内部类和外部类

    1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world& ...

  6. Java内部类与外部类

    错误提示: 没有任何类型 TestThread 的外层实例可访问.必须用类型 TestThread 的外层实例(例如,x.new A(),其中 x 是 TestThread 的实例)来限定分配. pu ...

  7. Java内部类持有外部类的引用详细分析与解决方案

    在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...

  8. 从字节码的角度看Java内部类与外部类的互相访问

    Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...

  9. Java内部类引用外部类中的局部变量为何必须是final问题解析

    今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...

随机推荐

  1. Android—ZXing二维码扫描遇到的问题

    最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...

  2. python的基础知识

    Python文件命名时不要有中文,不然在dos中不能执行 D:\Program Files\Py>Python hellyy.pyYear:2016Month(1-12):1Day(1-31): ...

  3. 使用NSAssert()和NSParameterAssert调试程序

    NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异 ...

  4. CSS3-06 样式 5

    浮动(Float) 关于浮动,要说的可能就是:一个设置了浮动的元素会尽量向左移动或向右移动,且会对其后的元素造成影响,其后的元素会排列在其围绕在其左下或右下部.似乎就这么简单,但是在实际开发中,它应用 ...

  5. TextInputLayout setError() setErrorEnable()

    public void afterTextChanged(Editable s) { if (textInputLayout.getEditText().getText().toString().le ...

  6. ORACLE 11g 数据库体系结构图

    ORACLE 11g 的数据库体系结构图,非常全面.系统.高屋建瓴的整体介绍了ORACLE 11g 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACL ...

  7. Jquery操作cookie,实现简单的记住用户名的操作

     一.jquery.cookie.js介绍  jquery.cookie.js是一个基于jquery的插件,一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cook ...

  8. openstack云5天资料

    在网上看到有个人的博客,写了个openstack云5天学习资料.对于英文不怎么好的童鞋来说,感觉还可以.可以对openstack有所了解和认识,对后续openstack更加深入的学习有很大的帮组.   ...

  9. echo命令详解

    echo: echo [-neE] [arg ...] echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加上换行号. Options: -n 不在最后自动换行 -e 使用 ...

  10. FineReport如何连接和使用MongoDB数据库

    随着NoSQL数据库越来越流行,MongoDB数据库作为NoSQL数据库中的领头羊,使用也越来越广泛.为此,FineReport V8.0版本提供了数据连接和数据集接口,可以通过开发一款可以连接和使用 ...