首先明确,类是放在文件里的,在文件里面的不同位置就有不同的作用,就是不同类型的类。

1, 顶级类or外部类:包括两种,一个文件中与文件名同名称的类我们称作顶级类(也是外部类),如果在一个文件中的一个类,与顶级类处于同一层级(也就是不是顶级类的内部类,也不是匿名内部类),我们把他看做外部类处理。

  从作用范围的角度来说,对于顶级类(外部类)来说,有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:默认(default)和public。这里的default修饰符可以简单理解为friendly,但是friendly是Java的修饰符,却不是Java类的修饰符。  从功能的角度来说,abstract修饰符都可以添加。

2, 内部类:顾名思义,在某个类的内部

  对于内部类来说,我们把他看做外部类的对象,这个时候内部类所用的修饰符与对象所能使用的修饰符是一样的。按照作用范围:全局,本包,本类,分别对应三种修饰符public,protected,private

  小问题1:如果内部类不是static的,那么static方法中不允许直接创建该类的对象。

  原因要从"把内部类当做外部类的对象"的角度来考虑。我们知道如果一个外部类的静态方法中使用到类的对象,那么这个对象也必须是静态的,所以这个类不是静态的就不能直接新建对象也就理所当然了。从运行角度来讲,内部类的特点是可以直接访问外部类的成员,因此如果静态类中可以创建内部类的对象,那么此时内部类的对象调用外部类的成员时就会出问题(因为这时候还没有外部类的对象,哪来的外部类的对象的成员变量呢?)。

  小问题2:内部类不是static修饰的,那么内部类的成员变量和成员函数不能声明是static的。

  原因很简单:静态成员变量和静态成员变量都是要在加载类的时候就加载到内存的,没有这个类的对象也是可以调用的。那现在再想这个问题外部类(不能用static修饰)没有被加载,而他的内部类(也算是外部类的成员)的成员却先被加载了,这是不正常的。

------------------------ 分割线 ---------------------

上面的内容实在太多,代码表现的话会很多,很杂,建议亲自尝试!!

------------------------ 分割线 ---------------------

3, 匿名内部类:匿名内部类也就是没有名字的内部类

  正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。

  详见:java中的匿名内部类总结(写的很全面,也很详细)

最新文章

  1. vtkTransform实例 1
  2. js 的复制和引用 (传值和传址)
  3. Joomla软件功能介绍与开源程序大比拼Joomla,wordpress,Drupal哪个好?
  4. XAF学习笔记1
  5. C#中的var类型
  6. (收藏)C#实现截屏
  7. JAX-WS
  8. linux两种增加交换分区(swap)的方法
  9. 初学者学Java设计模式(一)------单例设计模式
  10. mit java open course assignment #2
  11. poj3100---求根问题
  12. Http请求头中的字段理解
  13. poj 2728 Desert King(最小比率生成树,迭代法)
  14. Codeforces 420 B. Online Meeting
  15. Java调度框架Quartz简单示例
  16. asp.net core2.0网站的环境搭建和网站部署
  17. VS2015如何连接mySQL数据库图文
  18. 【并发编程】【JDK源码】CAS与synchronized
  19. drone的pipeline原理与代码分析
  20. Spark升级--在CDH-5.15.1中添加spark2

热门文章

  1. shell通过ping检测整个网段IP的网络状态脚本
  2. ubuntu下搭建ecshop
  3. unity TileMap 简述
  4. jQuery事件篇---事件对象
  5. Hadoop源码学习笔记(6)——从ls命令一路解剖
  6. Java开发相关官方存档下载地址
  7. Java求一个数组中的最大值和最小值
  8. I/O概述
  9. java 自定义 LRU(最近最少使用)策略 实现 缓存机制
  10. js 对象数组去重