1. 静态变量是static修饰的成员变量(类变量),若无static修饰,则是实例变量。静态变量是一种全局变量,它属于某个类,不属于某个对象实例,是在各对象实例间共存。
访问静态变量直接通过类名来访问,可以不通过实例化来访问他们。而实例变量就必须通过对象实例来访问
(类名.静态变量名即可访问)同理,静态方法也一样,通过类名调用。
2. 实例方法既可以使用实例变量又可以使用静态变量(方法)。而静态方法只能使用静态变量(方法)。如下是我经常犯的错误:
package wen; //错误1 //class A{ // String a = "helllo!!"; // public static void main(String [] args){ // System.out.println(a); // } //} //正确1 //class A{ // static String a = "helllo!!"; // public static void main(String [] args){ // System.out.println(a); // } //} class A{ String a = "helllo!!"; public static void main(String [] args){ A a = new A(); System.out.println(a.a); } }
可以看到,实例名字和实例变量名字一样也没问题!
以上,我们可以看到,有两个方法可以解决这个问题:
1.将其变成静态变量!
2.先创建一个类的实例,再用该实例调用实例变量。
注意:这个测试程序其实我们是先创建了一个包:wen,然后再创建一个类,这样必须在第一行加:pakage wen;
但是,假如我们在工程的开始就不创建包直接在开始就创建一个类,那么系统就会显示一个“(缺省包)”,其实就是没有包,以后其它包用的时候就不用导包了,当然也不用在程序的第一行写:package ****
但是这样不好。不规范。
下面的程序容易错的点我们也需要注意:
class A{ String a; String b; public static void main(String [] args){ A a = new A(); System.out.println(a.a); System.out.println(b); } }
我们可以看到,类中的a和b都没有初始化,但是第一个System.out.println()就没有错,输出的是“null”
第二个System.out.println()就出错了。