文章目录
1.什么是类属性
类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何该类的对象去访问它是,得到的都是相同值,同样,该类的任何对象去修改它时,修改的也是同一个变量
1.1.如何定义类属性
定义语法
1、访问修饰符 static 数据类型 变量名;
2、static 访问修饰符 数据类型 变量名;
1.2.如何访问类属性
1、类名.属性名
2、对象名.属性名
1.2.1 访问修饰符访问范围
ps:静态属性访问修饰符和普通属性修饰符是一致的
修饰符 | 同包 | 同类 | 子类 | 所有类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
[访问属性案例]
public class Static_ {
public static void main(String[] args) {
// 类名.属性名
// 类变量是随着类的加载而创建,所以即使没有创建对象实例也可以访问
System.out.println(Person.name);
// 对象名.属性名
Person p = new Person();
System.out.println(p.name)
}
}
class Person {
// 静态属性
public static String name = "Jack";
// 非静态属性
public int age = 18;
}
1.3什么时候需要使用类属性呢?
当我们需要某个类的所有对象都共享一个变量时就可以使用静态属性,比如:定义一个Person类,统计共捐款多少钱的时候就可以使用静态属性
2.什么是类方法
类方法也称静态方法
2.1如何定义静态方法
1、访问修饰符 static 数据返回类型 方法名() { }
2、static 访问修饰符 数据返回类型 方法名() { }
2.2 如何调用静态方法
1、类名.方法名
2、对象名.方法名
2.3 类方法的应用实例
实例化三个对象,统计共捐款多少钱
public class Static_ {
public static void main(String[] args) {
// 创建三个对象
new Person("Jack").sumMoney(100);
new Person("Bob").sumMoney(200);
new Person("Tom").sumMoney(300);;
// 因为 showMoney 是静态方法,所以可以使用:
// 类名.静态方法 调用
Person.showMoney(); // 输出捐款多少钱
}
}
class Person {
// 非静态属性
public String name;
// 静态属性
public static double CountMoney;
// 构造器
public Person(String name) {
this.name = name;
}
public void sumMoney(double money) {
CountMoney += money; // 累加捐款多少钱
}
public static void showMoney() {
System.out.println("共捐款 " + CountMoney + " 元钱!");
}
}
2.4、类方法中无 this 和 super 参数
2.5普通方法和对象有关,需要通过对象名调用,不能通过类名调用【看例子】
public class Static_ {
public static void main(String[] args) {
// Person.sum(); // 错误,sum() 是普通方法,需通过对象名调用
new Person().sum(); // 正确
// 类名.方法名
Person.show(); // 正确,因为 show() 是静态方法
}
}
class Person {
// 非静态属性
public String name;
// 静态属性
public static double CountMoney;
public void sum() {
System.out.println("普通方法");
}
public static void show() {
System.out.println("静态方法");
}
}
2.6 静态方法中只能访问静态属性或静态方法
案例
class Person {
// 非静态属性
public String name;
// 静态属性
public static double sal = 1800;
public void eat() {
System.out.println("普通方法");
}
public static void cat() {
System.out.println("静态方法");
}
public static void show() {
System.out.println(name); // 错误,name 不是静态属性
System.out.println(sal); // 正确,name 是静态属性
eat(); // 错误,eat 不是静态方法
cat(); // 正确 car 是静态方法
}
}
2.7 普通成员方法即能访问静态方法也能访问非静态方法
class Person {
// 非静态属性
public String name;
// 静态属性
public static double sal = 1800;
public void eat() {
System.out.println("普通方法");
}
public static void cat() {
System.out.println("静态方法");
}
public void show() {
eat(); // 非静态方法
cat(); // 静态方法
}
}
总结
1、静态成员方法只能访问静态属性或静态方法,不能访问普通成员方法
2、普通成员方法既可以访问静态方法、静态属性,也能访问非静态属性、非静态方法