2021.11.20 final在类中,方法中,变量中的作用
一:final在类中,方法中,变量中的作用
final 关键字表示对象是最终形态的,对象是不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的:final 表示不可改变。
final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量;final 用在方法的前面表示方法不可以被重写;final 用在类的前面表示类不可以被继承,即该类是最终形态,如常见的 java.lang.String 类。
二:static与finall在一起的作用
static和final的意义是不同的,
static修饰的时候代表对象是静态的,而final修饰的时候代表对象只能赋值一次,
他们连用的时候是因为定义的那个对象既要它是静态的,也要求它的值不能再被修改。
举例说明:
static int a=1;
static final b=1;
这里a和b的区别在于,a在程序里可以被重新赋值为2或3或等等的整数,而b在程序里不能被重新赋值,b永远都为1,也就是说b是一个常量。
final int c=1;
static final b=1;
这里c和b的区别在于,b存放在静态空间,不会在程序运行时被释放,它永远占着内存直到程序终止,而c在程序用完它而不会再用到它的时候就会被自动释放,不再占用内存。
当一个常数或字符串我们需要在程序里反复反复使用的时候,我们就可以把它定义为static final,这样内存就不用重复的申请和释放空间。
三:static
通常情况下,成员变量、方法都隶属于对象层级,也就是说每个对象都拥有独立的一份,若所有对象的某个特征都是一样的,则会造成内存空间的浪费,为了提高内存空间的利用率可以使用static关键字修饰成员变量、方法,表示静态的概念。此时该成员变量由对象层级提升为类层级,随着类的加载而准备就绪,被所有对象共享,与对象是否创建无关。
使用方式:
(1)使用类名.静态成员的方式进行访问。
(2)对于非静态的成员方法来说,既能访问非静态的成员,也能访问静态的成员。
(3)对于静态成员方法来说,只能访问静态成员,不能访问非静态成员。
(4)在Java语言中static关键字和final关键字很少单独修饰成员变量,通常都是采用public static final 共同修饰成员变量来表示常量的概念,该数值必须指定而且不能更改。通常的命名规范是:所有字母都要大写,不同单词之间采用下划线连接。
(3)对于静态成员方法来说,只能访问静态成员,不能访问非静态成员。:这个其实就是我们加载类以后,这个类不一定创建对象,只有对象才能调用非静态的方法,所以可能会出错;
四:JAVA中,非静态方法可以调用静态成员变量吗?
可以的,非静态方法可以调用静态的成员变量,但是静态方法不能调用非静态方法的成员变量
反正就是静态的不可以调用非静态的,非静态的可以调用静态的