类中的属性和方法,称为类的成员
成员分为:实例成员和类成员
1、实例成员
实例成员属于对象,只有对象才能引用和访问
2、类成员
类成员不属于任何对象,所有对象都可以共享和访问,可以直接通过类名和对象名引用和访问
类方法中不能直接访问实例成员
因为实例成员必须由对象引用
而类方法由于也可以被类名直接引用,所以本身是没有对象的,所以无法访问实例成员
3、static静态代码块
用于类加载后的静态属性的初始化
**学生类花班费和花自己钱案例**
学生类
/**
* 学生类
*/
public class Student {
private String name;
private double money; //自己的钱
private static double clazzMoney; //班费 (类成员)
//static静态代码快
static{
clazzMoney=10000;//初始化班费(类变量)
}
/**
* 花自己钱的方法
*/
public void flowerMoney(double money){
System.out.println(this.name+"原有钱"+this.money);
this.money-=money;
System.out.println("花了"+money+"元,还剩"+this.money);
}
/**
* 花班费的方法
*/
public void flowerClazzMoney(double money){
System.out.println("班费原有钱"+clazzMoney);
clazzMoney-=money;
System.out.println("花了"+money+"元,班费还剩"+clazzMoney);
}
//构造器
public Student() {
}
public Student(String name, double money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public static double getClazzMoney() {
return clazzMoney;
}
public static void setClazzMoney(double clazzMoney) {
Student.clazzMoney = clazzMoney;
}
}
测试类
/**
* 测试花钱
*/
public class Test {
public static void main(String[] args) {
//创建两个学生对象
Student s1 = new Student("小明", 1000000);
Student s2 = new Student("小李", 500);
//花自己的钱测试(每个人自己的钱和别人的没关系,每个对象都有自己的实例属性)
s1.flowerMoney(5000);
s2.flowerMoney(10);
//花班费测试(班费是共享的,大家访问的都是同一个)
s1.flowerClazzMoney(5000);//挪用班费买手机
s2.flowerClazzMoney(20);//挪用班费买个手机壳
}
}
运行结果:
小明原有钱1000000.0
花了5000.0元,还剩995000.0
小李原有钱500.0
花了10.0元,还剩490.0
班费原有钱10000.0
花了5000.0元,班费还剩5000.0
班费原有钱5000.0
花了20.0元,班费还剩4980.0