首先明确,变量初始化是在任何方法(包括构造器)被调用之前进行的。

1、实例变量的初始化

  实例变量只有当它所属的类实例化后才会存在,构造器被执行就意味着对象就被创建。

1.1、指定初始化。

class Dog
{
  Dog(){
    System.out.println("Constructor is coming!");
  }

  String a = "dog's name is Lily.";
  String b = "dog's attribute is big.";

}

1.2、构造器初始化。

class Dog
{

  String a;

  String b;
  Dog(){

    a = "dog's name is Lily.";
    b = "dog's attribute is big.";
    System.out.println("Constructor is coming!");
  }

}

显然,构造器初始化方法,能够保证初始值必为构造器中的设定值(构造器初始化后于指定初始化及实例代码块初始化);

1.3、实例代码块初始化。

class Dog
{
  Dog(){
    System.out.println("Constructor is coming!");
  }

  String a;
  String b;
  {
    a = "dog's name is Lily.";
    b = "dog's attribute is big.";

    System.out.println(a);
    System.out.println(b);
  }

  Dog(int a){
    System.out.println("Constructor "+a+" is coming!");
  }

  public static void main(String args[]){
    Dog dog = new Dog();
  }
}

实例代码块初始化中,变量定义和赋值语句位置可以颠倒。按笔者水平看来,代码块初始化和指定初始化并无区别,都先于构造器之前被执行,并都是按定义的先后顺序来决定初始化的先后顺序。

2.静态数据的初始化

静态是相对于内存而言的,静态变量仅初始化一次,并且只有在必要时刻才会被初始化。

指定初始化和静态块代码初始化与非静态变量类似,同样的执行优先级,这里不再细分。构造器初始化与非静态变量相同,不在赘述。

class Dog
{
  Dog(){
  System.out.println("Constructor is coming!");
}

  String a1;
  String b1;
  {  
    a1 = "The dog is not static.";
    b1 = "The dog's name is Jack.";
    System.out.println(a1);
    System.out.println(b1);
  }

  static String b;
  static String a = "dsada";
  static {
    a = "dog's name is Lily.";
    b = "dog's attribute is big.";
    System.out.println(a);
    System.out.println(b);
  }

  Dog(int a){
    System.out.println("Constructor "+a+" is coming!");
  }

  public static void main(String args[]){
    Dog dog = new Dog(666);
  }
}

3.总结

初始化顺序为,父类先于子类,静态数据先于非静态数据,构造器初始化总在最后。

java初探之初始化的更多相关文章

  1. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  2. JAVA字段的初始化规律

    JAVA字段的初始化规律 1.类的构造方法 (1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用.构造方法与类名相同,没有返回值. (2)如果类没有定义构造函数,Java ...

  3. Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 目录 类加载器 动态加载 链接 初始化 示例 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理 ...

  4. java类的初始化

    转载:http://blog.csdn.net/moreevan/article/details/6968718 我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程.下面先对这三 ...

  5. [转]java static final 初始化

    http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.stati ...

  6. 【转载】Java系列笔记(1) - Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...

  7. 图示Java类的初始化顺序

    Java类的初始化顺序   在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行.   以下为代码验证阶段,一共三个类 ...

  8. 【软件构造】-<笔记>-浅谈java中类的初始化过程

    编写java程序时,每创建一个新的对象,都会对对象的内容进行初始化. 每一个类的方法中的局部变量都有严格的初始化要求,因此假如写出下面的程序: void f(){ int i; i++; } 编译时就 ...

  9. java创建对象 的初始化顺序

    java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...

随机推荐

  1. poj3281Dining——网络流匹配

    题目:http://poj.org/problem?id=3281 网络流做图中的匹配,注意为了限制每头牛只匹配一种食物和一种饮料,要把牛拆成两个点,之间连边权为1的边. 代码如下: #include ...

  2. Oracle字段增删改方法总结

    一.修改字段的语法:alter table tablename modify (字段名 类型 [default value][null/not null],….);有一个表名为tb,字段段名为name ...

  3. Ubuntu——查看内存和CPU情况

    查看内存及cpu使用情况的命令:top 也可以安装htop工具,这样更直观,安装命令如下:sudo apt-get install htop安装完后,直接输入命令:htop

  4. JMETER 定时器 之 常数吞吐量定时器

    定时器: 默认情况下,Jmeter线程在发送请求之间没有间歇.建议为线程组添加某种定时器,以便设定请求之间应该隔多长时间.如果测试人员不设定这种延迟,Jmeter可能会在短时间内产生大量访问请求,导致 ...

  5. 关于UML图的生成

    想把一个java工程生成UML图非常简单,之前我的eclipse是4.2.0的,没有对应的GEF,所以我索性就直接把工程粘到了My Eclipse中,因为My Eclipse里面有UML自动生成的功能 ...

  6. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  7. Stored Procedures CASE 用法错误

    )) )     select @type=[type] from sys.objects with(nolock) where name=@ObjectName          case @typ ...

  8. [hdu3530]Subsequence (单调队列)

    题意:求在一段序列中满足m<=max-min<=k的最大长度. 解题关键:单调队列+dp,维护前缀序列的最大最小值,一旦大于k,则移动左端点,取max即可. #include<cst ...

  9. [hiho1578]Visiting Peking University

    题意:签到题,不叙述了 解题关键:模拟即可. #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; typ ...

  10. php分页问题

    这样子分: $total_record=50; //这里的50通过sql获取记录总数$list_num=5; //设置一页显示数量$temp=($page-1)*$list_num; $total_p ...