类变量/方法(静态变量/方法)
类变量也叫静态变量,同样的类方法也叫静态方法,那么与之相对应的就有非静态变量,非静态方法,也叫实例变量,普通变量,普通方法。各个地方因为翻译的问题,叫法不一样,实际上在英文里就是一个单词的区别 static
类变量
定义
访问修饰符 static 数据类型 变量名;
访问
类名.类变量名
也可以是类对象.类变量名
类变量的使用时机
当我们需要一个被所有对象所共享的一个变量时,就考虑使用,比如一个学生类,要统计每个学生所交的费用,Student(name, static fee)
类变量使用细节
- 类变量(静态变量)可以被类的所有对象共享,而实例变量是每个对象独享
- 加上static成为类变量(静态变量),不加就是实例变量/普通变量/非静态变量
类方法
类方法也叫静态方法定义如下
定义
访问修饰符 static 返回类型 类方法名 (){}
访问
和类变量类似
类名.类方法名
也可以是类对象.类方法名
类方法的经典使用场景
我们都知道Java的utils包里的Math方法,比如开根号
Math.sqrt(9);
这就是典型的类方法使用,我们用这些方法,不需要为此实例化一个对象,直接类名点上方法名就可以拿来使用,提高了我们开发效率。如果在查看源码的时候,也可以发现这些方法前面都有static。
如果我们所写的方法不涉及非静态成员的使用,我们就可以吧这个定义为静态方法,比如打印数组啦,冒泡排序啦之类的。
类方法和普通方法的不同
-
类方法/变量(静态方法/变量)都是随着类的加载而加载,类方法中没有this的参数。
而普通方法隐含this参数
-
类方法(静态方法)可以通过类名,也可以通过对象来调用
普通方法只能通过对象去调用,不能通过类名去调用。
-
类方法(静态方法)不允许使用关于对象的关键字,如this,super
而普通方法可以使用
-
类方法(静态方法)只能访问静态成员
普通方法可以访问所有成员
class Person{
private int id;
private static total = 0;
public static void setTotal(int total){
this.total = total;//错误,static方法中不可以使用this
id = total;//错误,静态方法不可以访问非静态成员
Person.total = total;
}
public Person (){//构造器,实际上也可以看成非静态方法
total++;//正确,非静态方法可以使用静态变量
id = total;//正确,非静态方法可以使用非静态变量
}
}
public class Test{
public static void main(String[] args){
Person.setTotal(3);
new Person();
}
}
小结
静态方法,只能访问静态成员
非静态方法,可以访问所有成员