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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李龙 黑马帝   /  2011-8-1 17:26  /  4017 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

  2. try
  3. {
  4.         System.out.println("try");
  5.     foo();
  6. }catch (Throwable e) {
  7.     System.out.println("catch");
  8.     foo();
  9. }finally {
  10.     System.out.println("finally");
  11.     foo();
  12. }
  13. }

  14. public static void main(String[] args) {
  15.     foo();
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

13 个回复

倒序浏览
第一题为什么输入一个值后会打印出1,2,3再输入一个值后又打印4,5,6呢
[ 本帖最后由 于洋洋 于 2011-08-01  17:52 编辑 ]
回复 使用道具 举报
:) 第一题程序运行到[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)


我们将第一题程序这样改写[code=java]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);
          }
}[/code]结果为:[code=java]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然后换行、回车。
[ 本帖最后由 詹季春 于 2011-08-01  18:25 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不错!

查看全部评分

回复 使用道具 举报

回复 藤椅 的帖子

好解释!很详细!
[ 本帖最后由 李龙 于 2011-08-01  20:24 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-8-1 18:26:22
报纸

回复 板凳 的帖子

晕死。
回复 使用道具 举报
黑马网友  发表于 2011-8-1 18:30:27
地板
:) 第二题抛出栈溢出吧应该,个人觉得是C
回复 使用道具 举报
第一题只要随便输入6个字符就可以一次打印所有1到6了,回车换行就两个了,所以最少只要输入4个字符然后回车就能打印完
[ 本帖最后由 马蒙蒙 于 2011-08-01  19:04 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-8-1 22:01:44
8#

回复 地板 的帖子

第二题最初我选b,后来不屑于运行结果的我不小心运行了一下结果,发现正确答案其实是c,后来也明白了原因...发现自己当时还没有完全理解finally...

评分

参与人数 1技术分 +1 收起 理由
admin + 1 知道怎么做了把!

查看全部评分

回复 使用道具 举报
我以为是 97 1 2 3呢 没想到错了
回复 使用道具 举报
黑马网友  发表于 2011-8-21 00:33:43
10#

回复 楼主 的帖子

第二题应该选D吧
回复 使用道具 举报
黑马网友  发表于 2011-8-21 00:35:02
11#
肯定会发生异常的吧,所以Catch会执行的。
回复 使用道具 举报
黑马网友  发表于 2011-8-22 17:02:59
12#
第二题为什么catch不执行呢?我查了一下API,因为内存溢出是属于Error的子类,所以也不可能捕获,但是把finally注释掉却又能捕获了,这确实让我迷惑。打印的结果更让我迷惑,finally都是两次连着打印的,为什么却不是只打印一次,希望哪位来讲解下内存里面的运行
回复 使用道具 举报
许冉 黑马帝 2011-10-12 15:32:19
13#
第二题迷惑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马