类的高级概念

访问修饰符

类的每一个成员(包括成员变量、方法和构造器)都有一个访问修饰符,用来判断谁可以访问该成员。访问修饰符允许我们在设计程序的时候,就考虑到谁可以访问一个对象的不同属性和行为。

Java为类中的成员提供了四种访问级别,按照访问权限由大到小排列如下:

  • 公开访问级别:使用public关键字修饰。用public关键字修饰的成员对外公开,即公开成员可以被任何其它对象访问。
  • 受保护访问级别:使用protected关键字修饰。受保护的成员可以被同一包中的类所访问,还可以被类的子类所访问,不管子类是在哪个包中。
  • 默认访问级别:没有访问修饰符。默认访问级别的成员可以被同一包中的其它类所访问。
  • 私有访问级别:使用private关键字修饰。它是四种访问修饰符中级别最低的。私有成员只有类本身可以访问,不对外公开。

:受保护和默认访问是相似的,因为二者都授予可以访问同一包中的其它类。受保护访问实际上比默认访问的限制更小,因为受保护访问也授予访问在包外的子类。

这里写图片描述

封装

封装是使类中的成员变量都是private,并提供public方法访问这些成员变量的技术。如果一个成员变量被声明为private,那么它就不能被其它类访问,从而隐藏了类中的成员变量。因此,封装也被称为数据隐藏。

封装的好处(优点):

  • 类的成员变量可以成为只读或者只写。
  • 类可以对储存在其成员变量中的内容有一个整体的控制。
  • 类的用户不知道类是如何存储数据的。类可以改变一个成员变量的数据类型,而类的用户不需要改变其代码。

静态类成员

我们已经多次重申Java是一门严格的面向对象编程语言,所有的Java代码都出现在类中。但是,有时如果一个成员变量或方法不与类的实例相关联更好,那么我们就应该全局类型的成员变量或方法。

关键字static允许成员变量或方法不与类的特定实例关联。通过关键字static声明的成员变量或方法可以被认为是全局的,任何其它类可以直接访问静态成员变量或调用静态方法,而不需要该类的一个实例。

类的静态成员经常被称为类成员,因为静态成员与类相关,而不是类的某个实例。非静态的成员变量和方法经常被称为实例成员,因为非静态的成员变量和方法只存在于类的实例中。

静态初始化块

除了声明静态成员变量和方法外,关键字static还有另外一种用法。Java类可以包含一个静态初始化块,静态初始化块是一组当类被JVM的类加载器加载时执行的语句。

类被类加载器加载一次,静态初始化块的作用是允许类执行任何所需的只需要发生一次的设置任务。

静态初始化块,需要放置在属性之下没构造之上。

static{
System.out.println("静态XXX初始化块内部");
}
  • 实例初始化块:主要用于初始化成员变量,一般是对象实例化时,才会执行,并且是实例一次,执行一次。它执行在构造函数执行代码的第三步到第四步之间。
    当然可以使用有参构造替代实例初始化块。
  • 静态初始化块:主要用于在类加载时,做一些前期的准备工作,比如:检查数据库连接是否正常,检查配置文件是否存在,或者提前读取某些文件内容到内存中来,它的执行,是在类的加载时就开始执行。

内部类

我们已经知道,在类内部可以定义成员变量与方法。在Java中,还可以在类的内部定义类。这种在类的内部定义的类,称为内部类。内部类所在的类称为外部类。
Java中的内部类可以分为四种,分别是:静态内部类、成员内部类、局部内部类、匿名内部类。

类型 说明
静态内部类 作为类的静态成员,存在于某个类的内部
成员内部类 作为类的成员,存在于某个类的内部
局部内部类 存在于某个方法内部的类
匿名内部类 存在于某个类的内部,但是无类名的类

成员内部类

  1. 定义在类的内部,作为类的组成。
  2. 成员内部类的地位:等同于全局变量的地位。
  3. 成员内部类,内部可以使用外部类所定义的所有的成员(成员变量、成员方法)
  4. 成员内不能的访问:必须要通过外部类的实例调用,才可以访问内部类
  5. 特例:静态内部类:

    • 概念:用关键字static修饰的成员内部类
    • 特点:将该内部类与对象脱离关系,直接上升为类的关系,效果等同于类变量、类方法。

局部内部类

  1. 定义在方法的内部,作用范围也仅限为这个方法
  2. 局部内部类,同样跟局部变量一样,不能添加访问修饰符。
  3. 局部内部类,也无法被外部方法访问。
  4. 局部内部类,内部无法通过this·访问外部类的成员,但是可以通过“外部类·this·”访问。
  5. 特例:匿名内部类

    • 概念:匿名内部类是一种特殊的局部内部类,匿名内部类没有类的名字,也没有类的专门声明
    • 这种类的类声明与对象的创建何为一体,看起来像在产生对象,但是除了产生对象,实际上它还声明了这个类。
    • 匿名内部类是一个为了唯一对象而定义的一个类,

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Loveaileefe/article/details/82563416
今日推荐