德邦初级认证准备(一)

公司里有一个技术通道,需要认证,现整理一下笔试内容。


1. System.out.println('a'+1+""); 

这道题,大体上一看,可能会做错,认真看一下,还是可以的。

这里注意一下几点:

1) “+”号

Java是不支持操作符重载的,但“+”是唯一重载的操作符,当“+”两边都是基本数据类型时(可能说的不严谨),是加法操作;

当“+”有一边是字符串时,会将两边都作为字符串进行连接操作,这时会有一些装箱,拆箱操作。

在System.out.println()中,还要注意一个优先级的问题:

		String s1 = "helloworld";
		String s2 = "hello" + "world";
		System.out.println(s1 == s2); //true
		System.out.println("s1==s2?" + s1 == s2);  //false
“+”的优先级比“==”的优先级高。

这里顺便记一下操作符的优先级:


这里记录一个问题:

		short num1 = 1;
		num1 = num1 + 1;
		System.out.println(num1);

问输出结果是什么?

稍微注意一下的话,可以看出来,直接就编译出错了。因为Java中1默认是int类型,这里需要强制类型转换。

还有一个变形题:

		short num2 = (short)1;
		num2 = num2 + 1;
		System.out.println(num2);
问输出结果是什么?

和上一题一样,同样的编译出错。num2 = num2 + 1运算时,Java自动转换为int类型,也需要强制类型转换。


还有一个变行题:

		short num3 = (short)1;
		num3 += num3;
		System.out.println(num3);

问输出结果是什么?

哦,这下终于是2了, +=是不需要进行类型转换的。


关于运算符,还看到一个问题,关于&和&&:

在Java中,&和&&都可以作为逻辑运算符,进行true或false的判断;但是,&&和||又叫做短路与,短路或,即她们有一个短路的特性,

对于a && b当a是false时,Java不会继续判断b到底是true还是false,直接就短路了,返回false;

对于 a || b,同样的道理,当a 是true时,Java会直接短路,不去判断b,直接返回true。

而 & 和 | 作为逻辑运算符就不会这样。

		int a1 = 23;
		if(a1 == 23 || 100/0 == 0) {
			System.out.println("ok");
		}
		
		if(a1 == 23 | 100/0 == 0) {
			System.out.println("ok");
		}

问输出结果是什么?

对于第1个if,输出是ok,而第2个if就跑出异常了,因为0是不能做除数的。

当然,&和 | 还能做位运算。


2)char

‘a'会自动转换成int类型与1进行运算,记住常用的’a' = 97,‘A'=65。

字符型,也有一些问题需要注意:

(刚查到的一个题目,挺好的)

在Java中,byte 是字节,1 byte是8位(8bit),char是字符型是2个字节,就是16bit。Java采用unicode,2个字节(16位)来表示一个字符。

问:

		char x = '我';
		String str = "我";
		byte[] data = str.getBytes();
		System.out.println(data.length);

输出是什么?

一看到这个问题,表示不会啊,答案是”3“,即3个字节。

Java是用unicode来表示字符,"我"这个中文字符的unicode就是2个字节。 String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。如果不指定encoding则取系统默认的encoding,系统默认编码是UTF-8。

如果改一下:

		char x = '我';
		String str = "我";
		byte[] data = str.getBytes("gbk");
		System.out.println(data.length);

结果就是2个字节了。

2. 字节流与字符流

Java中的字节流的顶层抽象类是InputStream和OutputStream。

Java中的字符流的顶层抽象类是Reader和Writer。

这里需要注意,可以写出基本的文件读写代码,相关的,还有字节流与字符流的转换。


3. 关于break和continue语句,下面说法错误的有(      )

A、break只能用于循环语句中。

B、continue只能用于循环语句中。

C、在循环语句中,break语句将终止循环;而continue是略过当前循环中剩余的语句进入下一次循环。

D、在循环语句中,continue语句将终止循环;而break是略过当前循环中剩余的语句进入下一次循环。

break只能使用在循环语句和switch中,

在switch语句中,break是其语法本省的一部分,break语句会终止其后语句的执行,退出switch语句

在循环中遇到break语句时,循环立即终止,程序转到当前循环体后的第一个语句去继续执行。

它只能出现在循环体中,其功能是立即结束本次循环,即遇到continue语句时,不执行循环体中continue后的语句,立即转去判断循环条件是否成 立,

即中止当次循环进入下一次循环。


4. 方法resume()负责恢复哪些线程的执行?(      )

A、通过调用stop()方法而停止的线程

B、通过调用sleep()方法而停止的线程

C、通过调用wait()方法而停止的线程

D、通过调用suspend()方法而停止的线程

答案:D

熟悉线程的同学,应该可以选对,suspend()和resume()是一对儿。

suspend() 挂起线程;resume() 唤醒线程。这2个方法都是Thread类的。

通过suspend()函数,可使线程进入停滞状态。通过suspend()使线程进入停滞状态后,除非收到resume()消息,否则该线程不会变回可执行状态。

这里顺便记录一下wait()和notify()方法:

wait()和notify()是Object中的方法。

使用wait()与notify()/notifyAll()可以使得多个任务之间彼此协作。

调用sleep()和yield()的时候锁并没有被释放,而调用wait()将释放锁。这样另一个任务(线程)可以获得当前对象的锁,从而进入它的synchronized方法中。

可以通过notify()/notifyAll(),或者时间到期,从wait()中恢复执行。

只能在同步控制方法或同步块中调用wait()、notify()和notifyAll()。如果在非同步的方法里调用这些方法,在运行时会抛出IllegalMonitorStateException异常。


5. oralce数据库中,以下哪个函数可以针对任意数据类型进行操作?(      )
A、TO_CHAR     B、LOWER           C、MAX           D、CEIL

答案是A,

备注:2014-05-21,这里好像有2个答案,C选项max也是对的。

关于to_char,可以看下这篇博客,写的很好:http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值