本文共 1703 字,大约阅读时间需要 5 分钟。
1、定义
在java中,static是一个修饰符,可以用来修饰变量或者方法,表示静态变量或静态方法,静态变量也叫作类变量,说明这个变量是属于类的,而不是属于对象的。没有static修饰的变量称为实例变量,表示该变量是属于某个具体对象的。当然,static也可以用于修饰静态代码块。
2、特点
(1)static既可以修饰变量,也可以修饰方法;
(2)被static修饰的变量或方法独立于该类的任何对象,即这些被static修饰的成员不属于任何一个实例对象;
(3)被static修饰的变量或方法是优先于对象存在的,在类的加载过程中,JVM就会为静态成员分配一次内存空间,当类被加载的时候,就会加载静态成员。即当一个类加载完毕后,即使没有创建对象,也可以访问静态成员。
3、意义(要解决的问题)
若要在不创建对象的情况下,也能使用某个变量或方法,则可以使用static来修饰该变量或方法。
4、使用中的注意事项
(1)在不使用实例对象的情况下,静态方法只能访问静态方法和静态变量,不能访问非静态成员;
原因:静态成员在对象创建之前就已经写入内存了,但非静态成员此时还不在内存中,因此不能直接使用。(但是可以实例化对象来访问,但是强烈不建议使用)
(2)非静态方法既可以访问非静态成员,也可以访问静态成员。
例:
class Solution { public int peakIndexInMountainArray(int[] A) { int index = 0; int length = A.length; for(int i = 1 ; i < length -1 ; i++) { if(A[i] > A[i + 1]) { index = i; break; } } return index; } public static void main(String[] args) { int[] A = {0,2,1,0}; int index = peakIndexInMountainArray(A); //静态方法直接访问非静态方法,编译出错 }}
上述为一个例子,main方法中直接访问非静态方法peakIndexInMountainArray时出现编译错误,改正方法有两种:(1)将peakIndexInMountainArray用static修饰;(2)实例化一个对象,通过对象来间接访问非静态方法peakIndexInMountainArray。
第二种方法的代码如下:
class Solution { public int peakIndexInMountainArray(int[] A) { int index = 0; int length = A.length; for(int i = 1 ; i < length -1 ; i++) { if(A[i] > A[i + 1]) { index = i; break; } } return index; } public static void main(String[] args) { int[] A = {0,2,1,0}; Solution s = new Solution(); //实例化一个对象 int index = s.peakIndexInMountainArray(A); //通过对象访问非静态方法 }}
综上,static成员的访问方式总结如下:
(1)静态变量:
方法一、类名.静态变量(同一个类中可以省略类名);
方法二、对象.静态变量(强烈不建议使用);
(2)静态方法:
方法一、类名.静态方法(同一个类中可以省略类名);
方法二、对象.静态方法(强烈不建议使用)。
转载地址:https://blog.csdn.net/m0_37415978/article/details/102557505 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!