最近在看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. vmwawre 虚拟机优化配置

    vmware虚拟机如何设置不当的话会造成运行速度慢,并影响主机运行,甚至会出现死机. 一下是提高vmware虚拟机运行速度的几个技巧, 文章来自:http://blog.csdn.net/shanzh ...

  2. Java 内部类的阐述

    创建一个Computer抽象类:用来在Test类中创建匿名抽象类 package com.zhiyou; public abstract class Computer { int a = 1; /** ...

  3. Fragment配合RadioGroup实现点击切换布局

    这里用了 compile 'com.jakewharton:butterknife:7.0.1' compile 'org.greenrobot:eventbus:3.0.0' MainActivit ...

  4. Android 监听ScrollView的滑动

    我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部.可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged ...

  5. java对象与json串互转

    1:java对象与json串转换: java对象—json串: JSONObject JSONStr = JSONObject.fromObject(object); String str = JSO ...

  6. ORACLE临时表总结

    临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...

  7. ORACLE OLAP错误ORA-06512: at "SYS.OLAPIHISTORYRETENTION"

    刚刚安装了ORACLE 10g R2后,启动数据库时发现告警日志有如下错误: Database Characterset is UTF8 replication_dependency_tracking ...

  8. SQL Server 2012 The report server cannot open a connection to the report server database

    案例环境: 操作系统版本:    Windows Server 2012 R2 Standard 数据库版本  :    SQL SERVER 2012 SP2 案例介绍: 今天进入一台新安装的SQL ...

  9. 个人Github-欢迎交流探讨

    Github annsshadow

  10. 图概PHP生命周期

    一图胜千言~ 这是之前根据网上大牛们的分析和跟着阅读了一点源码而做出来的总结.因为那时候困于对整个过程没有一个全面的认识,所以想自己做个图吧,那样看起来要更加直接了当,说不定还能会有一个更好的认识和更 ...