java面试扫盲:对象初始化顺序(真的未必能答对)
记录下面试里面遇到的一些java盲区,一方面扫描自己的知识盲区,一方面也可以给后面面试的朋友一些警示,以免面试的时候出现不知道的尴尬情况。
提出问题:父类静态属性,父类属性,父类构造方法,子类静态属性, 子类属性,子类构造方法的初始化顺序?
- 提出猜想:父类静态属性=> 父类属性=> 父类构造方法= > 子类静态属性=> 子类属性=> 子类构造方法?
- 方法论:实践是检验真理的唯一标准。
初步设计类的结构uml。
直接上源代码
/**
* 轮子类
*/
public class Wheel {
public Wheel(String name){
System.out.println(name);
}
}
//汽车
public class Car {
static Wheel backWheel = new Wheel("static: Car => backWheel");
Wheel forwordWheel = new Wheel("Car => forwordWheel");
Car(){
System.out.println("Car");
}
}
//奔驰汽车
public class BenzCar extends Car{
static Wheel backWheel = new Wheel("static: BenzCar = > backWheel");
Wheel forwordWheel = new Wheel("forwordWheel = >");
BenzCar(){
System.out.println("BenzCar");
}
}
//测试类
public class Main {
public static void main(String[] args) {
System.out.println("====================>");
BenzCar benzCar = new BenzCar();
System.out.println("====================>");
}
}
输出结果:有点出乎意料。
====================>
static: Car => backWheel
static: BenzCar = > backWheel
Car => forwordWheel
Car
forwordWheel = >
BenzCar
====================>
java学习群669823128
结论:猜想错误,父类静态属性=> 子类静态属性 => 父类属性 => 父类构造方法 => 子类属性 => 子类构造方法。 而且有一个细节,static 变量初始化并非一开始就初始化的。而是实例化的时候。static属性才开始初始化的。
java面试扫盲:对象初始化顺序(真的未必能答对)的更多相关文章
- Java变量、Java对象初始化顺序
局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...
- Java中的成员初始化顺序和内存分配过程
Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...
- java类的成员初始化顺序和初始化块知识
java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...
- Java 类成员的初始化顺序
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. 1 无继承情况下的Jav ...
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...
- Java对象初始化顺序
最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com.ds.test; public class Upper { String upperSt ...
- 一文理解java对象初始化顺序
例子 Talk is cheap, Show you the code! public class ParentClass { static int parentStaticField = 1; ...
- Java中class的初始化顺序
由于Java 中的一切东西都是对象,所以许多活动 变得更加简单,这个问题便是其中的一例. 除非真的需要代码,否则那个文件是不会载入的.通常,我们可认为除非那个类的一个对象构造完毕, 否则代码不会真 ...
- Java类的变量初始化顺序
大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台 ...
随机推荐
- fiddler 监听HttpClient发送的请求
用HttpClient模拟浏览器发送请求,设置一下代理httpClient.getHostConfiguration().setProxy("127.0.0.1", 8888);
- sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
--修改字段类型: --alter table 表名 alter column 待修改字段名 待修改字段类型 alter table users alter column userid varchar ...
- 如何从MVP模式进阶到Clean模式
从类图上来看,MVP都是一个业务一个Presenter,每个Presenter都是一个接口,它还包含了View的接口,用于定于和View相关的行为,然后Activity等业务类实现View的接口,因为 ...
- 转载:WPF MVVM之INotifyPropertyChanged接口的几种实现方式
原文地址:http://www.cnblogs.com/xiwang/ 序言 借助WPF/Sliverlight强大的数据绑定功能,可以比实现比MFC,WinForm更加优雅轻松的数据绑定.但是在使用 ...
- javascript 之基本包装类型--04
基本包装类型 基本包装类型是特殊的引用类型.每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用属性.方法来进行后续操作. ECMAScript还提供了三种基本包装类型 ...
- 80端口被系统服务【kernel&System】占用解决方案
netstat -ano | findstr port //查看端口占用情况 tasklist | findstr port //查看端口被占用的具体服务名 运行net stop http ...
- (转) Redis学习教程--基本命令
原文出自:http://www.cnblogs.com/woshimrf/p/5198361.html 目录 全局操作:1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存 ...
- JAVA中java.util.Date、java.sql.Timestamp和String之间的互相转换
java.util.Date与的String互转 java.util.Date---->String /** * 将java.util.Date对象转化为String字符串 * @param d ...
- linux命令行下svn常用命令
linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...
- Linux.SSH.修改SSH端口号
Linux系统的默认SSH端口是22, 一般为发安全起见, 建议修改成其它端口 编辑配置文件: vi /etc/ssh/sshd_config 找到 #Port 22 把前面的#号去掉, 22修改成新 ...