您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31
【问答】2078人已围观
简介 请问下面程序将会输出什么?程序如下: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字符串
相关文章
随机图文
大家猜一猜运算结果?
大家决定下面这段代码的运算结果是什么呢?public class Test { public static void main(String[] args) { int n = getNum(); System.out.println(n); } public static int getNum(){ int a = 10; try { a = 20; throw new RuntimeException(); } catch (Exception e) { a = 30; return a; }finally{ a = 40; } }}略微思考,大家都应该知道结果,是30,分析一下:首先,初始化变量a的值为10,继续执行,重新将a赋值为20,这时抛了一个异常,被catch捕获,这是a再次被重新赋值为30,这时候看到了return关键字,程序保存方法返回值(这个返回值将作为最后的运行结果,返回给外部调用),最后执行finally,执行完之后,再把前面运行得到的结果返回给程序调用。
javaweb+sqlserver项目部署教程
一.必备软件 1. java运行环境:jdk 2. java开发编辑器:eclipse 3. 数据库:sqlserver2008-r2 4. 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.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.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 → Existimg Project Into Workspace2. 项目配置 选中项目,右键→Properties→Java Build Path,检查项目是否存在Jar包缺失,一般不会存在,以防万一。3. 项目乱码问题 一般来说,项目不会存在乱码问题,如果存在中文乱码,请修改编码,操作如下:选中项目,右键→Properties→Resource,text file encodeing,选择对应的编码格式,一般来说都是UTF-8。四.数据库配置1.sqlserver数据库附加 安装完sqlserver后,登陆数据库系统,选中数据库,右键→附加→添加.sql文件→确定,这样就导入了sql。 教程参考:http://www.xiaoniucr.com/article/view/18.html五.详细部署教程 详细部署教程,见如下演示视频: Note:项目在第一次成功部署之后,下次启动请注意:
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的服务名就可以了。
有趣的Java字符串
先上代码:public class Test3 { public static void main(String[] args) { String str = 1+1+"1"; String str_ = "1"+1+1; System.out.println("str:"+str); System.out.println("str_:"+str_); }}程序输出:str:21str_:111可以看到,如果运算在字符串的前面,那么会先执行运算,再讲运算结果与字符串拼接;如果运算在字符串的后面,那么运算将变得毫无意义。^_^大家可以去试试。
点击排行
javaweb+mysql项目部署教程
点赞排行
javaweb+mysql项目部署教程