Hey,大家好呀!我是小米,一个积极分享技术的小伙伴!今天我们来聊聊 Java 中的两个非常重要的关键字——static 和 final。虽然这两个关键字在开发中很常见,但是很多人对它们的使用细节和含义可能还有些模糊。别担心,接下来我会用简单易懂的方式,详细为大家剖析它们的用法。
static 关键字1. static 修饰属性
在 Java 中,static关键字可以用来修饰类的属性(也叫类变量)。那么,什么是类变量呢?和普通属性有什么区别?
类级别属性:用static修饰的属性属于类本身,而不是某个具体的对象。这意味着,不管创建多少个对象,这个静态属性只有一份,所有对象都共享它。
随着类的加载而加载:static属性会在类加载的时候就分配内存空间,不需要等待对象创建。换句话说,静态属性在任何对象实例化之前就已经存在。
先于对象的创建:因为静态属性随着类加载时就存在,所以它的生命周期比普通对象属性长,类加载时它就被创建,类卸载时它才会被销毁。
可以通过类名直接调用:对于静态属性,不需要创建类的实例,可以直接使用类名来调用。
例如:
在上面的例子中,Demo.count是一个静态变量,可以通过类名Demo直接访问,而不需要创建Demo类的对象。
2. static 修饰方法
static 关键字同样可以用来修饰方法,这种方法被称为静态方法。
随着类的加载而加载:就像静态属性一样,静态方法也在类加载时创建,无需依赖对象实例化。
可以通过类名直接调用:静态方法可以直接通过类名来调用,而不需要创建该类的实例。
静态方法中只能调用静态成员:在静态方法中,你只能访问类的静态属性和调用其他静态方法,而无法访问实例成员,因为静态方法是在类加载时就存在,而实例成员要等到对象实例化后才能访问。
例如:
不可使用 this 关键字:由于this代表当前对象,而静态方法与对象无关,因此在静态方法中不能使用this。
3. 使用场景
静态属性常用于存放与类相关的信息,比如计数器、常量等,所有对象共享一份数据。
静态方法通常用来实现一些工具类或方法库中的函数。例如Math类中的Math.sqrt()就是一个静态方法。
final 关键字final关键字主要有三种用途:修饰变量、修饰方法和修饰类。
1. final 修饰变量
当使用final修饰变量时,这个变量的值一旦被初始化后,就不能再修改了。根据数据类型的不同,final对变量有不同的约束。
(1) 修饰基本数据类型
对于基本数据类型的变量,final修饰后,它的数值在初始化后就不能更改。例如:
(2) 修饰引用类型
如果final修饰的是一个引用类型(比如对象、数组),那么引用本身不能被修改,但引用指向的对象的内容可以更改。例如:
在上面的例子中,虽然我们可以修改StringBuilder对象的内容,但不能让sb指向另一个新的对象。
2. final 修饰方法
final 关键字可以用来修饰方法,防止子类对该方法进行重写。例如:
防止方法被重写:当父类的方法使用final修饰时,子类就不能再重写这个方法。这样可以确保某些核心功能在继承体系中不会被修改。
隐式的 final:需要注意的是,所有的private方法都是隐式的final,因为private方法不能被子类访问或重写。
3. final 修饰类
当一个类被final修饰时,表示这个类不能被继承。也就是说,final类中的所有方法都默认是final的,子类不能修改其行为。例如:
不能被继承:final类常用于工具类或不希望被继承的类。
私有化构造器:如果不想让类被继承,除了使用final,还可以通过私有化构造器来实现。私有化构造器可以防止该类被实例化或者继承。
static 和 final 的结合使用在 Java 中,static和final可以结合使用,用于修饰常量。我们可以用static final来声明一个全局常量,这样常量既是类级别的,又是不可修改的。例如:
ENDstatic关键字用于修饰类的属性和方法,它使得这些成员属于类而不是对象,所有实例共享。
final关键字可以用于变量、方法和类,保证这些成员在被修饰后具有不变性,变量不能修改,方法不能被重写,类不能被继承。
static和final常一起使用,用于定义常量。
希望通过这篇文章,大家对 Java 中的static和final关键字有了更深入的理解。如果你有任何问题或者想法,欢迎在评论区留言,我们一起讨论哦!
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!