java 中static主要用法有三种:
1.第一种主要是用来定义一个静态成员变量;
1)这个静态成员变量可以通过类名.静态成员变量的方式调用。
例如:
class Person{
static String name;
static int age;
}
class MainUi{
public static vod main(String args[]){
Person.name = "langwang";
Person.age = 26;
System.out.println("name:=" + Person.name);
System.out.println("agae:=" + Person.age);
}
}
2)所有的对象使用的静态变量都是同一个变量,相当于是该类的一个全局变量。
class Person{
static String name;
static int age;
}
class MainUi{
public static vod main(String args[]){
Person person1 = new Person();
person1.name = "langwang";
person1.age = 26;
System.out.println("打印name:=" + person1.name);
System.out.println("打印agae:=" + person1.age);
Person person2= new Person();
System.out.println("打印name:=" + person2.name);
System.out.println("打印agae:=" + person2.age);
}
}
person1和person2的打印出来的值都一样。
2.定义一个静态成员方法:
class Person{
static String name;
int age;
static void print(){
System.out.println("print方法name:=" + name);
}
}
class MainUi{
public static vod main(String args[]){
Person person1 = new Person();
person1.name = "langwang";
person1.age = 26;
System.out.println("name:=" + Person.name);
System.out.println("agae:=" + person1.age);
Person.print();
}
}
其中1)静态成员方法调用的变量一定是静态成员变量,否则会编译出错。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。
2)基于同样的道理,静态方法中也不能使用关键字this。
3.静态代码块
class Person{
static String name;
int age;
static{
System.out.println("Person的静态代码块");
}
static void print(){
System.out.println("print方法name:=" + name);
}
}
class MainUi{
public static vod main(String args[]){
Person person1 = new Person();
person1.name = "langwang";
person1.age = 26;
System.out.println("name:=" + Person.name);
System.out.println("agae:=" + person1.age);
Person.print();
}
}
静态代码块在装载类的时候执行,静态代码块的作用主要是对静态成员变量赋值。