1.下列程序执行后结果为( )?
class A { public int func1(int a, int b) { return a - b; }}class B extends A { public int func1(int a, int b) { return a + b; }}public class ChildClass { public static void main(String[] args) { A a = new B(); B b = new B(); System.out.println("Result=" + a.func1(100, 50)); System.out.println("Result=" + b.func1(100, 50)); }}
A.Result=150Result=150
B.Result=100Result=100
C.Result=100Result=150
D.Result=150Result=100
答案:
A
解析:
其实很简单,涉及转型的题目,分为向上或者向下转型。
关键的来了,不论向上或者向下转型,都是一句话,“编译看左边,运行看右边”。也就是编译时候,会看左边引用类型是否能正确编译通过,运行的时候是调用右边的对象的方法。就本题来说,编译时候会发现左边满足条件所以编译通过,运行时候又会调用右边也就是 class B 的方法,所以答案都是150。
2.下列哪个类的声明是正确的?
A.protected private number;
B.public abstract class Car{}
C.abstract private move(){}
D.abstract final class HI{}
答案:
B
解析:
抽象类的目的就是为了让子类实现他本身的方法
final修饰的东西不能被更改或继承
abstract存在的意义是为了让子类实现方法而存在,final的意义是不让子类进行修改。两者存在互斥关系
3.关于抽象类叙述正确的是? ( )
A.抽象类不能实现接口
B.抽象类必须有“abstract class”修饰
C.抽象类必须包含抽象方法
D.抽象类也有类的特性,可以被实例化
答案:
B
解析:
A.抽象类是可以实现接口的,而且抽象类也可以继承自抽象类
B.对
C.抽象类指有abstract修饰的class,其可以包含抽象方法,也可以不包含
D.抽象类和接口都是不能被实例化的,只有具体的类才可以被实例化
4.若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()
A.char
B.int
C.double
D.float
答案:
C
解析:
char < short < int < float < double 不同类型运算结果类型向右边靠齐。
5.When is the text “Hi there”displayed?
public class StaticTest{ static { System.out.println(“Hi there”); } public void print() { System.out.println(“Hello”); } public static void main(String args[]) { StaticTest st1 = new StaticTest(); st1.print(); StaticTest st2 = new StaticTest(); st2.print(); }}
A.Never.
B.Each time a new object of type StaticTest is created.
C.Once when the class is loaded into the Java virtual machine.
D.Only when the main() method is executed.
答案:
C
解析:
类中静态语句块仅在类加载时被执行一次
6.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。
A.对
B.错
答案:
B
解析:
泛型仅仅是java的一颗语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的。
7.以下说法中正确的有?
A.StringBuilder是 线程不安全的
B.Java类可以同时用 abstract和final声明
C.HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D.volatile关键字不保证对变量操作的原子性
答案:
A D
解析:
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
8.下面关于Java package的描述,哪个是正确的:()
A.包不提供将所有类名分区为更易管理的块的机制.
B.包提供可见性控制机制.
C.包的一个重要属性是包内定义的所有类都可以通过该包外的代码访问
D.声明为包的一部分的类的.class文件可以存储在多个目录中.
答案:
B
解析:
包的作用:
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
9.下面代码执行后的结果为( )?
nt main(){int sum=0;int i=0,j=0;for(j=0;j<6;j++){if(j%2)continue;sum++;}printf("sum=%d