博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 非静态方法优势_Java 静态(static)与非静态语句执行顺序
阅读量:5741 次
发布时间:2019-06-18

本文共 1631 字,大约阅读时间需要 5 分钟。

Java中的静态(static)关键字只能用于成员变量或语句块,不能用于局部变量

static 语句的执行时机实在第一次加载类信息的时候(如调用类的静态方法,访问静态成员,或者调用构造函数), static 语句和 static 成员变量的初始化会先于其他语句执行,而且只会在加载类信息的时候执行一次,以后再访问该类或new新对象都不会执行

而非 static 语句或成员变量,其执行顺序在static语句执行之后,而在构造方法执行之前,总的来说他们的顺序如下

1. 父类的 static 语句和 static 成员变量

2. 子类的 static 语句和 static 成员变量

3. 父类的 非 static 语句块和 非 static 成员变量

4. 父类的构造方法

5. 子类的 非 static 语句块和 非 static 成员变量

6. 子类的构造方法

参见如下例子

Bell.java

public class Bell {    public Bell(int i) {

System.out.println("bell " + i + ": ding ling ding ling...");

}

}

Dog.java

public class Dog {

// static statement

static String name = "Bill";

static {

System.out.println("static statement executed");

}

static Bell bell = new Bell(1);

// normal statement

{

System.out.println("normal statement executed");

}

Bell bell2 = new Bell(2);

static void shout() {

System.out.println("a dog is shouting");

}

public Dog() {

System.out.println("a new dog created");

}

}

Test.java

public class Test {

public static void main(String[] args) {

// static int a = 1; this statement will lead to error

System.out.println(Dog.name);

Dog.shout();    // static statement would execute when Dog.class info loaded

System.out.println();

new Dog();  // normal statement would execute when construct method invoked

new Dog();

}

}

程序输出:

static statement executed

bell 1: ding ling ding ling...

Bill

a dog is shouting

normal statement executed

bell 2: ding ling ding ling...

a new dog created

normal statement executed

bell 2: ding ling ding ling...

a new dog created

可见第一次访问Dog类的static成员变量name时,static语句块和成员变量都会初始化一次,并且在以后调用static方法shout()或构造方法时,static语句块及成员变量不会再次被加载

而调用new Dog()构造方法时,先执非static语句块和成员变量的初始化,最后再执行构造方法的内容

转载地址:http://jbnzx.baihongyu.com/

你可能感兴趣的文章
GitBlit (1)-- 在linux 安装 GitBlit 并运行
查看>>
Windows与Linux之间的文件自动同步
查看>>
程序是如何执行的(一)a=a+1
查看>>
18 已知下面的字符串是通过RANDOM随机数变量md5sum|cut-c 1-8截取后的结果
查看>>
BZOJ - 3578: GTY的人类基因组计划2
查看>>
爱——无题
查看>>
分布式服务框架原来与实践 读书笔记一
查看>>
【http】post和get请求的区别
查看>>
TFS强制撤销某个工作区的文件签出记录
查看>>
EL表达式无法显示Model中的数据
查看>>
ps6-工具的基础使用
查看>>
灵活运用 SQL SERVER FOR XML PATH
查看>>
linux下使用过的命令总结(未整理完)
查看>>
时间助理 时之助
查看>>
英国征召前黑客组建“网络兵团”
查看>>
Silverlight 2.5D RPG游戏“.NET技术”技巧与特效处理:(十二)魔法系统
查看>>
PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
查看>>
pyjamas build AJAX apps in Python (like Google did for Java)
查看>>
LAMP环境搭建1-mysql5.5
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>