1.为什么要使用静态变量,常量和方法
通常,在处理问题,会遇到多个不同的类要使用同一变量,常量或方法,然而,同一个常量在不同i的类中创建时系统都会为之分配内存,造成内存浪费,如果能将这些不同类中的变量共享到一个内存中,那就大大减少了内存的使用,而静态变量(关键字 static)就是解决这个问题的。如下图所示:
2.被声明的static的变量,常量和方法被称为静态成员,静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名“.”运算符调用静态成员。如下代码:
1 public class AnyThing { 2 static double PI = 3.1415; //在类中定义静态常量 3 static int id; //在类中定义静态变量 4 public static void method1(){ //在类中定义静态方法 5 6 } 7 public void method2(){ 8 System.out.println(AnyThing.PI); //调用静态常量 9 System.out.println(AnyThing.id); //调用静态变量 10 AnyThing.method1(); //调用静态方法 11 } 12 }
注意:(1) 虽然静态成员可以使用“对象.静态成员”的形式进行调用,但通常不这么使用,这样容易混淆静态成员和非静态成员。
(2) 在静态方法中不可以使用this关键字。
(3) 在静态方法中不可以直接调用非静态方法。
(4) 在Java中规定不能将方法中的局部变量声明为static的。
(5) 如果在执行类时,希望先执行类的初始化动作,可以使用static定义一个静态区域,例如
1 public class example{ 2 static{ 3 ... 4 } 5 }
当这段代码被执行时,首先执行static块中的程序,并且只会执行一次,即在类加载的时候就被执行,之后执行main()方法。并且只是自上而下的顺序执行。
3,实例语句块在构造方法调用之前调用,调用一次构造函数,就调用一次实例语句块,执行顺序自上而下。
4.在java中,静态方法和普通方法的区别:
1、在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
2、静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
3、程序的static块只能调用静态方法,不能调用实例的方法。
如果要追溯其区别的根源,可以这样理解:在编译期间静态方法的行为就已经确定,而实例方法只有在运行期间当实例确定之后才能确定。