1、实例变量与类变量的声明
在之前的学习类的时候我们知道类体中包括成员变量的声明和方法的定义,而成员变量又可以细分为实例变量和类变量。在声明成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量(类变量也称为static变量,静态变量)。
class Dog {
float x; //实例变量
static int y; //类变量
}
2、实例变量与类变量的区别
1).不同对象的实例变量互不相同
我们已经知道,一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的成员变量。再准确的说,就是分配给不同对象的实例变量占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量。
2).所有对象共享类变量
如果类中有类变量,当使用new运算符创建多个不同的对象时,分配给这些对象的类变量占有相同的一处内存,改变其中一个对象的类变量就会影响其他对象的类变量。
3).通过类名直接访问类变量
当Java程序执行时,类的字节码文件被加载到内存中,如果该类还没有创建对象,那么类中的实例变量就不会被分配内存。但是,类中的类变量,在该类被加载到内存中时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,但是类变量就不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才会释放所占有的内存。
PS:见示例。
3、示例代码
Ladder.java
public class Ladder {
double top;// 实例变量
static double bottom;// 类变量
public double getTop() {
return top;
}
public void setTop(double top) {
this.top = top;
}
public static double getBottom() {
return bottom;
}
public static void setBottom(double bottom) {
Ladder.bottom = bottom;
}
}
Demo17.java
public class Demo17 {
public static void main(String[] args) {
Ladder.bottom = 100;
Ladder ladder1 = new Ladder();
Ladder ladder2 = new Ladder();
ladder1.setTop(50);
ladder2.setTop(60);
System.out.println("ladder1的上底:"+ladder1.getTop());
System.out.println("ladder2的上底:"+ladder2.getTop());
System.out.println("ladder1的下底:"+ladder1.getBottom());
System.out.println("ladder2的下底:"+ladder2.getBottom());
System.out.println("1-10之和:"+Sum.getSum(1, 10));
}
}
class Sum{
static int getSum(int start,int end){
int sum =0;
for(int i=start;i<end;i++){
sum+=i;
}
return sum;
}
}