Java中类成员变量初始化顺序
一、 定义处默认初始化vs构造函数中初始化
java中类成员变量支持在声明处初始化,也可以在构造函数中初始化,那么这两者有什么区别呢?看下面例子
public class FieldsInit {
public static void main(String[] args) {
Test test = new Test();
}
}
class Print
{
public Print(String s) {
System.out.println(s);
}
}
class Test
{
private Print p1 = new Print("inin in declare");
private Print p2;
private Print p3 = new Print("init in declare");
public Test() {
this.p2 = new Print("init in contructor");
}
}
输出结果:
inin in declare
init in declare
init in contructor
结论:说明类中普通成员变量定义处默认初始化先与在构造函数中初始化
区别:除了初始化顺序不一样还有什么区别?对类的使用者来说,在构造函数中初始化更加灵活,可以通过构造函数参数初始化
二、静态变量vs非静态变量初始化,看下面例子
public class FieldsInit {
public static void main(String[] args) {
Test test = new Test();
}
}
class Print
{
public Print(String s) {
System.out.println(s);
}
}
class Test
{
private Print p3 = new Print("non static var init");
private static Print p1 = new Print("static var init");
}
输出结果:
static var init
non static var init
结论:说明静态变量初始化先与非静态成员变量初始化
Java中类成员变量初始化顺序的更多相关文章
- Java 类成员的初始化顺序
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. 1 无继承情况下的Jav ...
- C++成员变量初始化顺序问题
由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void P ...
- JAVA之成员变量初始化
java中成员变量的初始化,如果是普通成员变量可以赋初值,如果没赋初值,则系统会自动赋初值.而对于局部变量必须手动赋初值. package MyText2; public class MyText1 ...
- Java静态方法,静态变量,初始化顺序
1. 静态方法: 成员变量分为实例变量和静态变量.其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量.而静态变量被该类所有的对象公有(相当于全局变量),不需要实 ...
- Java类的变量初始化顺序
大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台 ...
- Java的成员变量初始化
对于方法里面的成员变量,Java要求程序员强制提供一个初始化的值.比如下面这个方法就会出错: public class Breakyizhan{ public void Z(){ int z; z++ ...
- Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?
[Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构 ...
- C++中类成员变量在初始化列表中的初始化顺序
引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << ...
- 【细说Java】Java变量初始化顺序
Java的变量初始化顺序,对这里一直似懂非懂,面试的时候也经常被问到,但答的一直不好,现在整理记录一下,以后忘记了可以来看看. 程序分为两个部分,第一个部分不考虑继承,第二个部分考虑继承: (1)不考 ...
随机推荐
- JS---设计简易日历
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- caffe solver
caffe solver https://groups.google.com/forum/#!topic/caffe-users/mUIi42aKWHQ https://github.com/BVLC ...
- InnoSetup自动检测并安装.Net Framework
InnoSetup可在在脚本中插入[Code]代码段,其中的代码可以通过事件驱动,支持的主要事件如下: function InitializeSetup(): Boolean; ——安装程序初始化,返 ...
- Vector源码剖析
参考:http://blog.csdn.net/ns_code/article/details/35793865
- 从零开始Spring项目
Spring Boot是什么 SpringBoot是伴随着Spring4.0诞生的: 从字面理解,Boot是引导的意思,SpringBoot帮助开发者快速搭建Spring框架: SpringBoot帮 ...
- JQ 获取ul\ol 下面li的个数
使用 jQuery 获取 ul 下面 li 的个数,那么我们需要遍历我们的ul.如果你的ul有class .id 或两者都没,您可以使用 ul 标签来遍历. //遍历ul 获取li个数 $(" ...
- c/c++ 获取mysql数据库以blob类型储存的图片
简单的code如下: #include <iostream> #include <fstream> #include <sstream> #include < ...
- 洛谷P3572 [POI2014]PTA-Little Bird
P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...
- 洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 题目描述 Few know that the cows have their own dictionary with W ( ...
- GFS安装
GlusterFS 搭建 1.环境要求 IP地址 主机名称 系统 172.16.2.201 test01 Centos 6.4 172.16.2.202 test02 Centos 6.4 172.1 ...