static关键字知多少
发布网友
发布时间:2022-04-20 09:57
我来回答
共1个回答
热心网友
时间:2022-05-13 03:23
注意:static 的变量是在类装载的时候就会被初始化。也就是说,只要类被装载,不管你是否使用了这个static 变量,它都会被初始化。
小结:类变量(class variables)用关键字 static 修饰,在类加载的时候,分配类变量的内存,以后再生成类的实例对象时,将共享这块内存(类变量),任何一个对象对类变量的修改,都会影响其它对象。外部有两种访问方式:通过对象来访问或通过类名来访问。
静态方法
静态方法是一种不能向对象实施操作的方法。例如,Math 类的 pow() 方法就是一个静态方法,语法为 Math.pow(x, a),用来计算 x 的 a 次幂,在使用时无需创建任何 Math 对象。
因为静态方法不能操作对象,所以不能在静态方法中访问实例变量,只能访问自身类的静态变量。
以下情形可以使用静态方法:
一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如 Math.pow())。
一个方法只需要访问类的静态变量。
读者肯定注意到,main() 也是一个静态方法,不对任何对象进行操作。实际上,在程序启动时还没有任何对象,main() 方法是程序的入口,将被执行并创建程序所需的对象。
关于静态变量和静态方法的总结:
一个类的静态方法只能访问静态变量;
一个类的静态方法不能够直接调用非静态方法;
如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐;
静态方法中不存在当前对象,因而不能使用 this,当然也不能使用 super;
静态方法不能被非静态方法覆盖;
构造方法不允许声明为 static 的;
局部变量不能使用static修饰。
静态方法举例:
[java] view plain copy
package com.xuli;
import static java.lang.System.out; //静态导入 out方法 。。。System.* 导入System类中所有静态方法
public class Strim {
public static String st ="www";
public String s ="fff";
/**
* 静态块,只有类第一次被加载时执行, 该执行先于构造方法, 一般用来初始化静态变量
* @param args
*/
static {
st = "ttt";
out.println("This is a static block.");
out.println(st);
}
public String getS(){
return this.s;
}
public static void main(String[] args) {
String str = " d dd ";
out.println(str.trim().length()); //静态导入 不需要前面再加类名前缀
Strim sm = new Strim();
out.println(sm.getS());
Strim sm1 = new Strim();
out.println(sm1.getS());
//System.out.println(str.indexOf(null)); //java.lang.NullPointerException
}
}