java接口练习题_Java专项练习题(一)

如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是? ( )

[v_act]void use() { …}

protected void use() { …}

public void use() { …}

以上语句都可以用在类SmallCup中[/v_act]

既然是实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:三同一大一小(方法名、返回值类型、形参相同;访问权限>=重写前;抛出异常<=重写前)

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

有时为了避免某些未识别的异常抛给更高的上层应用,在某些接口实现中我们通常需要捕获编译运行期所有的异常, catch 下述哪个类的实例才能达到目的:()

[v_act]Error

Exception

RuntimeException

Throwable[/v_act]

正确答案是B,因为error是系统出错,catch是无法处理的,难以修复的,RuntimeException不需要程序员进行捕获处理,error和exception都是throwable的子类,我们只需要对exception的实例进行捕获即可

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

下面叙述那个是正确的?()

[v_act]java中的集合类(如Vector)可以用来存储任何类型的对象,且大小可以自动调整。但需要事先知道所存储对象的类型,才能正常使用。

在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。

java接口包含函数声明和变量声明。

java中,子类不可以访问父类的私有成员和受保护的成员。[/v_act]

A.vector是线程安全的ArrayList,在内存中占用连续的空间。初始时有一个初始大小,当数据条数大于这个初始大小后会重写分配一个更大的连续空间。如果Vector定义为保存Object则可以存放任意类型。

B.try{}catch{}会增加额外的开销

C.接口中声明的’变量’必须为public final static,所以为常量

D.子类可以访问父类受保护的成员

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

对于如下代码段,可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )

class A{

public A foo(){return this;}

}

class B extends A{

public A foo(){

return this;

}

}

class C extends B

{

_______

}

[v_act]public void foo(){}

public int foo(){return 1;}

public A foo(B b){return b;}

public A foo(){return A;}[/v_act]

子类覆盖父类要遵循“两同两小一大”

“两同”即方法名相同,形参列表相同

“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。

(注:看到有网友有这样的疑问,父类方法返回值是double,子类修改成int为什么不行呢?这是因为返回值类型更大或者更小,是对于同一类型而言的。也就是说,返回值的类型需要有继承关系才去考虑大小这个概念。类型不同,肯定不是方法重写)

“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

注意:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法一个是实例方法,否则编译出错。

所以,根据这个原理,再来分析上面这道题。

A.public void foo(){}

返回值类型与父类不一致,所以不可能是方法的重写。又因为方法名相同,那么只能是方法重载,而方法重载有需要满足三个条件:形参个数、顺序、类型必须有一者不同,A选项都不满足,错

B.public int foo(){return 1;}

与A选项一样

C.public A foo(B b){return b;}

返回值类型与父类相同,但由于参数列表不同,所以是对父类方法的重载

D.public A foo(){return A;}

语法错误

java语言的下面几种数组复制方法中,哪个效率最高?

[v_act]for 循环逐一复制

System.arraycopy

Array.copyOf

使用clone方法[/v_act]

效率:System.arraycopy > clone > System.copyOf > for循环

下列哪个选项是正确计算42度(角度)的余弦值?

[v_act]double d=Math.cos(42)

double d=Math.cosine(42)

double d=Math.cos(Math.toRadians(42))

double d=Math.cos(Math.toDegrees(42))[/v_act]

Math.cos为计算弧度的余弦值,Math.toRadians函数讲角度转换为弧度

下列选项中关于Java中super关键字的说法正确的是()

[v_act]super关键字是在子类对象内部指代其父类对象的引用

super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类

子类通过super关键字只能调用父类的方法,而不能调用父类的属性

子类通过super关键字只能调用父类的属性,而不能调用父类的方法[/v_act]

super是java提供的一个关键字,super用于限定该对象调用它从父类继承得到的Field或方法。super关键字不能出现在static修饰的方法中,因为static修饰的方法是属于类的。如果在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的field,而不是该类自己定义的field。需要注意的是,super关键字只能指代直接父类,不能指代父类的父类。

观察以下代码:下列哪些针对代码运行结果的描述是正确的?

class Car extends Vehicle

{

public static void main (String[] args)

{

new Car(). run();

}

private final void run()

{

System. out. println ("Car");

}

}

class Vehicle

{

private final void run()

{

System. out. println("Vehicle");

}

}

[v_act]Car

Vehicle

Compiler error at line 3

Compiler error at line 5

Exception thrown at runtime[/v_act]

首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。

下列代码的输出结果是_____

boolean b=true?false:true==true?false:true;

System.out.println(b);

[v_act]true

false

null

空字符串[/v_act]

== 优先级高于 三目运算符,先判断 true == true,此时返回为 true,

这时表达式为 boolean b = true?false:true?false:true

此时三目运算符从右向左执行,true?false:true,返回false

这时表达式为 boolean b = true?false:false;

结果为:boolean b = false ;

哪个类可用于处理 Unicode?

[v_act]InputStreamReader

BufferedReader

Writer

PipedInputStream[/v_act]

线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?

[v_act]Map map = new HashMap()

Map map = new TreeMap()

Map map = new ConcurrentHashMap();

Map map = Collections.synchronizedMap(new HashMap());[/v_act]

1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。

2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。

3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,

List list = Collections.synchronizedList(new ArrayList());

Set set = Collections.synchronizedSet(new HashSet());

你可能感兴趣的:(java接口练习题)