您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31 【问答】1527人已围观
简介 请问下面程序将会输出什么?程序如下:public class Test { class A{ private static final int m = 10; public A(){ change(); } public void change(){ System.ou......
请问下面程序将会输出什么?程序如下:
public class Test { class A{ private static final int m = 10; public A(){ change(); } public void change(){ System.out.println(m); } } class B extends A{ private static final int num = 20; public void change(){ System.out.println(num); } } }
输出测试:
public class Test2 { public static void main(String[] args) { new Test().new B(); } }
结果公布,最终会输出:20,为什么?分析一下继承的初始化顺序。
继承的初始化顺序一般如下:
父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类的非静态变量(子类的非静态代码块)-->子类的构造函数
值得注意的是:父类的非静态变量(父类的非静态代码块)是同一级的,看哪个部分写在类的最前面谁就先被执行,子类的非静态变量(子类的非静态代码块)也是一样。
所以这道题,实例化一个子类,首先会去执行父类的构造方法,执行构造方法中的函数change,但是由于change函数被子类重写了,所以执行的将是子类的change,所以会输出20;
但是,如果我们把子类的中的
private static final int num = 20;
改为
private int m = 20;
那么结果又会输出什么呢?结果是0,因为在父类的构造方法中调用子类的change方法输出num的时候,num作为一个实例变量,这时候还没有被实例化赋值,所以取得是初始值0。
上一篇: 有趣的Java字符串
相关文章
随机图文
-
据说是一道华为Java面试题
请问下面程序将会输出什么?程序如下:public class Test { class A{ private static final int m = 10; public A(){ change(); } public void change(){ System.out.println(m); } } class B extends A{ private static final int num = 20; public void change(){ System.out.println(num); } }}输出测试:public class Test2 { public static void main(String[] args) { new Test().new B(); }}结果公布,最终会输出:20,为什么?分析一下继承的初始化顺序。继承的初始化顺序一般如下:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类的非静态变量(子类的非静态代码块)-->子类的构造函数值得注意的是:父类的非静态变量(父类的非静态代码块)是同一级的,看哪个部分写在类的最前面谁就先被执行,子类的非静态变量(子类的非静态代码块)也是一样。所以这道题,实例化一个子类,首先会去执行父类的构造方法,执行构造方法中的函数change,但是由于change函数被子类重写了,所以执行的将是子类的change,所以会输出20;但是,如果我们把子类的中的private static final int num = 20;改为private int m = 20;那么结果又会输出什么呢?结果是0,因为在父类的构造方法中调用子类的change方法输出num的时候,num作为一个实例变量,这时候还没有被实例化赋值,所以取得是初始值0。 -
mysql卸载步骤图解
mysql的安装步骤稍微有点复杂,有些同学第一次安装可能因为各种原因导致失败。 mysql安装失败或者想要更换新的mysql版本,必须卸载干净,才能进行重装,下面介绍mysql卸载的详细步骤。 win+r搜services.msc调出计算机服务列表,停止mysql服务器(如果没有该服务,直接下一步)。 控制面板,卸载所有MySQL开头的软件。 删除所有mysql相关的注册表值。 Win+R,在搜索框中输入指令regedit,进去注册表。 注意有部分同学,可能不一定是如下5个目录,如果没有对应的文件夹就不用删除了。 主要保证,有多少个ControlSet就检查多个,并且删除下面目录下的MySQL。 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet004\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet005\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 删除原来旧的安装文件,一般安装目录没有修改的情况下都是在如下几个文件夹: C:\Program Files\MySQL C:\Program Files (x86)\MySQL C:\ProgramData\MySQL 注意,ProgramData文件是系统隐藏文件,需要设置对隐藏文件可见。 如果计算机服务列表中,还存在上一次安装的服务残余(比如我第一张图的MySQL服务),可以在cmd中使用命令删除。 当然你也可以不删除,在重装的时候修改一下MySQL的服务名就可以了。 -
javase+mysql部署项目教程
很多刚接触编程的同学,还不清楚如何使用eclipse部署javase项目,这里作一个简单的介绍:##软件安装1.jdk配置 首先安装好jdk,我一般使用1.8版本的jdk。配置好JDK环境变量。 jdk下载,包含jdk1.7和jdk1.8,32位(i586)和64位(x64),请看清楚再下载,下载地址如下: 百度网盘下载链接:https://pan.baidu.com/s/1O2eHQ83LB4SmDI7ivTKApA 提取码:0cdj 或者官网下载: jdk1.7下载,下载需要登录oracle账户,地址如下: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html jdk1.8下载,地址如下 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装参考文档如下: http://www.xiaoniucr.com/article/view/9.html2.安装eclipse 我一般使用mar2版本。请自行选择32位或者64位下载。 百度网盘下载链接:https://pan.baidu.com/s/14Fo2b4znVPF6JrEmcZyc1Q 提取码:cwoc 官网下载地址如下: http://www.eclipse.org/downloads/packages/release/mars/2/eclipse-ide-java-ee-developers eclipse为免安装软件,下载到某个目录,解压就好了,发送快捷方式到桌面。 注意eclipse的版本必须和JDK版本一致,即eclipse必须保持和JDK同时是 32位或者64位,否则会打不开或者报错。3.mysql安装 mysql我使用的是5.7.24的版本。现提供5.6.42和和5.7.24安装版本的下载地址。 免安装版本需要配置,如果不懂得配置的同学,建议下载5.7.24的安装版本,按照步骤一步步执行安装。 mysql百度网盘下载链接: 链接:https://pan.baidu.com/s/1PObOxF0CCKIgg9kzIFDnkA 提取码:zq1j mysql官网下载地址:https://dev.mysql.com/downloads/installer/5.6.html mysql安装教程参考:http://www.xiaoniucr.com/article/view/10.html 安装过程中请记住自己的数据库用户名和密码,项目配置需要用到。 另外还需要安装一个mysql可视化工具:navicat for mysql。 navicat for mysql下载链接:https://pan.baidu.com/s/1VEn3oLW1f2QFM-fYFnpX3Q 提取码:pwgi navicat使用教程,请参考:http://www.xiaoniucr.com/article/view/11.html 由于部分同学第一次安装过程中出现失误,需要完全卸载mysql进行再次安装,mysql完全卸载比较费劲,参考步骤如下: mysql卸载参考:http://www.xiaoniucr.com/article/view/13.html##项目导入 eclipse点击File→Import弹出如下选择框 点击next进行项目选择导入 选择完项目之后,最后点击Finish,项目就导入进了eclipse。##项目jdk配置 仅仅将项目导入到eclipse还不够,要运行这个项目,还必须为项目设置jdk环境,操作如下: 鼠标选中项目,右键Properties,跳出如下窗体: 点击edit跳出如下窗体,进行jre环境的选择: 选择完jdk之后,点击Apply应用,最后点击[OK]按钮,进行确认,这样jdk就设置好了,如下: ##数据库配置1.使用navicat导入数据库脚本(.sql文件),导入步骤参考如下:http://www.xiaoniucr.com/article/view/11.html2.要想正确的连接mysql数据库,必须在代码中将数据库的用户名和密码配置,改为你的电脑安装的mysql的用户名和密码, 其中,用户名一般都为root,不需要更改,密码为学生自己安装mysql时设置的密码。 具体如何操作,在项目源码包中【配置】文件夹下都会包含一份【详细配置.docx】文件,参照里面的数据库配置进行配置即可。##项目启动 以上步骤都完成之后,就可以启动项目了,javase项目的启动,一般都是使用Run as Java Application的形式,操纵如下: 找到项目main方法所在的java类,然后右键Run as,选择Java Application的形式启动,即可。 详细操作见:【详细配置.docx】文件中的项目部署,里面都会详细告知。 -
sqlserver数据库使用教程
鉴于部分同学对于如何使用sqlserver数据库还不是很清楚,这里稍微作个简单的介绍:#sqlserver安装 sqlserver一般安装sqlserver2008-r2版本的。 sqlserver2008-r2百度网盘下载链接:https://pan.baidu.com/s/1fo261JzvkbFbu75KI3ahBA 提取码:g9hw sqlserver2008-r2安装参考如下:http://www.xiaoniucr.com/article/view/15.html 由于sqlserver的安装步骤比较多,安装过程中容易出现失误,导致安装失败,下面提供卸载步骤: 步骤参考:http://www.xiaoniucr.com/article/view/14.html 数据库安装完之后,在Window程序中一般会有如下选项,我们选中【SQL Server Management Studio】打开sqlserver登录界面,如下: 打开sqlserver登录界面之后,以Windows身份验证 登录系统,操作如下:#数据库附加导入 在您购买的源码包中的【数据】文件夹中一般会有如下两个数据库文件,一个是.mdf,一个是.LDF。我们进行数据库附加导入一般就用到这两个文件。 成功登录数据库之后,选中【数据库】右键,然后选择【附加】按钮,弹出【附加数据库】选择框,如下: 弹出【附加数据库】选择框之后,点击【添加】按钮,弹出数据库选择框架,选择好您的mdf数据库文件,点击确定,操作如下: 一般第一次导入由于文件的权限问题,会出现如下报错,不要慌张,点击确定。 然后点击消息,查看具体的报错原因,一般出现这种【拒绝访问】的报错,都是没有权限操作数据库文件导致。 既然没有权限那就设置,具体设置如下: 选中.mdf文件,然后右键,选择【属性】,弹出如下窗体,按照步骤进行设置即可: 设置完.mdf的读写权限之后,.LDF文件的读写权限也是一样,必须两个都设置。 设置完之后,再重复上面的导入步骤,即可完成数据库导入,然后查看我们的数据库表结构: