A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱秀梅 初级黑马   /  2012-6-10 16:52  /  2135 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下代码:编译、运行输入“a”(不含引号),按回车后,系统输出什么?
        public static void main(String[] args) throws Exception{
                int[] x = {1,2,3,4,5,6};
                for(int y:x){
                        System.in.read();
                        System.out.println(y);
                }
        }
代码2.以下代码运行后
A.执行一段时间后报栈溢出。   B.会一直输出“try”。    C.会一直输出“try”和“finally”。    D.会一直输出“try”、“catch”和“finally”

private static void foo() {

try
{
        System.out.println("try");
    foo();
}catch (Throwable e) {
    System.out.println("catch");
    foo();
}finally {
    System.out.println("finally");
    foo();
}
}

public static void main(String[] args) {
    foo();
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 江南 于 2012-6-10 16:58 编辑

第一题程序运行到[code=java]System.in.read(); 阻塞,等待用户输入[/code]注解:[code=java]System.in.read()//只是为了控制一个循环,[/code]
1、当输入a+回车(/r/n),相当于三次System.in.read(),因此会输出前三个值(1,2,3)2、当再次任意输入一个**+回车(/r/n),也相当于三次System.in.read(),会输出数组的后三个值(4,5,6)

我们将第一题程序这样改写 public static void main(String[] args) throws Exception{
int[] x = {1,2,3,4,5,6};
for(int y:x){
System.out.println(System.in.read());
System.out.println(y);
}}


       结果为:97
1
13
2
10
3[/code]所以执行System.in.read()方法将从键盘缓冲区读入一个字节的数据,然后返回16位的二进制数据,其低8位为键盘的ASCII码,高8位为0。
a的ASCII码为97,换行\r的ASCII码为13,回车\n的ASCII码为10,从控制台输入a的操作为:输入a然后换行、回车。

关于第二题我认为为c 没有很好的解析

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
顶一下,这个,第一题没想到啊,嘿嘿
回复 使用道具 举报
本帖最后由 唐志兵 于 2012-6-10 17:47 编辑

第二题如果没有使用try-catch语言的话 一定会造成堆栈溢出,因为只有进栈没有出栈。

但是因为程序 是使用 try catach 的 当溢出的时候程序会调用 catch 语句,但是因为catch语句它捕获的不是 堆栈溢出异常,所以那个 catach就没办法输出了。

然后程序就会 一直输出 try finally 啦。




管理看到加点分啊 我分析的这么清楚了。。。。。
回复 使用道具 举报
唐志兵 发表于 2012-6-10 17:38
第二题如果没有使用try-catch语言的话 一定会造成堆栈溢出,因为只有进栈没有出栈。

但是因为程序 是使用  ...

分析的是不错。但是很遗憾,try catch finally都会打印的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马