java 构造函数是如何执行的
1.构造函数不是方法!!
原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;
2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。
package com.statics.www;
public class Son {
//构造函数执行第二步:
private int num2=1*cal2();
//构造函数执行第一步:
public static int num1=1*cal1();
//构造函数第0步:
public static int cal1(){
System.out.println("构造函数第一步:静态变量赋值!");
return 1;
}
public static int cal2(){
System.out.println("构造函数第二步:非静态全局变量赋值");
return 2;
}
{
System.out.println("构造函数第三步:代码块!");
}
public Son(){
System.out.println("构造函数第四步:执行构造函数内部代码块!");
}
}
执行结果为:
2. 从上面测试得出结论:
构造函数初始化对象时,执行的顺序是
0.方法优先存在于任何变量或者对象,存在于类中,而不是对象中。即构造对象前,方法就存在。
第一步. 静态变量赋值
第二步.代码块或者全局变量,(执行顺序由代码位置决定,如果代码块在前,优先执行代码块;如果变量在前,优先变量赋值)
第三步.执行构造函数内部代码
3.继承中的构造函数执行顺序:
0.子类重写了父类的方法;
1.调用父类构造函数();
2.调用子类构造函数();
父类代码:
package com.statics.www;
public class Father {
private int num=1;
public Father(){
System.out.println("构造father,接下来调用Test()");
Test();
}
public void Test(){
System.out.println("调用Father被重写的方法Test(),现在的Num值是"+num);
}
}
子类代码:
package com.statics.www;
public class Son extends Father {
private int num=1;
public Son(){
System.out.println("执行Son构造函数内部代码块!");
}
public void Test(){
System.out.println("调用Son被重写的方法Test(),现在的Num值是"+num);
}
}
可以看出被调用的Test()方法是子类的Test(),另外特别注意Num =0!!!!!!因为父类的num 是private的不能继承,但是子类的num还没有被赋值(要等到父类构造完成,才能构造子类),所以默认是0
java 构造函数是如何执行的的更多相关文章
- 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序
一.阿里巴巴笔试题: public class Test { public static int k = 0; public static Test t1 = new Test("t1&qu ...
- java 构造函数
1.public className(){}. 2.名称与类名相同,无返回值,无返回类型,void也不行.(就是上边的形式,除了可以有参数). 3.有0个或多个参数. 4.每个类都至少有一个const ...
- Java Object 构造方法的执行顺序
Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class ...
- JAVA构造函数(方法)
一.什么是构造函数 java构造函数,也叫构造方法,是java中一种特殊的函数.函数名与相同,无返回值. 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法. 在现 ...
- Java审计之命令执行篇
Java审计之命令执行篇 0x00 前言 在Java中能执行命令的类其实并不多,不像php那样各种的命令执行函数.在Java中目前所知的能执行命令的类也就两种,分别是Runtime和 ProcessB ...
- 用命令行编译java并生成可执行的jar包
用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: ...
- Java 代码编译和执行的整个过程
Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: ...
- JVM学习笔记(二)------Java代码编译和执行的整个过程【转】
转自:http://blog.csdn.net/cutesource/article/details/5904542 版权声明:本文为博主原创文章,未经博主允许不得转载. Java代码编译是由Java ...
- C++-理解构造函数、析构函数执行顺序
先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...
随机推荐
- Do not go gentle into that good night
Do not go gentle into that good night By:Dylan Thomas Do not go gentle into that good night,Old ag ...
- (4)事件处理——(3)代码执行的顺序(Timing of code execution)
In Chapter 1, Getting Started, we noted that $(document).ready()was jQuery's primary way to perform ...
- js基础参数获取
1 获取浏览器中url中的参数,会自动把问号"?"去掉 function getParamsFromHref() { //调试用 var wyl_ = window.locatio ...
- JAVA并发,CyclicBarrier
CyclicBarrier 翻译过来叫循环栅栏.循环障碍什么的(还是有点别扭的.所以还是别翻译了,只可意会不可言传啊).它主要的方法就是一个:await().await() 方法没被调用一次,计数便会 ...
- 快速的CDN加速服务
jQuery Migrate jQuery官网CDN地址jQuery版本迁移辅助插件,用jquery不同版本开发的程序在修改jquery版本出现的兼容问题可以使用jQuery Migrate解决此问题 ...
- Android 流媒体系列(二)
import java.io.IOException; import android.app.Activity; import android.content.ContentResolver; imp ...
- Codeforces 700B Connecting Universities(树形DP)
[题目链接] http://codeforces.com/problemset/problem/700/B [题目大意] 给出 一棵n个节点的树, 现在在这棵树上选取2*k个点,两两配对,使得其配对的 ...
- linux系统的安装
安装linux系统须要选择一个linux操作系统,有redhat,ubuntu,centos,这里选择centos进行linux系统的安装 首先在centos的官方站点下载镜像文件CentOS-6.5 ...
- 非线性规划问题的matlab求解
函数:[x, fval] = fmincon(FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON) 返回的x:是一个向量——在取得目标函数最小时各个xi的取值: 返回的f ...
- 跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)
跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增) 网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是 ...