选择题
public class Test{
static int cnt=6;
static{
cnt+=9;
}
public static void main(String[] args){
System.out.println("cnt="+cnt);
}
static{
cnt/=3;
};
}
cnt的值是:cnt=5
2.执行如下程序,输出结果是 2 24 46 6
class Test
{
private int data;
int result=0;
public void m()
{
result+=2;
data+=2;
System.out.print(result+" "+data);
}
}
class ThreadExample extends Thread
{
private Test mv;
public ThreadExample(Test mv)
{
this.mv=mv;
}
public void run()
{
synchronized(mv)
{
mv.m();
}
}
}
class ThreadTest
{
public static void main(String args[])
{
Tesr mv=new Test();
Thread t1=new ThreadExample(mv);
Thread t2=new ThreadExample(mv);
Thread t3=new ThreadExample(mv);
t1.start();
t1.start();
t1.start();
}
}
3.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。(×)
解析:泛型只在编译的时候保证数据类型的正确性,和运行期间的性能无关。
使用泛型的好处:类型安全,泛型的主要目标是提高Java程序的类型安全;消除强制类型转换,使得代码更加可读,减少了出错机会;
4.
public class Test
{
static boolean foo (char c)
{
System.out.print(c);
return true;
}
public static void main(String[] argv)
{
int i=0;
for (foo('A';foo('B')&&(i<2);foo('C'))
{
i++;
foo('D');
}
}
}
What is the result?
ABDCBDCB
解析:
for(条件1;条件2;条件3){
//语句
}
执行顺序是条件1->条件2->语句->条件3->条件2->语句->条件3->条件2…如果条件2为true则一直执行,如果条件2为false,则for循环结束
for里面的第一个语句(初始化位置)只执行一次。
5.事务隔离级别是由数据库系统实现的。
解析:
A.Java应用程序:我们写Java程序的时候只是设定事物的隔离级别,而不是去实现它。
B.Hibernate是一个Java的数据持久化框架,方便数据库的访问。
C.事务隔离级别由数据库系统实现,是数据库系统本身的一个功能。在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别;为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规范中,定义了4个事务隔离级别,分别为未授权读取,也称为读未提交(read uncommitted);授权读取,也称为读提交(read committed);可重复读取(repeatabe read);序列化(serializable).
D.JDBC是java database connector,也就是Java访问数据库的驱动。
6.如果Int x=20,y=5,则语句System.out.print(x+y+""+(x+y)+y);的输出结果(25255)
解析:字符串和数字相加,直接把数字当成字符串,这是Java的装箱机制,最终相当于字符串的连接。
代码默认将“”后面的变化成了字符串相加。
7.对于子类的构造函数说明,下列叙述错误的是
A.子类可以继承父类的构造函数。× ; 原因(Java继承中对构造函数是不继承的,只是显式或者隐式调用)。
B.子类中调用父类构造函数不可以直接书写父类构造函数,而应该用super();
C.用new创建子类的对象时,若子类没有带参构造函数,将先执行父类的无参构造函数,然后在执行自己的构造函数。
D.子类的构造函数中可以调用其他函数。
8.针对以下代码,那些选项执行后是true的:x==f1[0];f1==f3
class CompareReference{
public static void main(String[] args){
float f=42.0f
float f1[]=new float[2];
float f2[]=new float[2];
float[] f3=f1;
long x=42;
f1[0]=42.0f;
}
}
解析:x==f1[0]
,x是long类型,与float类型对比属于低精度,所以x要向高精度的float类型转型再比较,故相等。long和float比较,相当于float跟float比较–精度从高到低double float long int short(char) byte
f1==f3
,f3没有new创建,而是由f1赋值,所以f3地址是指向f1的,f1值改变,相当于改变f3值,所以相等。
9.不能用来修饰interface的有(private、protected、static)[仅限外部接口].
解析:interface的访问权限修饰符只能是public
10.下列说法正确的是
A.对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final,内部类才能使用它们
B.成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
解析:
C.由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的。×
原因:匿名内部类用法与局部内部类不一致,首先从定义上就不一样,匿名类用在任何允许存在表达式的地方,而局部内部类用于在任何允许出现局部变量的地方。还有更重要的是匿名类只能使用一次,而局部类则可以在自己的定义域内多次使用。
D.静态内部类可以访问外部类的成员变量。×
原因:静态内部类不能直接访问外部类的非静态成员,但可以通过new外部类().成员的访问方式。
成员内部类是专指非静态的,静态内部类不能称之为成员
编程题
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。[
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26957383
思路: