首先对java中的变量进行分类:
java中的变量主要分为成员变量和局部变量。
成员变量:在类中定义,用来描述对象将要有什么。(成员变量有系统默认的初始值)(作用域为整个类内部)
实例变量 (无static修饰)
类变量 (以static修饰)
局部变量:在方法中定义,在方法中临时保存数据。(局部变量必须自己设置初始值)(作用仅限于定义它的方法内)
形参
方法局部变量 (注:任何方法的变量必然为局部变量,不可用static修饰,static修饰的变量必然在类中方法外)
代码块局部变量
定义一个变量前需要思考:
如果一个变量或方法不依赖与类的某个实例,就应该定义为静态变量或静态方法。
例:定义一个circle的radius或者area,都必须以来一个实例的circle 故他们只能定义为实例变量
<pre name="code" class="java">public class Test1{
//int times = 0; 此行的times为类中的成员变量,在下面静态的主方法中所有的times必须用本类的对象T1来调用。如想直接调用需要用static修饰times
public static void main(String[] args){
Count myCount = new Count();
int times = 0; //定义在静态主方法下的局部变量 不可用static修饰 不做任何修饰
//Test1 T1 = new Test1();
//T1.times = 0;
for(int i = 0;i<100;i++)
increment(myCount,times); //主方法中调用的increment方法,如increment方法为非静态方法,此处需要用本类的对象T1来调用
System.out.println("count is "+myCount.count);
System.out.println("times is "+times);
}
public static void increment(Count c,int times){ //主方法为静态方法 在主方法中直接调用,increment方法必须也是静态方法
c.count++;
times++;
}
}
class Count{
public int count;
public Count(int c){
count = c;
}
public Count(){
count = 1;
}
}
静态成员(属性和方法)都是类特有的,是为了各个对象共享数据的。
从java运行加载顺序的角度看,静态是随着类的加载而加载。
静态相当于解压缩文件,静态可以直接使用。非静态相当于压缩文件。非静态需要解压后(即调用对象)才能使用。
从面向对象的思想现实意义考虑,无论是static修饰的方法还是变量,首先,我们之所以用Static修饰有一个很直接的目的就是访问方便,当然,方法和变量各有它们的作用,方法的作用是告诉我们怎样去做具体的事,所以它里面的变量已经没有那么重要了,因为我们的方法具有普适性,对于它里面的变量的调用好像没有太大的价值,变量只不过是个形式,值都是从外面传进方法来的。所以方法体里面的变量一般不加任何修饰符。