您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31
【问答】2117人已围观
简介 请问下面程序将会输出什么?程序如下: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的安装记住一句话:有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结束安装
关于Access denied问题的解决办法
再启动javaweb项目的时候,我们不经意间会遇到一个如下问题:造成这种问题的原因有很多种,比如,账户密码错误,或者数据库权限设置问题。首先确认自己项目配置文件的数据库名和密码是否配置正确,这个原因也可能导致。如果配置文件中你的数据库账户和密码确认无误,但依然出现以上错误,请按照如下步骤操作:1.登录mysql cd D:\mysql-5.6.24-win32.1432006610\mysql-5.6.24-win32\bin mysql -u root -p 输入你的数据库密码,按enter确定登录。 2.修改数据库密码 切换到mysql自带库:use mysql; 如果你的mysql版本是5.7以下(不包括5.7),请使用如下sql命令修改密码: update user set Password = password ('123456') where User = 'root'; 如果你的mysql版本是5.7及以上,请使用如下sql命令修改密码: update user set authentication_string=password('123456') where user='root';3.刷新权限 flush privileges;4.退出数据库 quit;5.重启数据库 net stop mysql net start mysq具体演示操作如下:最后在使用navicat for mysql测试一下是否可以登录。如果可以,在eclipse重启项目,使用浏览器访问页面,如果不在报错,那么恭喜你,问题解决了。如果你不记得你的数据库密码了,你可以通过在数据库安装目录bin下,添加配置skip-grant-tables添加这个配置的作用是为了使用cmd控制台登录数据库时,跳过密码验证,不必输入密码,直接enter即可进入数据库。然后重启mysql服务器。
jdk详细安装步骤图解
由于部分同学对jdk安装不是很熟悉,下面详细介绍jdk的安装步骤: jdk下载,包含jdk1.7和jdk1.8的32位(i586)和64位(x64),7u80就是1.7的jdk,8u191就是1.8的jdk;i586表示32位,x64表示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 安装参考文档如下: jdk优先选择1.8,一般是最后一个(64位操作系统) 双击exe程序执行安装 点击下一步,开始安装 设置安装路径 正在安装jdk jdk安装完之后,还需要安装jre,设置jre的安装路径 jre安装中 安装完成 jdk安装完之后,还需要配置环境变量,步骤如下: 环境变量配置,一共需要配置3个系统变量:JAVA_HOME,CLASSPATH,PATH。这里注意是系统变量哦!Win+R组合键之后,弹出一个运行窗口,在输入框中输入sysdm.cpl命令,会弹出一个系统属性的窗口,点击【高级】菜单,就可以看到下面的【环境变量】按钮,点击就可以弹出下面的环境变量配置窗口。 1.新建JAVA_HOME系统变量,输入值为你的jdk目录,我的是C:\Program Files (x86)\Java\jdk1.7.0_80 2.新建CLASSPATH系统变量,值为【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar】,中括号中红色的一串文本。 3.Path变量,Path变量是已经存在的,这里只作修改。这里注意,Win7和Win10系统操作有点不一样。(谨慎操作,不要把path删了哦!),win7系统直接双击Path,在后面编辑添加变量信息,加上【%JAVA_HOME%\bin】,括号中的红色文本,复制粘贴上去就好了,不要忘了分号。如图:下面是win7的,直接在path后面粘贴进去就好了。 win10双击Path之后,会弹出一个【编辑环境变量】窗口,在窗口右上角点击【新建】,然后把要加的变量加进去就好了。 如图:下面是win10的,点击new,然后直接把【%JAVA_HOME%\bin】,中括号中的红色一串复制粘贴进去就好了,这里没有分号。 以上操作都完成之后,在cmd控制台中输入java -version,如果有jdk版本信息输出,则说明安装成功。
点击排行
javaweb+mysql项目部署教程
点赞排行
javaweb+mysql项目部署教程