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++-理解构造函数、析构函数执行顺序
先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...
随机推荐
- Mac 10.7.*安装XCode3.2.6的方法
1.首先,在Xcode 3.2.6的磁盘映像(dmg文件)上点击右键,选择“磁盘工具”打开,如图1所示,转换成一个可读写的dmg文件,如图2所示. 图1 图2 转换好后双击它,让它在Finder里面显 ...
- 一道Python练习题
有关字符串与编码的,转自廖雪峰Python教程. 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位: # -*- co ...
- MySQL 设置数据库的隔离级别
在会话级别设置隔离级别 1.read commited :set session transaction isolation level read committed; 2.repeatable re ...
- 闪存主控IC的作用
闪存主要是由闪存芯片.主控芯片.晶振.PCB板等部件组成的.其中主控芯片相当于闪存的“灵魂”,它控制着闪存的工作.主控芯片也是处理单元,在里面写入的程序对整个电路做控制.主控IC是把flash跟hos ...
- MyBatis good
命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则. 完全限定名(比如“com.mypackage.MyMapper.selectAl ...
- 利用KVC实现无需协议的委托模式
在<精通iOS开发>一书中看到的技巧.假设BIDTaskListController是一个列表,点击列表上的一项将会导航到BIDTaskDetailController,在BIDTaskD ...
- CSS换行1
1.你定死表格的宽度,即给表格一个宽度值(是数值,不是百分比) 2.强制不换行 div{//white-space:不换行;normal 默认;nowrap强制在同一行内显示所有文本,直到文本结束 ...
- Img垂直居中
IMG垂直居中问题 2011-02-22 10:51:00| 分类: CSS | 标签:垂直居中 div align img vertical |举报|字号 订阅 转载来自:htt ...
- Shader程序中内置的状态变量
经常在着色器程序需要访问一些全局状态,像当前的 model view projection 矩阵,当前环境的颜色诸如此类. 内置的矩阵 UNITY_MATRIX_MVP:当前模型 视窗 投影矩阵 UN ...
- centos7源以及相关的一些命令
yum makecache:将服务器上的软件包信息在本地缓存,以提高 搜索安装软件的速度. yum update:更新所有的rpm包 yum upgrade:大规模的版本升级,与yum update不 ...