作用一、不实例化类直接使用类变量(静态变量)
class student{
int age;
int score;
String name;
static int height;
}
public class Demo1 {
public static void main(String[] args) {
//正常的实例化后调用可以
student st = new student();
st.age = 10;
//但是不实例化直接调用就不行
student.st = 10;//错误写法
//不过对于static修饰的变量就可以
student.height = 10;
}
}
作用二、不用实例化本类就能调用本类中的函数(静态方法)
public class Demo1 {
public static void main(String[] args) {
int a = 10;
int b = 10;
//可以
add(a,b);
//不行
dev(a,b);
//可以但是需要实例化加前缀,很麻烦
Demo1 d = new Demo1();
d.dev(a,b);
}
static int add(int a,int b){
return a+b;
}
int dev(int a,int b){
return a/b;
}
}
对于作用一二的总结——直接用 类名.变量 或者 类名.方法 访问类内容:当类被加载的时候就加载了,不用实例化它就能直接使用————意思是类加载的时候,加了static的变量或者方法就被系统自动实例化了。
静态代码块
public class Demo1 {
public static void main(String[] args) {
int a = 10;
int b = 10;
//可以
add(a,b);
//不行
dev(a,b);
//可以但是需要实例化加前缀,很麻烦
Demo1 d = new Demo1();
d.dev(a,b);
}
static int add(int a,int b){
return a+b;
}
int dev(int a,int b){
return a/b;
}
}
在主函数中new这个类的时候,会先运行静态代码块再运行构造函数
需要注意的是,静态代码块只会被运行一次,new第二个这种类的时候不会运行第二次静态代码块
static使用注意事项
一、static修饰的方法或者变量中不能有this
因为static是在类加载前就调用了,所以static调用this会出现没有this的错误
二、static方法内不能访问本类内部成员
因为static是在类加载前就调用了,所以static调用类内部成员会出现没有该成员的错误