java静态变量和实例变量

时间:2021-10-07 04:58:11

1、Static静态变量

Static是静态修饰符。

在程序中任何变量或者代码都是在编译时,由系统自动分配内存来存储的,而所谓静态就是指在编译后分配的内存会一直存在,直到程序推出时才会释放内存空间。

在java程序里,所有东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员(成员指类中的函数、变量)

普通情况:必须先实例化对象后才能通过对象的引用才能访问这些成员

例外:该成员是用Static声明的    (这里所讲排除了类的访问控制)

//未声明static
class ClassA{
int b;
public void ex1(){

}
}


class ClassB{
void ex2{
int i;
ClassA a
= new ClassA();
i
= a.b; //这里通过 对象引用 访问成员变量b
a.ex1; //这里通过 对象引用 访问成员函数b
}
}

//声明为static
class ClassA{
static int b; //静态变量
static void ex1(){

}
}

class ClassB{
void ex2{
int i;
ClassA a
= new ClassA();
i
= ClassA.b; //这里通过 类 访问成员变量b
ClassA.ex1; //这里通过 类 引用访问成员函数b
}
}

通过以上两种比较,就可以知道static用来修饰类成员的主要作用,在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.praseInt(),Float.ParseFloat()等等用来把对象的类型转化为所需要的基本数据类型。

这样的变量和方法  又叫 类变量 和 类方法。

static修饰后的变量的值。被static修饰后的成员,在编译时由系统分配一块内存空间,直到程序停止运行才会释放。那么就是说该类的所有对象都会共享这块内存空间。

class TStatic{
static int i;

public TStatic(){
i
= 4;
}

public TStatic(int j){
i
= j;
}

public static void main(String args[]){
TStatic t
= new TStatic(5); //声明对象引用,并实例化
TStatic tt = new TStatic(); //同上

System.out.println(t.i);
// 4

System.out.println(tt.i);
// 4

System.out.println(t.i);
// 4
}
}

在这段代码里面 TStatic 类 有一个 static 的 int 变量 i,

有两个构造函数(与类名同名的、且不带返回值的函数叫做构造函数),第一个初始化i 为4,第二个用于初始化 i 为传进函数函数的值,在mian函数中所传的值是5,

在程序中首先声明对象t,然后调用带参数的构造函数实例化对象,此时对象t的成员变量i的值是5,

接着声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量i的初始化为4了,

在这里i是Static, 该类的所有的对象都共享该内存。

也就是说:实例化对象tt的时候改变了i的值,实际上对象t的i值也改变了,因为实际上他们引用的是同一个成员变量。

最后打印结果是三个4。


2、实例变量

又叫 成员变量、对象变量。

实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。