请问这段代码为什么输出null,求大神解答程序执行的顺序?

问题描述

请问这段代码为什么输出null,求大神解答程序执行的顺序?

public class xieCheng {
private String baseName="Base";
public xieCheng(){
this.callName();
}
public void callName(){
System.out.println(baseName);
}
}

public class Sub extends xieCheng {
private String baseName="Sub";
public void callName(){
System.out.println(baseName);
}

public static void main(String[] args){
xieCheng xc=new Sub();
xc.callName();
}
}

解决方案

/**
* xieCheng 是父类,Sub是子类,
* xieCheng xc = new Sub(); 这样的申明方式 是 编译期是父类,如果没有callName 方法则会报编译错误,但是 实际运行时候是 运行子类的方法
* 当new Sub() 时候 ,查询这个类 是否有父类,如果有父类先初始化父类(属性-->构造器等) 当运行到父类的 callName时候,因为子类对其进行了重载,
* 则运行时候 运行子类的callName 方法,所以第一个null 是在初始化父类的时候 输出的,输出子类baseName 还未初始化的值
* 第二个 则输出的也是子类的属性
*

* 父类(baseName)初始化-->父类构造器-->子类重载父类callName-->子类callName 输出 子类baseName属性-->初始化 子类-->xc.callName();执行子类callName方法
*
*/

解决方案二:

解决方案三:

你可以先学习一下断点调试,这样以后遇到类似问题会方便的多

解决方案四:

首先确定初始化顺序,父类->子类;
其次动态分派:根据实际类型确定调用函数,

解决方案五:

实例化一个类对象的时候,运行顺序为:

静态块
父类构造器
本类中的块
本类的构造器

类初始化时构造函数调用顺序:
(1)初始化对象的存储空间为零或null值;
(2)调用父类构造函数;
(3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
(4)调用本身构造函数。

解决方案六:

打断点一步一步调试,这样学得很快的

时间: 2016-09-23
Tags: 代码

请问这段代码为什么输出null,求大神解答程序执行的顺序?的相关文章

think-分享代码调用问题,求大神解答 感激不尽

问题描述 分享代码调用问题,求大神解答 感激不尽 <volist name="list" id="vo" > 这里是遍历的文章 <script> window._bd_share_config = { common: { //此处放置通用设置[] bdText: '{$vo.title}', bdDesc: '{$vo.description|msubstr=###,0,150}', bdUrl: 'http://www.weiduhui.c

html-AngularJS监听时间代码我看不懂,求大神解答

问题描述 AngularJS监听时间代码我看不懂,求大神解答 angular.module("ezstuff",[]) .directive("ezNamecardEditor",function(){ return { restrict : "E", template : " ", replace : true, link : function(scope,element,attrs){ //获得变量名称 var model

qt-用Qt连接mysql遇到问题,求大神解答

问题描述 用Qt连接mysql遇到问题,求大神解答 #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); qDebug() << "available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach (QString driver, drivers)

图片-Junit测试出问题,求大神解答

问题描述 Junit测试出问题,求大神解答 程序截图 报错:

struts2-这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答??

问题描述 这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答?? <s:form action=""deleteMessageAction"" method=""post""> <table align=""center"" width=""40%"" border=""5&

c#-请问这段代码的输出结果,and why?

问题描述 请问这段代码的输出结果,and why? class Person { private int age; public int Age { get { return age; } set { age = value; } } } class Program { static void Main(string[] args) { Console.WriteLine(GetPerson().Age); Console.ReadKey(); } static Person GetPerson

c++基础c++-求大神写一段c++代码,做题能做对但是自己写代码就漏洞百出,求大神指导

问题描述 求大神写一段c++代码,做题能做对但是自己写代码就漏洞百出,求大神指导 年龄 Age姓名 char name公有成员函数: 构造函数 带参数的构造函数Student(int mchar); 不带参数的构造函数 Student() 析构函数 -Student() 改变数据成员值函数 void SetMemer(int mchar *) 获取数据成员函数 int GetAge() char * GetName()要求:在main()中定义一个有3个元素的对象数组并分别初始化,然后输出对象数

android开发-请问里面 的strResult如何给主线程用啊,求大神解答,最好简单写下代码

问题描述 请问里面 的strResult如何给主线程用啊,求大神解答,最好简单写下代码 new Thread(new Runnable() { @Override public void run() { Looper.prepare(); // TODO Auto-generated method stub String path = "http://www.shopmanage.com/landlady/spm"; // String path = "http://221.

jquery-见鬼,太奇怪了,求大神解答这段js代码怎么得不到预期结果。

问题描述 见鬼,太奇怪了,求大神解答这段js代码怎么得不到预期结果. 本来要写一个滚动条到底部自动加载的功能,if里面的判断表达式结果确实是true但是if里面的代码被执行5次.设置全局变量,return false.....都没法解决这个问题.求js大神解答.该怎么写才合适. $(window).scroll(function(){ if (($(document).height())==($(window).height()+$(document).scrollTop())) { alert