最近在看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. UITextFieldDelegate协议

    很多人都认为UITextField很简单,为什么会写这个协议呢? 因为在实际开发中可能会用到: 比如要做到下图的效果: 文本框下面的下划线的颜色要随着输入的状态变化: 点击对应的文本框,其下面的线条变 ...

  2. SharePoint 2013 图文开发系列之可视化WebPart

    有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 20 ...

  3. HTML5-03 页面布局

    概述 HTML 文档中的元素是一个接着一个排列的,只是简单地在在块级元素的前后加上拆行,是一种流水布局.但是,我们所见到的 Web 页面按照一定的规则布局排版的(通常是多列的),所以就要借助一定的方法 ...

  4. 【转】Hadoop命令大全

    Hadoop命令大全 本节比较全面的向大家介绍一下Hadoop命令,欢迎大家一起来学习,希望通过本节的介绍大家能够掌握一些常见Hadoop命令的使用方法.下面是Hadoop命令的详细介绍. 1.列出所 ...

  5. RMAN备份脚本一列分享

    在ORACLE数据库中,RMAN备份的脚本非常多,下面介绍一例shell脚本如何通过RMAN备份,以及FTP上传RMAN备份文件以及归档日志文件的脚本. fullback.sh 里面调用RMAN命令做 ...

  6. ORACLE 解锁、找回表和找回程序语句

    最近在工作中同事们经常遇到锁表.误删表和程序覆盖的情况,现总结下遇到这三种情况的解决方案: 1.暴力删除锁表 当表被某些语句占用无法停止,或者出现事物阻塞的情况下,需要手动删除锁(万不得已的情况下用) ...

  7. android 关闭/开启软件键盘(hideSoftKeyboard)

    /** * 隐藏软键盘 * @param v */ public static void hideSoftKeyboard(View v) { InputMethodManager imm = (In ...

  8. 关于PB调用Microsoft Web Browser控件的一些问题

    Microsoft Web Browser控件是WINDOWS系统自带的控件,一般不需要单独安装,由于工作的需要,把使用中遇到的问题记录一下,以便查阅. 插入控件: 环境为PB12.0,insert- ...

  9. 推荐一款 chrome SSH 插件 - Secure Shell

    http://blog.csdn.net/jizhongchun/article/details/8519413 导读:我就是一个Chrome Fans.最近发现一款google官方出的SSH插件 - ...

  10. 博客代码美化(SyntaxHighlighter)

    这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! ...