论坛首页 Java企业应用论坛

遇到这3道笔试题,大家有把握能做对几道

浏览 33659 次
精华帖 (16) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2011-07-21  
不知道最好哪個先掛掉,netbeans進程已用500MB內存,java進程用了17MB。已執行22分鐘
大家都是多長時間溢出的啊。
0 请登录后投票
   发表时间:2011-07-22   最后修改:2011-07-25
final A=0不就得了?

题目好像看错了。应该是把变量定义成一个局部的。比如:
for(int A=0;;)
   A = 1;  
System.out.println(A);
0 请登录后投票
   发表时间:2011-07-23  
不知道这题面试的公司要考应聘者什么 呵呵
0 请登录后投票
   发表时间:2011-07-26  
gu__sofia 写道
第二题c  finally在任何情况下都是执行的

这个兄弟这样说是不对的吧,在try中直接return是不会执行finally的.
0 请登录后投票
   发表时间:2011-07-27  
z276356445t 写道
gu__sofia 写道
第二题c  finally在任何情况下都是执行的

这个兄弟这样说是不对的吧,在try中直接return是不会执行finally的.


去测一下呢,看看try中return,然后finally块有没有执行?
0 请登录后投票
   发表时间:2011-07-28  
aiheng1988 写道
dxxghx 写道
fangshengcai001 写道
第一题是 1,1,1 后等待输入  测出来的    System.in.read().会把回车和换行也看成一种输入...OUT了  测了好几次才发现

然后再随便输入一个数字,系统会再次输出1,1,1。然后console就停止了!
求解~~~

其实System.in.read()只是为了控制一个循环,当输入1+回车(/r/n),相当于三次System.in.read(),因此会输出前三个值,当输入随便一个数字**+回车(/r/n),也相当于三次System.in.read(),会输出数组的后三个值。understand?


我试过只输出2个1啊。。

 

0 请登录后投票
   发表时间:2011-08-02   最后修改:2011-08-03
private boolean f = false;
	
	public void test(int i) {
		i++;
		try {
			System.out.println("try"+i);
			if(!f)test(i);
		} catch (Error e) {
			e.printStackTrace();
			System.out.println("catch"+i);
			f=true;
		} finally {
			System.out.println("finally"+i);
			if(!f)test(i);
		}
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.test(0);
	}

   我把catch的类型改了一下,这样我们就可以看到异常了,异常类型是java.lang.StackOverflowError。
我们看不到异常的原因就在于此,实际jvm已经抛出了异常,只是catch的类型不对应,这样catch就不执行而是直接执行finally,所以我们看到控制台一直输出

try和finally。
当我们debug的时候,会看到一直输出的try,原因是jvm此时还没有堆栈深度溢出,我们看到的finally是jvm执行无数个try后的结果,我在eclipse中测试时再catch中加了个断点,程序执行5000多次后开始抛出异常,不知道我的理解对不对,等待高手解决。

 

0 请登录后投票
   发表时间:2011-08-02  
ucfjepl 写道
private boolean f = false;
	
	public void test(int i) {
		i++;
		try {
			System.out.println("try"+i);
			if(!f)test(i);
		} catch (Error e) {
			e.printStackTrace();
			System.out.println("catch"+i);
			f=true;
		} finally {
			System.out.println("finally"+i);
			if(!f)test(i);
		}
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.test(0);
	}

   我把catch的类型改了一下,这样我们就可以看到异常了,异常类型是java.lang.StackOverflowError。
我们看不到异常的原因就在于此,实际jvm已经抛出了异常,只是catch的类型不对应,这样catch就不执行而是直接执行finally,所以我们看到控制台一直输出

try和finally。
当我们debug的时候,会看到一直输出的try,原因是jvm此时还没有堆溢出,我们看到的finally是jvm执行无数个try后的结果,我在eclipse中测试时执行5000

多次后开始抛出异常,不知道我的理解对不对,等待高手解决。


根据上面的理解,我们可以得到的答案是,当抛出java.lang.StackOverflowError的错误后,catch不会执行,而是永远在执行try和finally,我在测试时eclipse经常会直接崩溃掉, 可能理解有误,等高手指正.....
0 请登录后投票
   发表时间:2011-08-02  
public static void main(String[] args) {
		try {
			int[] x = new int[6];
			Arrays.fill(x, 1);
			int m = 0;
			for (int i = 0; i < x.length; i++) {
				m = System.in.read();
				System.out.println(i+"***************"+m);
				System.out.println(x[i]);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 第一题和三楼说的一样,jvm把回车和换行都当做一个字节来读的。

System.in.read()是每次读取输入流中的一个字节,所以我们输入1再敲回车后,实际上包括了1、回车和换行

所以输入1后回车会看到三个1,如果我们输入两个1后回车会看到四个1

根据以上代码我们输入1后会看到以下输出:

0***************49
1
1***************13
1
2***************10
1

*号前面是数组的索引,*号后面的code就是我们通常用到的1的code为49,回车的code为13,换行是10

回车和换行的区别是:回车是把光标移向下一行并把光标放到行首,换行是把光标移到下一行,具体的区别大家可以百度啊

由于System.in.read()是每次读取输入流中的一个字节,而汉字是两个字节,我们用汉字来代替我们输入的数字1,输入汉字“啊”可以看到:


0***************
1
1***************
1
2***************
1
3***************
1

汉字是两个字节,加上回车和换行是四个字节,所以会输出四个1,我们再输入一个汉字会看到只有输出了两个1,这是因为数组的长度是6,所以不会输出多余的1了,当然这个是很明显的,大家都可以看出来啊,看到回复中的有的有这样的疑问就说出来了

0 请登录后投票
   发表时间:2011-08-02  
ucfjepl 写道
public static void main(String[] args) {
		try {
			int[] x = new int[6];
			Arrays.fill(x, 1);
			int m = 0;
			for (int i = 0; i < x.length; i++) {
				m = System.in.read();
				System.out.println(i+"***************"+m);
				System.out.println(x[i]);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 第一题和三楼说的一样,jvm把回车和换行都当做一个字节来读的。

System.in.read()是每次读取输入流中的一个字节,所以我们输入1再敲回车后,实际上包括了1、回车和换行

所以输入1后回车会看到三个1,如果我们输入两个1后回车会看到四个1

根据以上代码我们输入1后会看到以下输出:

0***************49
1
1***************13
1
2***************10
1

*号前面是数组的索引,*号后面的code就是我们通常用到的1的code为49,回车的code为13,换行是10

回车和换行的区别是:回车是把光标移向下一行并把光标放到行首,换行是把光标移到下一行,具体的区别大家可以百度啊

由于System.in.read()是每次读取输入流中的一个字节,而汉字是两个字节,我们用汉字来代替我们输入的数字1,输入汉字“啊”可以看到:


0***************
1
1***************
1
2***************
1
3***************
1

汉字是两个字节,加上回车和换行是四个字节,所以会输出四个1,我们再输入一个汉字会看到只有输出了两个1,这是因为数组的长度是6,所以不会输出多余的1了,当然这个是很明显的,大家都可以看出来啊,看到回复中的有的有这样的疑问就说出来了


赞同这个解释
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics