前言
在java中,static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能;
一、static是什么?
static表示静态的意思,用来修饰类中成员变量和成员方法,还可以写静态代码块。
二、static关键字的特点
1.成员方法
static修饰的方法,一般称为静态方法,用static修饰的方法随着类的加载而加载,优先于对象存在,可以通过类名直接访问,因此静态方法也被称为类方法。因为优先于对象存在,所以静态方法内部不能用this,因为静态方法随着类加载时,对象还没有被创建,也就是说静态方法内部不能访问非静态的成员变量和方法。
需要注意的是:虽然静态方法内部不能访问非静态的成员变量和成员方法,但是反过来却可以。
代码如下(示例):
总结:因为静态方法调用时不用考虑对象,方便了调用,所以在实际应用中,如果不用考虑对象,可以用static修饰方法,常用的场景如工具类中的方法,main方法。
2.static修饰变量
代码如下(示例):
public class Student {
String name;
//stati修饰的成员变量会被类的所有对象共享
static String school="才爵科技一班";
public Student(String name) {
super();
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("jeck");
Student s2 = new Student("lisa");
s1.school="才爵六二班";
System.out.println("姓名 "+s1.name+"学校 "+s1.school);
System.out.println("姓名 "+s2.name+"学校 "+s2.school);
}
}
static修饰的变量,一般称为静态变量,同样也是随着类的加载而加载,也称为类变量。也可以通过类名访问,也可以通过对象访问。
static修饰的变量,会被共享给所有所有对象。如果实际应用需要数据被共享,可以用static修饰。
那么静态变量和成员变量有什么区别呢?
stati修饰代码块
public class StaticTest {
static int count = 0;
{
System.out.println("代码块");
count++;
}
static {
System.out.println("静态代码块");
count++;
}
}
public class Test {
public static void main(String[] args) {
StaticTest s1 = new StaticTest();
System.out.println("===========");
StaticTest s2 =new StaticTest();
}
}
上图运行结果:
从运行结果可以看出,静态代码块最先被加载,只执行一次,非静态代码块每创建一个对象时,执行一次。
static代码块的特点
1.执行优先于非静态的初始化代码块,它会在类初始化的时候执行一次,执行完成便销毁。
2.随着类的加载而执行,且只执行一次
总结
浅谈对static的理解,可能写的不全,请各位老师指点!