您现在的位置是: 首页 > 个人博客 > 据说是一道华为Java面试题 个人博客
据说是一道华为Java面试题
2018-12-26 11:12:31
【问答】2291人已围观
简介 请问下面程序将会输出什么?程序如下: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。
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:项目在第一次成功部署后,下次启动,请注意:
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了。 到这里数据库的编码就已经修改完成了,再也不用担心中文乱码了。
sqlserver2008-r2详细安装步骤图解
sqlserver安装还是稍微有点麻烦的,步骤比较多,很容易出错,下面详细介绍sqlserver2008-r2的详细安装步骤。 sqlserver2008-r2百度网盘下载链接:https://pan.baidu.com/s/1fo261JzvkbFbu75KI3ahBA 提取码:g9hw sqlserver2008-r2的下载 sqlserver解压,第一次解压得到一个iso镜像文件,在对镜像文件进行右键解压,得到最终的安装文件。 双击setup.exe开始执行安装 选择安装-全新安装或向现有安装添加功能 全部通过后,点击确定 输入产品密钥,下一步 接受条款,下一步 点击安装 正在执行安装,请耐心等待 全部通过后,点击下一步 保持默认,点击下一步 功能全选 点击下一步 下一步 下一步 下一步 点击【对所有SQL Server服务使用相同的账户】按钮 选择第二个选项,不要设置密码,在点击确定 下一步 选择混合模式、设置数据库密码(该密码尽量简单,方便记忆,后面程序中需要用到,请牢记)、添加当前用户,下一步 添加当前用户 保持默认,下一步 下一步 下一步 点击【安装】按钮 安装中.......该过程比较久,请耐心等待,整个过程大概40-50分钟左右。 安装完成-关闭 good luck。。。。。
点击排行
javaweb+mysql项目部署教程
点赞排行
javaweb+mysql项目部署教程