java学习-变量初始化(member initialization)
来源:互联网 发布:windows sdk是什么 编辑:程序博客网 时间:2024/06/06 09:57
java确保每个变量在使用之前都会被初始化,对于不同的变量java有不同的规则:
1. 方法的本地(局部)变量:如果某个方法内的本地变量,在被使用之前未被初始化,java会报出编译错误。如:
void f(){int i;i++;//Error, Variable might not have been initialized.}
2. 类的field变量:不同于方法内的局部变量,java总是保证类的field被默认初始化,即使field在定义时并没有被赋予初始值。如:
public class Initial { private boolean bool; private char c; private byte b; private short s; private int i; private long l; private float f; private double d; private String str; private Initial initial; public void printFields(){ System.out.println("boolean " + bool); System.out.println("char " + c); System.out.println("byte " + b); System.out.println("short " + s); System.out.println("int " + i); System.out.println("long " + l); System.out.println("float " + f); System.out.println("double " + d); System.out.println("String " + str); System.out.println("Object " + initial); } public static void main(String args[]) { new Initial().printFields(); }}Output:boolean falsechar byte 0short 0int 0long 0float 0.0double 0.0String nullObject null
char类型默认值为空,经过println之后作为""输出。
public class ClassA { public ClassA(int i){ System.out.println("Class A : "+i); }}public class ClassB { public ClassB(){ System.out.println("Class B"); }}public class StaticInitial { private static ClassA a1 = new ClassA(1); public StaticInitial(){ System.out.println("StaticInitial Constructor"); } private static ClassB staticB = new ClassB(); private ClassA a2 = new ClassA(2);}public static void main(String args[]) { new StaticInitial(); }Output:Class A : 1Class BClass A : 2StaticInitial Constructor
4. 有继承条件下的子类field初始化顺序:父类静态变量 > 子类静态变量 > 父类变量 >父类构造器 > 子类变量 > 子类构造器,同级的变量初始化顺序与定义顺序一致。如:
public class DerivedStaticInitial extends StaticInitial { private static ClassA classA = new ClassA(3); private ClassA class2 = new ClassA(4); public DerivedStaticInitial(){ System.out.println("DerivedStaticInitial Constructor"); }}public static void main(String args[]) { new DerivedStaticInitial(); }Output:Class A : 1Class BClass A : 3Class A : 2StaticInitial ConstructorClass A : 4DerivedStaticInitial Constructor
0 0
- java学习-变量初始化(member initialization)
- 类成员变量初始化列表(Member Initialization List)
- 类成员变量初始化列表(Member Initialization List)
- C++ Static Member Variable Initialization 静态成员变量初始化
- member initialization list (初始化队伍?)
- 利用“member initialization list”初始化类成员
- #1 Variable Initialization(变量初始化)
- C++初始化成员列表(member initialization list)
- java学习之类变量初始化
- GotW #1 Variable Initialization(变量初始化)
- Member Initialization List
- Day15-49.Member initialization
- C++对象模型(四):class成员初始化列表(Member Initialization List)
- Inside the C++ Model第二讲之 成员初始化列表(Member Initialization List)
- 深度学习: random initialization (随机初始化)
- Thinking in Java [Java编程机制] 学习笔记 -- 初始化顺序Order of initialization
- Thinking in java-1 Initialization 初始化
- Java学习笔记(成员变量的初始化)
- 求矩形的周长和面积【Java】
- Storm源码分析<转>
- myproject/gen already exists but is not a source folder. Convert to a source folder or rename it.
- 不确定个数的数组参数的写法.
- [USACO 2014 Jan Silver]Bessie Slows Down
- java学习-变量初始化(member initialization)
- 网丁:新项目技术知识点
- Android 动画之ScaleAnimation应用详解
- vs.net 控件 List<>属性 报错 XX为标记为可序列化
- CoreData 多线程传值的问题
- 设计模式——外观模式(FacadePattern)
- Swift 中 optional 值的取值问题
- Objective-C和Javascript的通信(一)
- 部署axis2 webservice