static

来源:互联网 发布:阿里云dns教程 编辑:程序博客网 时间:2024/06/05 05:49

1、Java中被static修饰的成员,称为静态成员或者类成员。它属于整个类所有,而不是某个对象所有。

系统在第一次使用该类时,就会为其分配内存空间,直到该类被卸载才进行资源回收。

2、静态成员的访问方式:可以使用类名直接访问;也可以使用对象名进行访问。

package com.imooc;public class HelloWorld {static String hobby="imooc";public static void main(String[] args) {System.out.println("通过类名访问hobby:"+HelloWorld.hobby);HelloWorld hello=new HelloWorld();System.out.println("通过对象名访问hobby:"+hello.hobby);hello.hobby="爱慕课";System.out.println("通过类名访问hobby:"+HelloWorld.hobby);}}

运行结果:

通过类名访问hobby:imooc
通过对象名访问hobby:imooc
通过类名访问hobby:爱慕课

3、静态方法:用static修饰的方法,称为静态方法或类方法。

package com.imooc;public class HelloWorld {//使用static关键字声明静态方法public static void print(){System.out.println("欢迎您:慕课网!");}public static void main(String[] args) {//直接使用类名调用静态方法HelloWorld.print();//也可以通过对象名调用,更推荐使用类名调用。HelloWorld demo=new HelloWorld();demo.print();}}

运行结果:

欢迎您:慕课网!
欢迎您:慕课网!

注意点:

(1)静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员;

package com.imooc;public class HelloWorld {static String hobby="imooc";String name="爱慕课";public static void print(){System.out.println("爱好:"+hobby+"!");//编译不通过,会在这行有红色叉号System.out.println("欢迎您:"+name+"!");}}

(2)如果要在静态方法中调用非静态变量,可以通过创建类的对象,通过对象来访问非静态变量。

package com.imooc;public class HelloWorld {static String hobby="imooc";String name="爱慕课";public static void print(){HelloWorld hello=new HelloWorld();System.out.println("爱好:"+hobby+"!");//通过对象实现,在静态方法中调用非静态变量。System.out.println("欢迎您:"+hello.name+"!");}public static void main(String[] args) {HelloWorld.print();}}
(3)普通成员方法,可以直接访问同类中的静态和非静态变量。

static String hobby="imooc";String name="爱慕课";public  void print(){System.out.println("爱好:"+hobby+"!");System.out.println("欢迎您:"+name+"!");}
(4)静态方法中,不能直接调用非静态的方法,需要通过对象来访问非静态方法。

4、static之静态初始化块

在类的声明中,可以包含多个初始化块,当创建实例时,会依次执行这些代码块。如果使用static修饰,就称之为静态初始化块。

静态初始化块只能在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

package com.imooc;public class HelloWorld {int num1;int num2;static int num3;public HelloWorld(){num1=91;System.out.println("通过构造方法为变量num1赋值");}{num2=82;System.out.println("通过初始化块为变量num2赋值");}static{num3=73;System.out.println("通过静态初始化块为静态变量num3赋值");}public static void main(String[] args) {HelloWorld hello=new HelloWorld();System.out.println("num1:"+hello.num1);System.out.println("num2:"+hello.num2);System.out.println("num3:"+num3);HelloWorld hello2=new HelloWorld();}}
执行结果:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:82
num3:73
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

由结果可以得出以下结论:程序运行时静态初始化块最先被执行,然后执行普通的初始化块,最后执行构造方法。

由于静态初始化块只在类加载时执行一次,所以在创建对象hello2时,并未执行静态初始化块。


0 0
原创粉丝点击