static修饰变量和方法:
称为类变量/类方法或者静态变量/静态方法,是被所有对象所共享的,可用【类名.变量/方法名】的方式访问,也可以使用【对象名.】的方式访问,但是不推荐这样用,idea不会有代码提示,一些代码规范插件会直接把这种方式视为错误,用红色下划线标记(但程序可运行)。
另外需要注意的是,静态方法内只能调用静态方法和静态变量,不能调用非静态方法和非静态变量;而非静态方法内没有限制。
public class StaticTest {
// 类变量(静态变量)
public static int count = 10;
// 成员变量
public int num = 0;
// 类方法(静态方法)
public static int add(int a, int b) {
// 类方法内,只能调用类方法,不能调用非静态方法
//sum();
// 类方法内,只能访问静态变量,不能访问非静态变量
//return a + num;
return a + b;
}
// 成员方法
public int sum(int a, int b, int c) {
// 非静态方法内,没有限制
add(a, b);
return add(a, b) + c;
}
}
// 使用【类名.】的方式访问类变量和调用类方法
int count = StaticTest.count;
int add = StaticTest.add(count, 10);
// 成员变量和成员方法必须先要创建类对象才能使用
StaticTest staticTest = new StaticTest();
int num = staticTest.num;
int sum = staticTest.sum(num, 10, 20);
// 需要注意的是,使用对象名也可以访问其类变量和类方法,但不推荐这样使用
int count1 = staticTest.count;
int add1 = staticTest.add(count1, 10);
使用场景:
类变量可以用在对象的构造器中,比如设置一个累计器count = 0,每次new对象时,会调用对象的构造器,count++,这样可以统计对象的创建个数。
类方法可以用在工具类中,我们使用的Arrays、Collections工具类内的方法都是用static修饰的,可以直接用【类名.方法名】的方式使用,非常方便。