1. 类方法基本介绍
- 类方法也叫静态方法。形式如下:
访问修饰符 static 数据返回类型 方法名(){ }【推荐】
static 访问修饰符 数据返回类型 方法名(){ }
2. 类方法的调用
- 使用方式:
类名.类方法名
或
对象名.类方法名
- 【前提是满足访问修饰符的访问权限和范围】
3. 类方法使用案例
- 统计学费总和
public class StaticMethod {
public static void main(String[] args) {
//创建两个学生对象,交学费
Stu xdr = new Stu("jack");
//xdr.payFee(100);
Stu.payFee(100);
Stu lucy = new Stu("lucy");
//lucy.payFee(200);
Stu.payFee(200);
// 输出当前收到的总学费
Stu.showFee();//300
}
}
class Stu{
private String name;
//定义一个静态变量来累积学生的学费
private static double fee = 0;
public Stu(String name) {
this.name = name;
}
//说明:
//1. 当方法使用了 static 修饰后,该方法就是静态方法
//2. 静态方法就可以访问静态属性/变量
public static void payFee(double fee){
Stu.fee += fee; //累积到静态变量
}
public static void showFee(){
System.out.println("总学费有:" + Stu.fee);
}
}
4. 类方法经典的使用场景
- 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
比如:工具类中的方法 utils,Math类、Arrays类、Collections 集合类
//如果希望不创建实例,也可以调用某个方法(即当做工具来使用)
// 这时,把方法做成静态方法就非常合适
System.out.println("9的开平方的结果是:" + Math.sqrt(9));
public class StaticMethod {
public static void main(String[] args) {
System.out.println(MyTools.calSum(10,20));
}
}
//开发自己的工具类时,就可以把方法做成静态的,方便使用
class MyTools{
//求出两个数的和
public static double calSum(double n1, double n2){
return n1 + n2;
}
//可以写出很多这样的工具方法...
}
5. 类方法使用注意事项和细节讨论
-
- 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;类方法中无
this
的参数
普通方法中隐含着this
的参数 - 类方法可以通过类名调用,也可以通过对象名调用。
- 普通方法和对象有关,需要通过对象名调用,比如
对象名.方法名(参数)
,不能通过类名调用。 - 类方法中不允许使用和对象有关的关键字,比如
this
和super
。普通方法(成员方法)可以。 - 类方法(静态方法)中只能访问静态变量或静态方法。
- 普通成员方法,既可以访问非静态成员,也可以访问静态成员。
- 小结:静态方法,只能访问静态的成员,非静态的方法,可以访问静态成员和非静态成员(必须遵守访问权限)
6. 练习
- 案例1
public class StaticExercise01 {
static int count = 9;
public void count(){
System.out.println("count=" + (count++));
}
public static void main(String[] args) {
new StaticExercise01().count();//9
new StaticExercise01().count();//10
System.out.println(StaticExercise01.count);//11
}
}
案例3:看看下面代码有没有错误,如果有错误,就修改,看看total等于多少?
小结:
(1) 静态方法,只能访问静态成员
(2) 非静态方法,可以访问所有的成员
(3) 在编写代码时,仍然要遵守访问权限规则