public class Example{
static int allClicks = 10; //静态变量
String str = "hello world"; //实例变量
public static void main(String[] args){
System.out.println("静态变量allClicks" + "=" + allClicks);
System.out.println("实例变量str" + "=" + str);
}
}
上面这段代码是一个静态变量和实例变量的简单输出,但运行时会报错,是因为main方法是一个静态方法(static),不能直接访问所属类的实例变量和实例方法或适用this关键字。
为此了解了java中的实例变量和静态变量。
一、静态变量、实例变量的定义:
静态变量(类变量):静态变量指的是被static修饰的类的变量;静态变量被所有类实例对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化。
实例变量:实例变量是指在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
二、静态变量(方法)、实例变量(方法)的不同:
1、静态方法中不需要它所属类的任何实例就可以访问,使用在静态方法中不可以使用this关键字。
2、静态方法没有隐式的关键字this传递,所以静态方法中不能直接访问所属类的实例变量和实例方法,但可以直接访问所属类的静态变量和静态方法。
3、实例方法中可以直接调用静态方法(或者静态变量),但静态方法不能直接调用实例方法(或者实例变量)。
4、在一个方法中,没有关键字this的话,就意味着没有对象,但是实例成员必须通过对象点来访问,所以在静态方法中无法访问实例成员。
5、在静态方法中,如果想调用此类中的非静态方法,可以通过创建此类的对象,通过对象点调用此非静态方法。
三、静态变量(方法)、实例变量(方法)的访问方式:
静态变量(方法)的访问方式:类名.变量名(方法名)。
实例变量(方法)需要先将类实例化后才可访问:对象名.变量名(方法名)。
原错误代码可改为以下代码:
public class Example {
static int allClicks = 10; //静态变量
String str = "hello world"; //实例变量
public static void method1(){ //静态方法
allClicks++;
System.out.println("静态方法中的allClicks++" + "=" + allClicks);
}
public void method2(){ //实例方法
allClicks++;
System.out.println("实例方法中的allClicks++" + "=" + allClicks);
System.out.println("实例方法中的str" + "=" + str);
}
public static void main(String[] args) {
System.out.println("静态变量allClicks" + "=" + allClicks); //访问静态变量
System.out.println("静态变量allClicks" + "=" + Example.allClicks); //访问静态变量
Example.method1(); //访问静态方法
Example a = new Example();
System.out.println("实例变量str" + "=" + a.str); //访问实例变量
a.method2(); //访问实例方法
}
}
按照访问方式修改即可以时代码得到运行。