static静态关键字,Java中的成员变量分为实例变量(非静态变量)和类变量(静态变量),成员方法分为实例方法(非静态方法)和类方法(静态方法)
被static修饰的成员变量和成员方法属于类、叫做静态变量/类变量,静态方法/类方法,通过 类.成员 方式调用
不被static修饰的成员变量和成员方法属于对象、对象成员、非静态成员,也叫作实例变量/非静态变量,实例方法方法/非静态方法,通过 对象.成员 方式调用
而静态变量和静态方法是被所有实例对象所共享的
1、静态成员
package com.method;
public class Test1 {
//静态成员变量,一旦定义属于类
static int a = 3;
//静态成员方法
public static void print1() {
System.out.println("静态成员方法");
}
public static void main(String[] args) {
System.out.println(a); //调用成员变量
print1(); //调用成员方法
}
}
Test1类中一个静态变量a和静态方法print1(),在主方法中使用静态变量和静态方法可以直接使用,但这种方式仅限于主方法和静态成员在同一个类中,最好的方式是通过 类名.成员 的方式进行调用,也就是Test1.a和Test1.print1()的方式,这样即使主方法和静态成员不在同一个类中也能进行调用。
2、非静态成员
package com.method;
public class Test1 {
//非静态成员变量,定义后属于对象,必须通过创建对象来调用
int b = 4;
//非静态成员方法,定义后属于对象,必须通过创建对象来调用
public void print2() {
System.out.println("非静态成员方法");
}
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.b);
test1.print2();
}
}
Test1类中一个非静态变量和方法,在主方法中要使用非静态变量和方法,只能通过创建实例对象的方式进行调用
3、静态变量可以被所有对象共享
package com.method;
public class Test1 {
//静态成员变量,一旦定义属于类
static int a = 3;
//静态成员方法
public static void print1() {
System.out.println("静态成员方法");
}
public static void main(String[] args) {
Test1 test1 = new Test1();
//对象也可以直接拿到静态方法和静态变量数据,也就是说静态变量和静态方法被所有实例对象所共享
test1.print1();
System.out.println(test1.a);
test1.a=6;
System.out.println(a); //静态变量a的值已经被修改为了6
Test1 test2 = new Test1();
System.out.println(test2.a);//静态变量a的值已被篡改,test2对象调用时已经不是原来的a
}
}
Test1类中有静态变量和静态方法,在主函数中可以通过创建对象test1,然后通过 对象.静态成员的方式进行调用。也可通过对象调用的方式对静态变量进行修改,另一个对象test2.a的值已经是被test1对象修改过的值
4、static关键字注意事项
- 静态方法只能访问静态方法和静态变量
- 非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法
- 静态方法中没有this关键字