类的高级概念

              **类的高级概念**

这里写图片描述

   **访问修饰符**
类的每一个成员(包括成员变量、方法和构造器)都有一个访问修饰符,用来判断谁可以访问该成员。访问修饰符允许我们在设计程序的时候,就考虑到谁可以访问一个对象的不同属性和行为。
例如,假如我们给类添加一个方法,用于执行重复的任务,并且该方法只能被本类中的其它方法调用。那么,我们就可以将该方法声明为私有的,从而对本类以外的任何类隐藏该方法。
同样,我们也可能需要将一个方法对所有其它对象都可用。那么,我们就必须将该方法设为public公用的。
Java为类中的成员提供了四种访问级别,按照访问权限由大到小排列如下:
公开访问级别:使用public关键字修饰。用public关键字修饰的成员对外公开,即公开成员可以被任何其它对象访问。
受保护访问级别:使用protected关键字修饰。受保护的成员可以被同一包中的类所访问,还可以被类的子类所访问,不管子类是在哪个包中。
默认访问级别:没有访问修饰符。默认访问级别的成员可以被同一包中的其它类所访问。
私有访问级别:使用private关键字修饰。它是四种访问修饰符中级别最低的。私有成员只有类本身可以访问,不对外公开。

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

   **静态类成员**
关键字static允许成员变量或方法不与类的特定实例关联。通过关键字static声明的成员变量或方法可以被认为是全局的,任何其它类可以直接访问静态成员变量或调用静态方法,而不需要该类的一个实例。
类的静态成员经常被称为类成员,因为静态成员与类相关,而不是类的某个实例。非静态的成员变量和方法经常被称为实例成员,因为非静态的成员变量和方法只存在于类的实例中。
方法区的代码块部分除了常量池,还有一个区域叫静态区域,和常量池一样,在类加载时就把静态区域的代码加载在编译器里。
封装工具类的工具方法时用static。
static是可选修饰符:

在修饰全局变量时,全局变量可以被称为静态变量,或者类变量,经过static修饰的全局变量,已经与对象无关,直接上升为类变量,它的数据已经不存在每个单独的对象身上,而是存在方法区中的数据块的静态区域中,非静态成员变量,必须要等待实例化对象之后,才可以调用,而静态成员变量,在类加载完成之后,就可以直接调用。
在修饰方法时,对应的方法可以被称为类方法,跟类变量一样,同样与对象已经无关,直接上升为类的行为,非静态方法,必须要等到实例化对象之后,采用调用,而静态方法,在类加载之后,就可以直接调用。

static修饰的内容存在于内存的时机是:类加载的时候
static在修饰全局变量时,一般用于修饰常量,主要目的:将变量定义在静态区域中,而不是每个对象的自身
static在修饰方法时,一般用于修饰工具类的工具方法,比如:Math类,Arrays类,StringUtils类,包括超级数组类

静态方法中,不能访问非静态成员(属性,也指方法) 其原因是:
1、  静态方法在加载时,非静态属性、方法根本就还没调用
2、  假设可以调用,那么如果存在成千上万个对象,我在调用谁的属性,或者是调用谁的行为?

static无法修饰构造函数,因为static修饰的属性,或行为都与对象无关,但是构造是专门产生对象的。

初始化块,需要放置在属性之下,构造之上
静态初始化块在加载时执行一次。

初始化块:实例初始化块、静态初始化块
实力初始化块:主要用于初始化成员变量,一般是对象实例化时,才会执行,并且是实例一次,执行一次。它执行在构造函数执行的代码的第3步到第4步之间。当然可以使用有参构造,替代实例初始化块

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

兄弟类的访问修饰符只能是默认,还可以用final修饰符。

1篇Java文件中可以定义多种类型的类:兄弟类、成员内部类、静态内部类、局部内部类、匿名内部类
Java文件如果内部包含了多个类,产生类文件的特点:
1、 Java文件中,包含几个类,就对应的产生几个相应的类文件
2、 Java文件的名称,不一定和类文件的名称保持一样,兄弟类的命名规则就是 兄弟类.class;成员内部类类文件的命名规则就是“外部类$内部类.class”

局部内部类,同样跟局部变量一样,不能添加访问修饰符
局部内部类,无法被方法外部访问
局部内部类类文件的命名规则就是“外部类$内部类出现的次数 + .class”
局部内部类,内部无法访问外部类的成员(此时的this.代表的是局部内部类的实例)

成员内部类的地位,等同于全局变量的地位
成员内部类内部,可以使用外部类所定义的所有的成员(成员变量,成员方法)

兄弟类的调用,跟平时一样
成员内部类,需要先实例化外部类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值