1. 为Test类的一个无形式参数无返回值的方法method书写方法头,使得使用类名Test作为前缀就可以调用它,该方法头的形式为( )
A static void method()
B public void method
C protected void method()
D abstract void method()
正确答案:A
解释:
A是静态方法,可以直接用如下形式调用 Test.method();
B是普通public方法,必须实例化类,Test test = new Test(); test.method();
C是protected方法,用法同B,只是对于其他的外部class,protected就变成private;
D是抽象方法,必须被子类继承并重写,然后调用的方式同B。
2. 下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;
A dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
B dst=new String(src,"GBK").getBytes("UTF-8")
C dst=new String("GBK",src).getBytes()
D dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
正确答案:B
解释:
(1)GBK -> UTF8 转换,前提:byte[] src, dst;
/*字节数组先解码得到字符串,再编码得到字节数组*/
dst = new String(src,"GBK").getBytes("UTF-8")
(2)GBK -> UTF8 转换,前提:String src, dst;
/*字符串先编码得到字节数组,再解码得到字符串)*/
dst = new String(src.getBytes(“gbk”), "UTF-8")
3. 对文件名为Test.java的java代码描述正确的是()
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
String empID = "0000";
public Employee(String id) {
empID = id;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
A 输出:0000
B 输出:123
C 编译报错
D 输出:No name
正确答案:C
解释:
子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。输出编译错误。
4. 下面哪些情况下该类一定为抽象类?
A 当一个类的一个或多个方法是抽象方法时。
B 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时。
C 当一个类实现多个接口时。
D 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时。
正确答案:ABD
解释:
A项 一个类中有抽象方法则必须申明为抽象类。
B项 抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须定义为抽象类。
D项 一个类实现一个接口就必须实现其中所有的抽象方法,若该实现类不能实现接口中的所有方法则实现类定义为抽象类。
5. java中关于继承的描述正确的是()
A 一个子类只能继承一个父类。
B 子类可以继承父类的构造方法。
C 继承具有传递性。
D 父类一般具有通用性,子类更具体。
正确答案:ACD
解释:
子类不可以继承父类的构造方法,只可以调用父类的构造方法。
子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。
super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。
因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。
PS:方法没有继承一说,只有重载和重写
6.关于AOP错误的是?
A AOP将散落在系统中的“方面”代码集中实现。
B AOP有助于提高系统可维护性。
C AOP已经表现出将要替代面向对象的趋势。
D AOP是一种设计模式,Spring提供了一种实现。
正确答案:C
解释:
AOP和OOP都是一套方法论,也可以说成设计模式、思维方式、理论规则等等。
AOP不能替代OOP,OOP是obejct abstraction,而AOP是concern abstraction,前者主要是对对象的抽象,诸如抽象出某类业务对象的公用接口、报表业务对象的逻辑封装,更注重于某些共同对象共有行为的抽象,如报表模块中专门需要报表业务逻辑的封装,其他模块中需要其他的逻辑抽象
而AOP则是对分散在各个模块中的共同行为的抽象,即关注点抽象。一些系统级的问题或者思考起来总与业务无关又多处存在的功能,可使用AOP,如异常信息处理机制统一将自定义的异常信息写入响应流进而到前台展示、行为日志记录用户操作过的方法等,这些东西用OOP来做,就是一个良好的接口、各处调用,但有时候会发现太多模块调用的逻辑大都一致、并且与核心业务无大关系,可以独立开来,让处理核心业务的人专注于核心业务的处理,关注分离了,自然代码更独立、更易调试分析、更具好维护。
核心业务还是要OOP来发挥作用,与AOP的侧重点不一样,前者有种纵向抽象的感觉,后者则是横向抽象的感觉, AOP只是OOP的补充,无替代关系。
7. 在Java中,以下数据类型中,需要内存最多的是()
A byte
B long
C Object
D int
正确答案:B
解释:
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
注:一个字节=8位
C选项应该理解为对象在声明时,不会创建实例,不会占用空间。
如果是new Object(),这道题就得换个答案了。new Object()具体在堆内存中占多少字节,这篇篇博客写的很详细,感兴趣的话去瞅一眼吧:http://blog.csdn.net/ocean20/article/details/19913665
3. 关于访问权限说法正确 的是 ? ( )
A 外部类前面可以修饰public,protected和private
B 成员内部类前面可以修饰public,protected和private
C 局部内部类前面可以修饰public,protected和private
D 以上说法都不正确
正确答案:B
解释:
外部类只能被public和包访问两种权限修饰
成员内部类像一个成员一样有public、protected、private修饰,成员内部类可以无条件访问外部类的成员。
局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
9. java中下面哪些是Object类的方法()
A notify()
B notifyAll()
C sleep()
D wait()
正确答案:ABD
解释:
Object的方法
Sleep是Thread的类方法
5. 以下关于final关键字说法错误的是()
A final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性.
B final修饰的类不能被继承。
C final修饰的方法不能被重载。
D final修饰的变量不允许被再次赋值。
正确答案:AC
解释:
1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。
final 不能修饰抽象类
final修饰的方法可以被重载 但不能被重写