您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31
【问答】1870人已围观
简介 请问下面程序将会输出什么?程序如下: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毕业设计选题分享
毕业设计,大学的最后一道坎。 对于这道坎,说难也难,毕竟很多同学在大学期间没有系统的学习过如何去开发一套系统;说不难其实也不难,毕竟一个毕设,不可能像公司企业级开发一样,要求太复杂的技术,所以一般只要掌握一些开发基础和技巧,是可以独立完成一套设计的。 毕业设计,首先是选题,也就是大家说的开题,这是关键。一般来说,一个同学都是独立完成一个课题,当然也有团队开发的,即几个同学共同分工完成一个课题,这个除外。使用java语言做毕业设计,可选性还是比较多的。 比如通常的一些后台管理系统,比如酒店管理系统、学籍管理系统、图书管理系统等等,这是都偏后台的一些管理系统,功能和页面布局也比较简单,一般菜单+表格就可以完成了,如果对毕设要求不高的同学可以选择这一类的系统。 如果在想将系统或者网站做的花哨一点,除了后台管理外,我们还可以做个前台界面。比如商城,前台是商品展示,用户挑选商品加入购物车,后台主要是商品管理、订单管理等。或者新闻网站,前台主要针对用户新闻浏览器,收藏,点赞等,后台主要是管理进行新闻类比、新闻的管理。前后台的系统不但功能会显得多一点,网站页面也会内容丰富饱满一点。 当然如果你还想将毕设做的更好一点,拿个高分或者整个优秀毕业设计啥的,你就需要在系统中整合一些比较新颖的功能,也就是你的系统有什么亮点?比如商城,你可以整合个性化推荐,加个协同过滤推荐算法。新闻网站你可以加个爬虫,抓取其他网站的新闻为己使用,然后再整合个推荐算法,个性化推荐用户比较感兴趣的新闻。除此之外,这些年,随着移动网页、大数据、机器学习、深度学习等快速发展,你也可以选择这一方面的课题。 题目选好之后,接下来就是技术定型了,开发这个系统你准备使用哪些技术?前后台分别什么框架?后台有:纯jsp,简单一点的servlet框架,稍微难点的ssh(struts2+spring+hibernate),目前比较流行的ssm(springmvc+spring+mybatis),springboot,springcloud等框架。前台页面有H5、Vue、Angularjs、React、JQuery等,大家可以根据自己的需要,选择自己比较喜欢或者擅长的。 总的来说,适合自己的就是好的,也不要一味的去追求高难度,毕竟贪多嚼不烂这点想必大家都清楚。 最后我这里列出一些毕业设计选题,方便大家参考。 Servlet框架: SpringBoot框架: SSH框架: SSM框架: 其他框架整合: 最新定制项目: 以下是课程设计:eclipse+tomcat部署web项目教程
有些学生可能刚接触软件这一行,对项目部署可能不太熟悉,下面介绍eclipse如何配置tomcat,部署web项目。 首先下载tomcat服务器,一般选择tomcat7或者8的版本。 tomcat百度网盘下载链接:https://pan.baidu.com/s/1UK1wAlCCk0jN_4ZNPERfsg 提取码:p7e2 tomcat官网下载链接:http://tomcat.apache.org/download-70.cgi eclipse中,Window→Preferences,开启如下配置界面: 点击Add选择对应版本的tomcat服务器添加 选择tomcat7进行配置,点击Next下一步 为tomcat7服务器设置目录,选择前面下载的tomcat,选择完成之后点击确定。 配置tomcat的jre环境 部署完成,点击OK. 到这里,eclipse配置tomcat就已经可以,如果你想配置tomcat8,步骤也是一样。 那么如何使用配置的tomcat服务器,部署我们的web程序呢? 首先打开eclipse的Servers面板,有些学生可能第一次使用eclipse,找不到Servers面板在哪里。 Window→Show View→Other,会弹出一个搜索框,我们直接搜Servers就出现了Servers面板,双击就行了。 单击如下按钮,创建一个tomcat服务器实例 选择前面配置的tomcat版本,直接点Finish. 进一步配置使用tomcat实例,Server Locations选择中间的选项,Deploy path设置webapps. 到这里,我们tomcat的基本配置就全部完成了,接下来,我们只要将项目加载到tomcat中。 选中上面的tomcat实例,右键Add and Remove,会弹出一个项目选择框,我们只要选择我们要部署的项目就可以了。 项目加载好了,最后就是项目启动了,有两种方式启动,左边的debug和右边的run,两种方式任选其一。 项目启动成功,以及如何停止项目服务。这里要注意,如果要关闭项目,请先停止服务(下方的正方形红点),在关闭eclipse。 为此本人简单录制了一个javaweb项目部署演示视频,主要使用的是eclipse开发工具,演示eclipse配置tomcat服务器进行项目部署。演示视频如下:javaweb+mysql项目部署教程
一.必备软件java运行环境:jdkjava开发编辑器:eclipse数据库:mysql数据库可视化工具:navicat for mysql或者navicat premium web服务器:tomcat以上软件请务必全部下载安装,请到我的百度网盘里下载!二.软件安装1.jdk配置 首先安装好jdk,我一般使用1.8版本的jdk。配置好JDK环境变量。 jdk下载,包含jdk1.7和jdk1.8,32位(i586)和64位(x64),现在电脑操作系统一般都是64位的,建议下载64位的。 请看清楚再下载,下载地址如下: 百度网盘下载链接: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位下载。win32-x86_64的就是64位的,win32的就是32位的。 现在电脑操作系统一般都是64位的,所以请下载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安装版本的下载地址。 建议下载mysql-installer-community-5.7.24.0.msi安装版本,按照步骤一步步执行安装。 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进行再次安装,mysql完全卸载比较费劲,参考步骤如下: mysql卸载参考:http://www.xiaoniucr.com/article/view/13.html4. eclipse配置tomcat tomcat版本一般选择8.0.47的版本。请下载8.0.47的版本。 tomcat为免安装版本,下载之后无需安装,直接解压到某个盘的根目录即可。 tomcat百度网盘下载链接:链接:https://pan.baidu.com/s/1eChKbCVH7_u7csyQSvlAoQ 提取码:zmoa tomcat官网下载链接:http://tomcat.apache.org/download-70.cgi 配置参考地址:http://www.xiaoniucr.com/article/view/7.html二.项目配置1.项目导入 File → Import → General → Existing Project Into Workspace2. 项目配置 选中项目,右键→Properties→Java Build Path,检查项目是否存在Jar包缺失,一般不会存在,以防万一。3. 项目乱码问题 一般来说,项目不会存在乱码问题,如果存在中文乱码,请修改编码,操作如下:选中项目,右键→Properties→Resource,text file encodeing,选择对应的编码格式,一般来说都是utf-8。五.详细部署教程 详细部署教程,见下面演示视频: Note:项目在第一次成功部署后,下次启动,请注意:据说是一道华为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。
点击排行
