重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关Java中如何初始化静态和非静态成员变量,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联主打移动网站、成都做网站、成都网站建设、成都外贸网站建设、网站改版、网络推广、网站维护、域名与空间、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。Java中非静态成员变量、静态成员变量的初始化时机。
非静态变量
我们在这里分析三种结构,着重分析这三种结构的初始化顺序:
成员变量初始化语句;
成员变量初始化块;
构造函数;
示例一:
public class MyTest { private String name = "wei.hu"; public MyTest(String name) { System.out.println("This is constructor. Will assign the variable name to: " + name + "."); System.out.println("Before the name was modified: " + this.name); this.name = name; System.out.println("After the name was modified: " + this.name); } { System.out.println("This is initialize block. Will assign the variable name to: chouchou"); System.out.println("Before the name was modified: " + this.name); this.name = "chouchou"; System.out.println("After the name was modified: " + this.name); } public String getName() { return name; } public static void main(String[] args) { MyTest myTest = new MyTest("mengna"); System.out.println(myTest.getName()); } } #输出 This is initialize block. Will assign the variable name to: chouchou Before the name was modified: wei.hu After the name was modified: chouchou This is constructor. Will assign the variable name to: mengna. Before the name was modified: chouchou After the name was modified: mengna mengna
示例二:
public class MyTest { public MyTest(String name) { System.out.println("This is constructor. Will assign the variable name to: " + name + "."); System.out.println("Before the name was modified: " + this.name); this.name = name; System.out.println("After the name was modified: " + this.name); } private String name = "wei.hu"; { System.out.println("This is initialize block. Will assign the variable name to: chouchou"); System.out.println("Before the name was modified: " + this.name); this.name = "chouchou"; System.out.println("After the name was modified: " + this.name); } public String getName() { return name; } public static void main(String[] args) { MyTest myTest = new MyTest("mengna"); System.out.println(myTest.getName()); } } #结果(与示例一相同) This is initialize block. Will assign the variable name to: chouchou Before the name was modified: wei.hu After the name was modified: chouchou This is constructor. Will assign the variable name to: mengna. Before the name was modified: chouchou After the name was modified: mengna mengna
示例三:
public class MyTest { public MyTest(String name) { System.out.println("This is constructor. Will assign the variable name to: " + name + "."); System.out.println("Before the name was modified: " + this.name); this.name = name; System.out.println("After the name was modified: " + this.name); } { System.out.println("This is initialize block. Will assign the variable name to: chouchou"); System.out.println("Before the name was modified: " + this.name); this.name = "chouchou"; System.out.println("After the name was modified: " + this.name); } private String name = "wei.hu"; public String getName() { return name; } public static void main(String[] args) { MyTest myTest = new MyTest("mengna"); System.out.println(myTest.getName()); } } #结果 This is initialize block. Will assign the variable name to: chouchou Before the name was modified: null After the name was modified: chouchou This is constructor. Will assign the variable name to: mengna. Before the name was modified: wei.hu After the name was modified: mengna mengna 分析: 注意本示例的结果与上面两个示例的结果不同。 1、当我们想将成员变量name赋值为chouchou之前,发现this.name为null。也就是说初始化语句没有先执行,而是先执行了初始化块; 2、当在执行构造函数时,我们想将成员变量name赋值为mengna,发现赋值之前,this.name不再是chouchou,而是wei.hu,这说明了什么? 因为初始化块先执行,如果紧接着执行构造函数的话,那么在构造函数赋值语句执行之前,this.name应该是chouchou才对。但是在构造函数赋值语句执行之前,this.name的值变成了wei.hu,那么足以证明: 1)初始化块先执行; 2)下来执行了初始化语句; 3)最后执行了构造函数;
结论:
通过上面三个示例,我们可以发现,对于非静态的成员变量:
初始化语句、初始化块,总是先于构造函数执行;
初始化语句、初始化块的和执行顺序,取决于 初始化语句、初始化块在代码中的书写顺序。写在上面的先执行。
静态变量
我们在这里也分析三种结构:
静态初始化语句;
静态初始化块;
构造函数;
示例一:
public class MyTest { public static String name = "wei.hu"; public MyTest() { System.out.println("This is constructor. Will assign the variable name to: chouchou"); System.out.println("Before the name was modified: " + name); name = "chouchou"; System.out.println("After the name was modified: " + name); } static { System.out.println("This is static initialize block. Will assign the variable name to: mengna"); System.out.println("Before the name was modified: " + name); name = "mengna"; System.out.println("After the name was modified: " + name); } public static void main(String[] args) { System.out.println(MyTest.name); } } #结果 This is static initialize block. Will assign the variable name to: mengna Before the name was modified: wei.hu After the name was modified: mengna mengna 分析: 通过打印输出,我们发现在执行静态初始快之前,静态变量name已经初始化为wei.hu了。也就是说: 1、静态初始化语句先执行; 2、下来执行静态初始化块; 3、构造函数未执行; ---------------------
示例二:
public class MyTest { public MyTest() { System.out.println("This is constructor. Will assign the variable name to: chouchou"); System.out.println("Before the name was modified: " + MyTest.name); name = "chouchou"; System.out.println("After the name was modified: " + MyTest.name); } static { System.out.println("This is static initialize block. Will assign the variable name to: mengna"); System.out.println("Before the name was modified: " + MyTest.name); name = "mengna"; System.out.println("After the name was modified: " + MyTest.name); } public static String name = "wei.hu"; public static void main(String[] args) { System.out.println(MyTest.name); } } #结果 This is static initialize block. Will assign the variable name to: mengna Before the name was modified: null After the name was modified: mengna wei.hu 分析: 初始化块在对静态变量赋值之前,发现MyTest.name的值为空。 在最后打印出MyTest.name时,发现输出的值是wei.hu,而不是mengna。也就是说,在初始化块执行之后,执行了静态初始化语句。 1、先执行静态初始化块; 2、再执行静态初始化语句; 3、构造函数未执行; ---------------------
结论:
对于静态字段,初始化有如下规则:
1. 若静态初始化语句在前,静态代码块在后,则先执行静态初始化语句;
2. 若静态代码块在前,静态初始化语句在后,则先执行静态代码块;
看完上述内容,你们对Java中如何初始化静态和非静态成员变量有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联网站建设公司行业资讯频道,感谢大家的支持。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。