JAVA字段的初始化规律
JAVA字段的初始化规律
1.类的构造方法
(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。
(2)如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
例如:
public class Test{
public static void main(String[] args){
Foo obj1=new Foo(); //Foo obj1=new Foo(2);
}
}
class Foo{
int value; //static int value;
public Foo(int initValue){
value=initValue;
}
}
该程序是无法运行的,修改成后面语句将可以运行。
(3)同一个类可以有多个构造函数,多个构造函数之间通过参数来区分.这是方法重载的一个实例。
构造函数之间可以相互调用。
例如:
public class Test{
public static void main(String[] args){
Foo obj1=new Foo();
System.out.println(Foo.grams);
Foo obj2=new Foo(5);
System.out.println(Foo.grams);
}
}
class Foo {
static int grams;
Foo() {
this(55);
}
Foo(int g){
grams=g;
}
}
程序的运行结果为:
55
5
2.类的初始化块
(1)可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。
类的这种“没有名字”的“成员”,多用于初始化类的字段。
public class Test {
public int value=200;
{
value=100;
}
}
3.
执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
执行类的构造函数
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
例如:
public class Test{
public static void main(String[] args){
Foo obj1=new Foo();
System.out.println(Foo.grams);
obj1=new Foo(5);
System.out.println(Foo.grams);
}
}
class Foo {
{
grams=100;
} public static int grams=50;
public Foo(int g){
grams=g;
}
public Foo() {}
}
结果为:
100
5
但当public static int grams=50;语句在 {grams=100;}之前时结果则为:
50
5
4.继承关系中的初始化
例如:
class B
{
public static int data=100;
static
{System.out.println("B初始化 data="+data);}
}
class A extends B
{
public static int data=50;
static
{System.out.println("A初始化 data="+data);}
}
public class Test
{
public static void main(String[] args)
{
new A();
}
}
运行结果为:
B初始化 data=100
A初始化 data=50
JAVA字段的初始化规律的更多相关文章
- java字段中初始化的规律与如何用静态成员函数调用非静态成员
java字段中初始化的规律: 执行以下代码,出现的结果是什么? class InitializeBlockClass{ { field=200; } public int field=100; pub ...
- Java字段初始化规律
首先先附上一段代码:public class InitializeBlockDemo { public static void main(String[] args) { InitializeBloc ...
- Java的字段初始化规律
package 代码测试; public class InitializeBlockClass { {field=200;} public int field=100; public Initiali ...
- Java字段初始化规律:
Java字段初始化规律: Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块).静态初始化块是类中由static修饰的初始化块,实 ...
- Java 有关类字段的初始化
实例代码 package text; public class MethodOverload { /** * @param args */ public static void main(String ...
- java中的多构造函数以及类字段的初始化顺序
1.同一个类可以有多个构造函数,多个构造函数之间通过参数来区分.这是方法重载的一个实例.构造函数之间可以相互调用. 2.类的初始化块:可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员. ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java的对象初始化过程
成员变量(字段)初始化顺序 在一个类里初始化的顺序是由成员变量在类里面的定义的顺序来决定的.即使成员变量大量散布于类的各个方法定义的中间,那些成员变量仍会在调用任何方法之前得以初始化,甚至在构造函数调 ...
- [Java] 类的初始化步骤
前言 类的初始化过程,可在多线程环境下进行的,为了简化,本文介绍的单线程情况下的类初始化步骤. 此外,继承情况下的顺序不是本文焦点,本文重点在于一个类的内部字段的初始化顺序.想了解继承情况下的初始化情 ...
随机推荐
- Maven开发环境的搭建,含jetty调试[简单明了]
之前的一片老文,搬过来. 1. Maven的开发环境需要哪些部件a) Maven.去http://maven.apache.org/ 下载.将其bin目录加入进系统PATH.测试方法:用命令mvn – ...
- 参数db_ultra_safe
db_ultra_safe参数设置控制保护级别的其它参数的默认值 可以取的值有:off.data_only.data_and_index.默认值是off -off:不影响db_block_checki ...
- 类似 select 选择框效果及美化
网上有各种各样的关于 select 选择框的美化,找了很多,并没有好的样式效果.所以就找了一个利用 ul li 做的类似 select 选择框的效果,不废话了,先上图,效果如下: 对于上图的箭头效果, ...
- hdu 2846 Repository
http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 4898 The Revenge of the Princess’ Knight(后缀数组+二分+暴力)(2014 Multi-University Training Contest 4)
Problem Description There is an old country and the king fell in love with a devil. The devil always ...
- bzoj2333 [SCOI2011]棘手的操作
用set维护每个联通块里的最值,multiset维护所有块里的最值,并查集维护连通性,然后随便搞搞就行了,合并时候采用启发式合并.复杂度O(nlognlogn),大概勉强过的程度,反正跑的很慢就是了. ...
- linux env
.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.1 永久的:需要修改配置文件,变量永久生效. 1.2 临时的:使用export命令声明即可,变量在关闭shell时失效. ...
- requireJs和r.js压缩工具
上面release是执行命令 node r.js -o build.js 生成的,需要切换到目录require/tools下面,也就是 有r.js和build.js的目录,才能执行命令 代码目录如上: ...
- java 项目打包流程速记
1.与资源库同步 2.[解决冲突] --可能没有这一步 3.合并标记 4.清除一下项目-- clean 5.打包: run As -->Maven install 6.去服务备份原包,下载服务 ...
- Workflow Mailer Notifications设置
参考:http://www.docin.com/p-651716490.html http://www.360doc.com/content/12/0218/15/3200886_187602886. ...