您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31
【问答】2022人已围观
简介 请问下面程序将会输出什么?程序如下: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框架: 其他框架整合: 最新定制项目: 以下是课程设计:
mysql详细安装步骤图解
MySQL的安装记住一句话:有executor的就点击进行,没有的就next,要装的插件点yes装。由于大多数人可能没有接触过mysql数据库,不太清楚mysql的安装步骤,下面详细演示mysql的安装步骤:mysql百度网盘下载链接: 链接:https://pan.baidu.com/s/1PObOxF0CCKIgg9kzIFDnkA 提取码:zq1jmysql官网下载地址:https://dev.mysql.com/downloads/installer/5.6.html mysql下载 双击mysql安装包执行安装 有些同学电脑点击安装之后会跳出如下界面,这是因为缺少.NET插件。 请到如下网址,直接点击下载插件安装。安装完成之后,电脑重启。 https://www.microsoft.com/en-us/download/details.aspx?id=42642 以上插件安装成功之后(没有出现上面问题的同学,请忽略上面的步骤),再次点击双击安装包开始安装mysql. 勾选协议条款,开始安装 保持默认,点击Next进行下一步安装 点击Execute进行组件检查,安装必须组件。有些学生安装的时候,可能没有下面这么多组件,不要惊慌,依旧正常进行下面的安装。 依旧记住:有executor的就点击进行,没有的就next,要装的插件点yes装。 组件安装完成之后,点击Next进行下一步 点击Yes,下一步 点击Execute正式安装mysql所有组件 mysql组件全部安装完成,点击Next进行下一步。这里需要注意,可能有个别组件安装失败,比如ODBC,没有关系,还是点击Next,下一步。 点击Next下一步 保持默认,点击Next进入下一步 设置数据库密码,简单就好,该密码请务必记住,后面程序中需要用到。 mysql服务名设置,第一次安装保持默认就好;如果是重装,该服务名可能已经存在,需要修改,不修改不让进行下一步。 点击Execute进行配置 到这一步,理论上mysql已经装完了。点击Finish 点击Next,下一步。 mysql密码校验 继续点击Execute mysql全部安装完成 我们一般使用navicat数据库可视化工具,不使用Workbench,取消勾选,点击Finish结束安装
前端学习小笔记
ie9开始支持h5,ie9以下使用html5shiv静态资源包来兼容h5h5使用svg(xml描述2D图形)来构建矢量图像,使用Canvas(javascript脚本)来构建图形。
mysql数据库编码修改教程
由于mysql的默认编码是Latin1,不支持中文,这样就会存在插入或者查询中文乱码的问题。 下面教大家如何查看自己数据库的编码,如图: 首先通过cmd命令进入到数据库安装目录的bin目录下,然后登陆数据库,输入数据库密码,进入数据库。 可以看到数据库编码是Latin1,那么如何把它修改为支持中文的utf8呢? 网上很多教程是简单的修改表的字符编码,这种方式指标不治本,在数据库服务重启之后,字符编码又会被还原成Latin1。 其实,最直接最有效一劳永逸的方法就是通过修改数据库的my.ini文件,修改数据库编码。那么我数据库的my.ini文件在哪? 一般如果mysql默认安装的话,my.ini都在C:\ProgramData\MySQL\MySQL Server 5.6\这个目录下,ProgramData是个隐藏文件。 如果不是默认目录安装的话,按照下面方式去找: 首先在计算机服务列表中找到mysql服务,右键属性,如下图,就可以看到自己的my.ini文件路径(往右边拉一点)。 找到my.ini文件之后(有些是没有my.ini文件的,需要自己添加一个) 右键编辑,进行如下配置: 分别在client下添加:default-character-set=utf8 在mysql下添加:default-character-set=utf8 在mysqld添加:character-set-server=utf8 修改之后,在计算机服务列表中重启mysql服务。 再次查询编码,发现编码已经变为utf8了。 到这里数据库的编码就已经修改完成了,再也不用担心中文乱码了。
点击排行
javaweb+mysql项目部署教程
点赞排行
javaweb+mysql项目部署教程