package com.constructor.test;
class Parent {
int pm1;
int pm2 = 100;
int pm3 = pmethod();
{
System.out.println("Parent's instance initialize block");
}
public static int spm1 = 200;
public static int spmethod = spmethod();
static {
System.out.println("Parent's static initialize block");
}
Parent() {
System.out.println("Parent's default constructor");
}
Parent(int i,int j)
{
//无用this();就不会调用默认的构造器
System.out.println("two 参数的parent构造器");
}
static void staticmethod() {
System.out.println("Parent's staticmethod");
}
int pmethod() {
System.out.println("Parent's method");
return 3;
}
static int spmethod()
{
System.out.println("parent's static field and static method give it the value");
return 88;
}
}
class Child extends Parent {
int cm1;
int cm2 = 1000;
int cm3 = cmethod();
Other co;
static Other co2;
public static int cmethod = scmethod();
public static int scm1 = 2000;
{
System.out.println("Child's instance initialize block");
}
static {
co2 = new Other();
cmethod2(); // 要static的方法才行
System.out.println("Child's static initialize block");
}
{
System.out.println("Child's instance initialize block 2222");
}
Child() {
co = new Other();
System.out.println("Child's default constructor");
}
Child(int m) {
this(); //如果无this就不会调会默认的构造器Child()
cm1 = m;
System.out.println("Child's self-define constructor");
}
static void staticmethod() {
System.out.println("Child's staticmethod");
}
int cmethod() {
System.out.println("Child's method");
return 3;
}
static void cmethod2() {
System.out.println("Child's method2!!!");
}
static int scmethod()
{
System.out.println("child's static field and static method give it the value");
return 888;
}
}
class Other {
int om1;
Other() {
System.out.println("Other's default constructor");
}
}
public class TestConstructor {
public static void main(String args[]) {
Child c;
System.out.println("program start");
System.out.println("Child.scm1=" + Child.scm1);
// System.out.println("c.cm3="+c.pm2); pm2还未被初始化!
c = new Child(10);
System.out.println("program end");
System.out.println();
System.out.println("second instance begin");
Child d = new Child(20);
System.out.println("sencond instance end");
//Child e = new Child(10,12); //没有声明Child(int,int)的构构器,不能通过编译
Parent e = new Parent(10,12);
}
}
program start
parent's static field and static method give it the value
Parent's static initialize block
child's static field and static method give it the value
Other's default constructor
Child's method2!!!
Child's static initialize block
Child.scm1=2000
Parent's method
Parent's instance initialize block
Parent's default constructor
Child's method
Child's instance initialize block
Child's instance initialize block 2222
Other's default constructor
Child's default constructor
Child's self-define constructor
program end
second instance begin
Parent's method
Parent's instance initialize block
Parent's default constructor
Child's method
Child's instance initialize block
Child's instance initialize block 2222
Other's default constructor
Child's default constructor
Child's self-define constructor
sencond instance end
Parent's method
Parent's instance initialize block
two 参数的parent构造器
从代码可以看到,对象的构造分为
类的构造和
实例的构造两部分.
类的构造是在类的静态属性,方法调用之前完成的.System.out.println("Child.scm1=" + Child.scm1);之前就会完成类的静态属性和方法和块.
实例的构造是在new 构造方法时开始做的,Child d = new Child(20);.
构造的详细顺序如下:
类构造 (只做一次的,不论你new了多少个对象)
1.父类的static 属性(field)
2.父类的static块(block)
3.子类的static field
4.子类的static block
实例构造 (new一次做一次)
1.实例父类的field (非static)
2.实例父类的初始化block (非static,是用{}括起来的那些)
3.实例父类的默认构造器 (默认构造器是类名()这个)
4.实例子类(这个类)的field
5.实例子类(这个类)的初始化block
6.实例子类(这个类)的默认构造器 /no 应该是new的那一个构造器,见Parent e = new Parent(10,12);
(1)属性的构造顺序是按顺序的,先出现先构造.
(2)块的构造顺序是也是按顺序的,先出现先构造.
(3)如果块中,或方法中有new X类();的,就会调用X类的构造器.
(4)final不能用来声明构造方法.
分享到:
相关推荐
java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。
java 按顺序读取文件 java 按顺序读取文件 java 按顺序读取文件
自己收集的JAVA构造json对象的方法几个方法
java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....
在Java中,构造函数的访问级别通常是public, 它提供了一个构造该类对象的接口。可是你知不知道,把构造函数的级别设为private, 有一些特别用处。
面向对象与Java实现(类、对象、构造方法
通过实例学习Java对象的构造过程
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java构造方法.zip79.java...
Java类的完整构造执行顺序
本次实验进一步学习了Java的相关知识,深入理解了面向过程与面向对象语言的区别,了解了面向对象语言的三大特征,掌握类的声明和构造方法,掌握了对象的创建方法与创建机制,掌握了成员变量、类变量和局部变量区别,...
83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中...
“礼让”原则学习Java对象初始化顺序
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...
java 按字母顺序比较大小 java 按字母顺序比较大小
Java_旺旺老师_构造方法与“析构方法”
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
JAVA面向对象程序设计试题与解析库 给出许多题目, 而且有答案和讲解。 可以作为毕业生找工作的参考学习资料
Java中对象的生命周期 自己总结 Java中对象的生命周期 private构造方法
JAVA构造器