【Java】基础入门(十七)--- 类

本文详细介绍了Java中的各类,包括顶级类、嵌套类(内部类、静态嵌套类)、成员类、局部类和匿名类的区别与特性。重点阐述了静态嵌套类的独立性以及内部类的不同类型。
摘要由CSDN通过智能技术生成

1. 类

        Java有各种各样类,如:顶级类、嵌套类、内部类、成员类、局部类(本地类)、静态类、匿名类、文件类以及这些组合起来的称呼类,成员内部类,成员匿名类,成员嵌套类,匿名内部类等


1.1 顶级类

顶级类(Top Level Class)是在编译单元中直接声明的类。

A top level class is a class declared directly in a compilation unit. 1

或者说非嵌套类即为顶级类

public class Main( )
class Test( )

在一个.java 文件中直接申明的类就是顶级类,这个类不嵌套在任何其他类中。

在顶级类中如果是与文件名相同的public 类,也可称为: 文件类(File class)

  • 文件类

由于这个类与文件名直接对应,可以看作是这个文件的类,因此也可以称之为文件类。

在声明顶级类时,如果包含protectedprivate、或者static 关键字都会产生一个编译时错误。


1.2 嵌套类

        嵌套类(Nest Class)是指其声明出现在另一个类或接口声明的主体中的任何类。嵌套类可以是内部类、成员类、局部类或匿名类。

A nested class is any class whose declaration occurs within the body of another class
or interface declaration.

        嵌套类中还可以声明类,被声明的类也是嵌套类。简单的说就是:不是顶级类就是嵌套类。嵌套类声明所在的类被称为外部类。

嵌套类可分为两种:

  • 静态嵌套类(Static Nested Class
           用static修饰符声明在外部类里面的类,这个嵌套类可以不依赖与外部类实例而独立存在。
  • 内部类

1.3 静态嵌套类

         在Java中,静态嵌套类(Static Nested Class)是声明另一个类中的用Static 修饰的嵌套类。

public class OuterClass{
	static class StaticNestedClass { }  // 静态嵌套类
}

静态嵌套类的特点是:

  1. 可以使用static 修饰符修饰,表示这个嵌套类可以独立与外部类存在;
  2. 可以不需要外部类的实例而被直接实例化;
  3. 不能直接访问外部类的非静态成员属性和方法;
  4. 外部类需要使用嵌套类名.静态方法 来访问静态嵌套类;
  5. 编译时会将静态嵌套类编译成 OuterClass$StaticNestedClass.class 文件;
  6. 静态嵌套类常一般用于无需访问外部类成员的工具类

实际上,静态嵌套类在行为上是一个顶级类,为了封装方便,它已经嵌套在另一个顶层类中。

1.4 内部类

内部类(Inner Class)是一个嵌套类,它不是显示或隐式静态的。即非静态嵌套类即为内部类。

An inner class is a nested class that is not explicitly or implicitly static

内部类包括: 非静态成员类( non-static member class )、局部类(Local class)、匿名类(anonymous class

以下嵌套类是隐式静态的,因此不是内部类:

  • 成员枚举类( member enum class
  • 局部枚举类(local enum class
  • 成员记录类( member record class
  • 接口中的成员类(member class of an interface

内部类可以定义在块({})、构造器( Constructor )、方法( method )、初始化器( Init ializer )中

1.5 成员类

成员类( Member Class )是一个类,其声明直接包含在另一个类或接口声明的主体中。成员
类可以是普通类、枚举类或记录类

A member class is a class whose declaration is directly enclosed in the body of
another class or interface declaration

成员类可以使用static修饰,从技术角度讲成员类应该还包括静态嵌套类

1.6 局部类(本地类)

局部类( Local Class )是声明在块( Block )中的类。也就是在块( {} )、构造器( Construc tor )、方法( method )、初始化器( Initializer )中声明的类

A local class is a nested class (§8 (Classes)) whose declaration is immediately
contained by a block (§14.2).

局部类不能使用 publicprotectedprivatestatic 修饰。

1.7 匿名类

匿名类( Anonymous Class )就是没有名称的类,其名称由Java编译器给出,一般是形如:
部类名称+$+匿名类
顺序,没有名称也就是其他地方就不能引用,不能实例化,只用一
次。所有的匿名类都是内部类。

An anonymous class declaration is automatically derived from a class instance
creation expression by the Java compiler. (jls11)

匿名类不能具有显式声明的构造函数

2. 总结

  • 嵌套类:声明在类内部的类。

    • 静态嵌套类,唯一的一种静态类

    • 非静态嵌套类即为内部类

  • 成员类:位于类内部但不包括位于块、构造器、方法、初始化器内的类

  • 局部类:声明在块( {} )、构造器( Constructor )、方法( method )、初始化器( Initializer )中

  • 匿名类:类内无名称类

    • 成员匿名类
    • 局部匿名类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值