Java 初始化字段方式和顺序
Java 初始化字段方式和顺序:
类加载时直接初始化静态字段;
类加载时调用静态方法初始化静态字段;
实例化对象时,在调用构造函数之前代码块中初始化字段;
实例化对象时,在调用构造函数之时初始化字段;
初始化字段顺序1->2->3->4
代码如下:
public class Employee {
//实例化对象时,在调用构造函数之前前初始化字段;
private int id; // 实例化对象时初始化为0
private String name; // 实例化对象时初始化为null
private boolean flag; // 实例化对象时初始化为false
private static int age = 22; // 加载类时初始化为22
// 在构造函数之前初始化
{
int num = 1111; // 实例化对象时初始化为1111
String name = "QA";// 实例化对象时初始化为QA
setId(num); // 实例化对象时调用
SetName(name); // 实例化对象时调用
System.out.println("call instance method");
}
//类加载时调用静态方法初始化静态字段;
static {
System.out.println("age is: " + age);
age = 30; // 加载类时初始化为33
print(); // 加载类时时调用
}
public void SetName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public static int getAge() {
return age;
}
public void setId(int num) {
id = num;
}
public static void print() {
System.out.println("call static method");
}
public Employee() {
// TODO Auto-generated constructor stub
}
public Employee(int id, String name) {
// TODO Auto-generated constructor stub
this.id = id;
this.name = name;
System.out.println("call constructor method");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("---------------------------");
System.out.println("age is: " + Employee.getAge());
System.out.println("---------------------------");
Employee e = new Employee();
System.out.println("id is: " + e.getId());
System.out.println("name is: " + e.getName());
System.out.println("---------------------------");
Employee e2 = new Employee(2222, "Dev");
System.out.println("id is: " + e2.getId());
System.out.println("name is: " + e2.getName());
}
}
运行结果:
age is: 22
call static method
---------------------------
age is: 30
---------------------------
call instance method
id is: 1111
name is: QA
---------------------------
call instance method
call constructor method
id is: 2222
name is: Dev
Java 初始化字段方式和顺序的更多相关文章
- Java初始化块及执行顺序
理解 初始化块又称为代码块.属于类中的第四大成员.本质上是一个方法,它也有方法体,但没有方法名,没有参数,没有返回,而且也不是通过对象或类名显式调用,而是通过隐式调用 是构造器的补充 语法 [修饰符] ...
- Java初始化顺序
package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...
- java初始化构造函数调用顺序
类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值: (2)调用父类构造函数: (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式: (4)调用本身构造函数. 例子 ...
- [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
Java初始化顺序1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包 ...
- Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?
[Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构 ...
- java初始化块执行顺序
java中初始化块的执行顺序在构造器之前,多个初始化块之间定义在前的先执行.如下: public class InitialBlockTest { // The first one { System. ...
- C++使用初始化列表的方式来初始化字段
几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构 ...
- C# 与Java初始化顺序及异同(转)
C#初始化顺序 类成员变量初始化先于类的构造函数 静态成员变量先于实例变量 子类成员变量先于父类成员变量(java相反) 父类构造函数先于子类构造函数 参考实例: using System; //us ...
- 关于java中三种初始化块的执行顺序
许多小伙伴对于java中的三种初始化块的执行顺序一直感到头疼,接下来我们就来分析一下这三种初始化块到底是怎么运行的.有些公司也会将这个问题作为笔试题目. 下面通过一段代码来看看创建对象时这么初始化块是 ...
随机推荐
- idea git merge代码
1.点击idea 右下角的红框区域 2.出现如下截图,第一个红框是本地dev merge,也就是说可以从从本地的dev仓库merge,第二个红框表明可以从远程的git dev merge 第三个红框表 ...
- JqueryUI-1
本文在于巩固基础 学习网址:http://jqueryui.com/ 基本概念:jQuery UI[是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画. ...
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...
- uva 10655 - Contemplation! Algebra
---恢复内容开始--- Given the value of a+b and ab you will have to find the value of an+bn 给出a+b和a*b的值,再给出n ...
- ora-00600笔记
一. ORA-600 概述 Errorsof the form ORA-600 are called internal errors. This section clarifies themisund ...
- SVN(一次检出&二次检出)
一次检出: >进入经历文件夹 >输入svn checkout指令 >输入电脑密码 >输入用户名 >输入密码 >检出成功 第二次检出: >进入小涛文件夹 > ...
- form表单中经常用到的禁用获取值问题
<input name="country" id="country" size=12 value="disabled提交时得不到该值 " ...
- [ZT]图像处理库的比较:OpenCV,FreeImage,CImg,CxImage
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
- 获取mysqli函数的值和字段名
<?php $mysqli=new mysqli("localhost", "root", "123456", "xsphp ...
- 新手讲树:证明任意二叉树度为零的节点n0,永远比度为2的节点n2多1个
证明: 设度为1的节点个数为n1,因为二叉树的所有节点的度都小于等于2, 所以n=n0+n1+n2; 又因为二叉树中,除了根节点所有的节点都有一个进入节点的分支,假设B为所有的分支,那么n=B+1 ...