1、下面程序的输出结果为( B )
public class Demo {
public static String sRet = "";
public static void func(int i)
{
try
{
if (i%2==0)
{
throw new Exception(); //抛出异常进入catch,不抛不进
}
}
catch (Exception e)
{
sRet += "0";
return; //有return则执行完finally不再向下执行。
}
finally
{
sRet += "1";
}
sRet += "2";
}
public static void main(String[] args)
{
func(1);
func(2);
System.out.println(sRet);
}
}
A.120
B.1201
C.12012
D.101
解析:func(1):try中if不为真,不抛异常,不进catch。直接执行finally,然后继续向下执行,得"12"。
func(2):try中if为真,抛出异常进入catch,(有return但也要执行finally),执行完finally之后return不再向下执行,得"01"。
2、 try{} 里有一个 return 语句,那么紧跟在这个 try 后的 finally{} 里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
答:会执行,在方法返回调用者前执行。Java 允许在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try 中的 return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,然后如果在 finally 中修改了返回值,这会对程序造成很大的困扰,C# 中就从语法上规定不能做这样的事。
3、下列程序的运行结果
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
正确答案: A
A.IOException!
B.IOException!Exception!
C.FileNotFoundException!IOException!
D.FileNotFoundException!IOException!Exception!
解析:代码块中的do something that may cause an Exception说明程序运行时只会抛出一个异常, 但没有 指明
是什么异常,三种异常均有可能。对于某个异常,只会被捕获一次, 因而只有A是可能的答案, 另外三个
选 项都 捕获了多个异常,与题意不符。
4、下面哪个不属于HttpServletResponse接口完成的功能?
正确答案: C
A.设置HTTP头标
B.设置cookie
C.读取路径信息
D.输出返回数据
解析:
A:设置HTTP头标
response.setHeader("Refresh","3"); //三秒刷新页面一次
B:设置cookie
Cookie c1 = new Cookie("username","only");
response.addCookie(c1);
C(错误):读取路径信息,request读取路径信息
从request获取各种路径总结
request.getRealPath("url"); // 虚拟目录映射为实际目录
request.getRealPath("./"); // 网页所在的目录
request.getRealPath("../"); // 网页所在目录的上一层目录
request.getContextPath(); // 应用的web目录的名称
D:输出返回数据
HttpServleteResponse.getOutputStream().write();
5、java中下面哪些是Object类的方法()
正确答案: A B D 你的答案: A B C D (错误)
A.notify()
B.notifyAll()
C.sleep()
D.wait()
//Object类中方法:
protected Object clone()//创建并返回此对象的一个副本。
boolean equals(Object obj)//指示其他某个对象是否与此对象“相等”。
protected void finalize()//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
class getClass//()返回此 Object 的运行时类。
int hashCode()//返回该对象的哈希码值。
void notify()//唤醒在此对象监视器上等待的单个线程。
void notifyAll()//唤醒在此对象监视器上等待的所有线程。
String toString()//返回该对象的字符串表示。
void wait()//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void wait(long timeout)//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
void wait(long timeout, int nanos)//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
6、byte b = (byte)129;
b为127;
解析:byte是有符号单字节整形,所以存储数字范围是[-128,127],科学家定义数字的时候是一个环,最大的数字后面就是最小。
7、下列哪些情况下会导致线程中断或停止运行( )
正确答案: A B 你的答案: A B D (错误)
A.InterruptedException异常被捕获
B.线程调用了wait方法
C.当前线程创建了一个新的线程
D.高优先级线程进入就绪状态
解析:
A.interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。
注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。
B,线程使用了wait方法,会强行打断当前操作,进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态。
C,新创建的线程不会抢占时间片,只有等当前线程把时间片用完,其他线程才有资格拿到时间片去执行。
D选项错误,调度算法未必是剥夺式的,而准备就绪但是还没有获得CPU,它的权限更高只能说明它获得CPU被执行的几率更大而已。
8、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.(错)
解析:
方法头指:修饰符+返回类型 +方法名(形参列表)
接口的访问权限:public,abstract
两同两小一大原则。
返回值和参数列表相同;
返回值类型小于等于父类的返回值类型;
异常小于等于父类抛出异常;
访问权限大于等于父类。
9、依赖注入和控制反转
依赖注入和控制反转是同一概念:
依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述(应用程序依赖容器创建并注入它所需要的外部资源);而控制反转是从容器的角度在描述(容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源)。
10、下面的Java赋值语句哪些是有错误的 ()
正确答案: B F 你的答案: C D E (错误)
A.int i =1000;
B.float f = 45.0;
C.char s = ‘\u0639’;
D.Object o = ‘f’;
E.String s = “hello,world\0”;
F.Double d = 100;
解析:
B:小数如果不加 f 后缀,默认是double类型。double转成float向下转换,意味着精度丢失,所以要进行强制类型转换。
C:是使用unicode表示的字符。
D:‘f’ 字符会自动装箱成包装类,就可以向上转型成Object了。
F:整数默认是int类型,int类型不能转型为Double,最多通过自动装箱变为Integer但是Integer与Double没有继承关系,也没法进行转型。