前言
顾名思义,这里是补充修饰符的学习笔记。
? 通配符
顾名思义即可。
const 常变量修饰符
首先const是constant(恒定不变的)的缩写, const 就是描述变量为常量的修饰符/关键字,或者说 const 是定义常变量的关键字。
用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值(即使是同样的值),所以说它定义的是只读变量。这也意味着必须在定义它时,就对它赋初值(初始化);倘若定义它时未初始化它则会发生语法错误(编译错误)。
引用1:对于末初始化的局部变量,程序在执行的时候会自动把一个很小的负数存放进去。
用const修饰的变量,会有静态特性,但不是变成了静态变量。
引用2:局部变量存储在栈中,静态变量存储在静态存储区中,而经过 const 修饰过的变量存储在内存中的“只读数据段”中(只读数据段中存放着常量和只读变量等不可修改的量)。
众所周知,数组的长度必须固定。虽然const定义的是只读常量,但是它本质是还是一个变量,只不过不能修改罢了,所以在语法上const定义的变量是不能作为数组的长度的。(而在C++里,可以用const定义的变量来作为数组的长度)
目前Java已经弃用const修饰符,实现类似功能可以采用 private static final 组合修饰符。
this 本对象修饰符
this 是自身的一个对象,代表对象本身。即指向对象本身的一个指针。
super 父类对象修饰符
super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
this | super | |
---|---|---|
情景1 | 普通的直接引用(就指向对象本身) | |
情景2 | 形参和成员变量名字重名 | 子类成员变量/方法和父类成员变量/方法重名 |
情景3 | 引用本类另一个重载的构造函数,应写在本构造函数的第一条语句 | 引用父类中的某个构造函数,应写在本构造函数的第一条语句 |
static 静态修饰符
范围:类以内。被 static 修饰的属于类,而不属于此类的对象。(国企属于国家,而不属于某一个人)static可以修饰内部类、方法、成员变量(属性)、代码块(这些都是直接属于类的);而不可以修饰外部类、局部变量(static是类以内的层面的;而局部变量隶属于其方法,并不直接属于类)
注意:static 方法是不兼容 this 关键字的(this代表当前类的对象,而static方法是通过当前类调用的方法,不用对象调用),那么构造方法是静态方法吗?答:不是,构造方法可以兼容 this 关键字。
目的:能创建一些独立于具体对象之外的域变量或方法(类对象的公有域),以致于即使没有创建具体对象也能直接通过类来访问其属性和方法。而且由于static的加载优先级高且只会执行一次多次调用,所以可以用来调优程序性能。
语法:由于局部变量是隶属于其方法的,要想访问局部变量就不能绕开它从属的方法,所以语法上规定static不必用来修饰局部变量。
写到这了,就不得不提提静态变量和实例变量了
静态变量和实例变量
静态 | 实例 |
---|---|
不属于任何实例对象,专门属于类的。(就像户口本一样不是属于某个人,而是属于此人的家族)在类加载过程中,JVM只为静态变量分配一次内存空间 | 专门属于实例对象的,每次new对象都会为此对象分配实例变量的(成员变量)内存空间 |
虽然静态资源是独立于对象,但是只要访问权限允许,对象也能访问静态资源(比如用this关键字) | |
以后补充 |
final 修饰符
凡是不允许被继承、重写、修改的东东都有 final 的应用场景!被final修饰的话必须在加载它时才会完成它的初始化。
- 当final修饰基本数据类型及String类型时,代表我们可以直接访问这个常量的地址。
- 当final而对于修饰的引用数据而言,引用数据/对象的地址不能改变,但其内容可以改变。
static 和 final 的比较
static 在类加载过程(程序运行时)始终保持不变,而 final 只在初始化过程(实际调用后)才会保持不变。