菜鸟进阶必杀技(Ⅱ)——java基础知识自测篇
来源:互联网 发布:tcss.ping.js 编辑:程序博客网 时间:2024/06/05 17:53
经过了上一篇的讲解,看看下面这些题你能做对多少
问题一
//下面这段代码的输出结果是什么?public class Test1 {public static void changeStr(String str) {str = "welcome";}public static void main(String[] args) {String str = "1234";changeStr(str);System.out.println(str);}}
问题二
public class Test{ private int i=getValue();//第2行 private int j = 10; int getValue(){ return j; } public static void main(String[] args) { System.out.print(new Test().i);//第9行 }}/**输出:A 第二行编译错误B 第九行编译错误C 输出:10D 输出:0输出结果会是什么?*/
问题三
//下面的程序会打印出什么样的结果?public class Test {static boolean foo(char c) {System.out.print(c);return true;}public static void main( String[] argv ) {int i =0;for ( foo('A'); foo('B')&&(i<2); foo('C')){ i++ ; foo('D');}} }
答案:
第一题:输出的结果是1234。至于为什么,我想这个题目变成这样的话会更能说明问题
public class Test {public static void changeStr(String str) {str = "welcome";System.out.println("str of changeStr():"+str);}public static void main(String[] args) {String str = "1234";changeStr(str);System.out.println("str of main():"+str);}}
输出的结果是:str of changeStr():welcome ,str of main():1234。需要考虑的是局部变量的作用域************************************************华丽的分割线*************************************************
第二题:答案是D,输出结果为0.
当你执行System.out.print(new test().i);时,
首先执行new test()。
首先执行new test()。
- java虚拟机开始构建对象
- 首先为该对象分配一块内存空间
- 对该内存空间执行清零操作(就是因为这个清零操作,完成了对所有变量赋值0)
- 开始执行静态成员的初始化以及静态块的初始化----你这里没有就不用谈了
- 然后开始初始化成员变量,顺序执行
- 执行private int i=getValue();
- 调用getValue()方法
- 执行getValue方法返回0.---------请参照第2点
- 执行private int j = 10;
- 开始执行构造函数
- 因为你是在test的main函数执行的代码。main函数也是属于test类的。因此它是可以直接访问private变量i的。
**************************************************华丽的分割线*****************************************
第三题:输出结果是 ABDCBDCB ,怎么样是不是跟想象的有点不一样
首先说名下for循环,for循环中包含 初始化(initialization)表达式,布尔表达式(Boolean-expression)和步进(step)运算,进行for循环时,首先是初始化,然后测试布尔表达式,若获得true,就会执行for语句后面的代码。每次循环结束,执行一次步进。注意,步进是留在最后做的
对于本题来说,for循环的过程如下:
- 执行foo("A"),输出A
- 测试布尔表达式,执行foo("B"),输出B,此时foo("B")&&i<2判断为true,继续执行for后面的语句,foo("D")被执行,输出 D
- 执行一次步进,foo("C")被执行,输出C
- 再次判断 布尔表达式,执行foo("B"),输出B,此时foo("B")&&i<2判断结果仍未true,继续执行for后面的语句,foo("D")被执行,输出 D
- 再次执行步进,foo("C")被执行,输出C
- 继续判断 布尔表达式,执行foo("B"),输出B,此时foo("B")&&i<2 判断为false,循环结束,后面语句不再执行
所以最终结果是:ABDCBDCB 。
- 菜鸟进阶必杀技(Ⅱ)——java基础知识自测篇
- 菜鸟进阶必杀技(Ⅰ)——java基础知识解析篇
- SEO菜鸟:SEO基础知识自测
- Java菜鸟进阶篇(一)
- Java — 面向对象(自测题)
- JVM菜鸟进阶高手之路十(基础知识开场白)
- java多线程—概念—菜鸟的进阶
- 菜鸟好文推荐(十)——Spring基础知识汇总 Java开发必看
- 菜鸟进阶学堂(四):CPU基础知识入门
- 菜鸟进阶学堂(五):主板基础知识入门
- 菜鸟进阶学堂(六):硬盘基础知识入门
- 菜鸟进阶学堂(七):内存基础知识入门
- 菜鸟进阶学堂(八):显卡基础知识入门
- Java进阶---Java一些基础知识
- 蓝牙基础知识进阶——Physical channel
- 蓝牙基础知识进阶——Packet解析
- 蓝牙基础知识进阶——Packet解析
- SEO菜鸟:SEO知识自测
- 有时候,我想消失一下,然后看看是否会有人想念我
- 更新到WordPress 3.1后Custom Fields消失?
- 软件设计模式之模拟游角色选择(Darren建造者模式)
- 【Andorid应用开发】-(2)Linux、Windows开发环境配置
- add two linked list as integer
- 菜鸟进阶必杀技(Ⅱ)——java基础知识自测篇
- 认识StringBuilder的Capacity自动增加方式
- Linux下开启/关闭MySql Server
- C++类的存储结构
- python的包实现机制
- Python IDE比较与推荐
- 悲守穷庐,将复何及
- java synchronized详解
- python面向对象