java中有关初始化的问题

在类的内部,变量定义的先后顺序决定了初始化顺序,即时变量定义分散在方法定义之外,它们依旧会在任何方法(包括构造器)被调用之前得到初始化

其中初始化的顺序先是静态对象,其后是非静态对象

例如:

class Cat{
    private Dog dog1=new Dog(1);
    static private Dog dog2=new Dog(2);
    public Cat(int n){
        System.out.println("第"+n+"只猫");
    }
}
class Dog{
    public Dog(int n){
        System.out.println("Dog("+n+")");
    }
}
public class TestStatic {
    public static void main(String[] args) {
        System.out.println("test...");
        Cat cat=new Cat(1);
    }
}  

运行结果:

test...
Dog(2)
Dog(1)
第1只猫

  

cat类和dog类构造器中打印信息为了看初始化信息

在main方法中,创建了一个Cat类,除构造方法外,有两个对象,一个是静态dog,另外一个是dog,因为静态对象有先初始化,所以先打印出Dog(2),其后才是Dog(1)

最后才调用cat的构造方法,打印出cat(1)

非静态实例初始化

{}里初始化的内容在构造器之前执行,且每次生成该类{}将会重新被初始化

时间: 2024-11-05 22:41:40

java中有关初始化的问题的相关文章

Java中的初始化过程(转)

原文:http://www.cnblogs.com/mmbo/archive/2009/10/05/1578156.html 1.类成员自动初始化,基本类型总是最先初始化为0(boolean为false,(char)0),对象的引用初始化为null:2.类成员指定初始化,可以在类成员定义或构造器(包括其他方法)中给基本类型和非基本类型对象初始化,但这并不能阻止自动初始化首先进行:3.按类成员定义的顺序决定初始化的顺序:4.静态成员只有在第一次被访问时(class对象首次加载)才会被初始化,此后不

Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 参考文章     http://my.oschina.net/leoson/blog/103251 1. 一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 2. 两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量

java中String初始化的两种方式

转自:http://www.diybl.com/course/3_program/java/javajs/2007104/75886.html       字符串可能是任何程序语言中都会出现的对象,java中创建并初始化一个String对象,最常见的方式有两种: String str=new String("XXX"); String str="XXX"; 二者看似相同,其实有很大的差别.       前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中

[java] java中的初始化顺序

先看程序: 1 package init_cls; 2 3 class A{ 4 5 {System.out.println("i am in the class A!");} 6 static { System.out.println("static is the class A");} 7 } 8 public class init_cls { 9 {System.out.println("i am in the init_cls");} 1

Java中创建对象初始化过程的理解

以下面程序为例: 1.源码Cars.java通过编译生成Cars.class文件: 2.执行时分为两步: 第一步将Cars类的字节码加载到内存中, 第二步是new之后自动执行的.①将属性color和price初始化内存堆,并附上初始值null和0.0(声明,赋初值):②调用有两个参数的构造方法public Cars(String color,double price),把具体值"black"和60000赋值给形式参数color和price(即执行Cars("black&quo

Java 中 HashMap 初始化时赋值

1.HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器.普通青年一般会这么初始化:HashMap<String, String> map = new HashMap<String, String>();map.put("name", "test");  map.put("age", "20"); 看完这段代码,很多人都会觉得这么写太啰嗦了

Java中String初始化了String域 和 构造器初始化的String域的差异

这是 java编程思想 第五章---初始化与清理 的一题 练习2 : 创建一个类,它 包含了一个定义时就被初始化了的String域,以及另一个通过构造器初始化的String域,这两种方式有何差异. 看这一段程序以及结果, 首先明确三个知识点: 1.String是引用对象 2.equals() 比较的是值 3. "=="是比较的 地址 String s1 = "abc"; String s2 = "abc"; String s3 = new Str

Java中的初始化

一.成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,Java以编译错误的形式来贯彻这种保证. 如果类的成员是基本类型,会被默认分配一个值,可以不显式的声明:如果类里定义一个对象引用,不将其初始化,被默认分配一个null. 二.构造器初始化      详见<Thinking in java> P91 : 5.6 成员初始化

Java 中变量初始化、子类和父类构造器调用的顺序

先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int index = 0; private static String getStaticName() { String name = String.format("animal %d" , index++); System.out.println(name); return name; } priva