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
- static
- static
- static{}
- static
- static
- Static
- static
- static
- Static
- static
- static
- static
- static
- static
- static
- static
- static
- static
- make_ext4fs参数的权限说明
- VS2015如何添加解析
- 45-超越 goto 的跳转 longjmp
- Monkey测试命令及其说明附中止monkey测试方法
- IO 简单登录程序
- static
- JS/JQ 宽高的理解和应用--慕课
- [Leetcode] Maximum Subarray
- Centos日志及管理
- iOS 工作之余小总结(四)--(3) NSDate 时间类
- java变量默认值
- sqlserver将一个表中的数据存储到另一个表中
- 地球坐标,火星坐标,百度坐标理解与转换
- Android TextView 跑马灯