牛客易错题记录
1.下列选项中属于面向对象设计方法主要特征的是( )。
正确答案: A 你的答案: C (错误)
继承
自顶向下
模块化
逐步求精
解析:封装、继承、多态
2.对于子类的构造函数说明,下列叙述中错误的是( )。
正确答案: A 你的答案: C (错误)
子类可以继承父类的构造函数。
子类中调用父类构造函数不可以直接书写父类构造函数,而应该用super();。
用new创建子类的对象时,若子类没有带参构造函数,将先执行父类的无参构造函数,然后再执行自己的构造函数。
子类的构造函数中可以调用其他函数。
解析:A.java继承中对构造函数是不继承的,只是显式或者隐式调用,所以A选项不对
**首先不管子类有没有 有参构造函数,在创建子类的对象的时候,若子类构造函数没有显式调用父类构造函数,就会先调用父类的无参构造函数;若是在子类的构造函数显式调用了父类的构造函数(包括有参的可以),则会先调用刚刚显示调用的父类构造函数。
以上全是在编译通过情况下成立
public class A {
int a=0;
int b=1;
A(){
System.out.println("A的无参构造方法");
}
A(int a,int b){
a=this.a;
b=this.b;
System.out.println("A的有参构造方法");
}
public static void main(String[] args) {
B b=new B();
}
}
class B extends A{
B(){
super(12,13);//这是可以的哦
System.out.println("B的无参构造方法");
}
}
结果是:
A的有参构造方法
B的无参构造方法
3.在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?()
正确答案: D 你的答案: D (正确)
手机与小米手机
企业家与雷军
编程语言与Java
中国与北京
解析:is-a 的顺序 前者是爸爸,后者是儿子
4.能单独和finally语句一起使用的块是( )
正确答案: A 你的答案: B (错误)
try
catch
throw
throws
解析:
(1)强行解释下throw与throws。throws是向外面抛出,与finally无关,throw可以随意使用,但是与finally结合使用的时候,必须是在try/catch/finally组合块中,所以,算不上单独使用。
(2)try可以和finall使用,也可以和catch使用。但是catch和finally不能单独使用。
5.关于访问权限,说法正确的是? ( )
正确答案: A 你的答案: A (正确)
类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A不可以访问类B的方法testB
访问权限大小范围:public > 包权限 > protected > private
访问权限大小范围:public > 包权限 > private > protected
解析:包权限默认是frendly权限,适用范围为包和当前类。其他包和子孙类不能使用。
6.非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.
正确答案: B 你的答案: A (错误)
正确
错误
解析:方法头不一定完全一致。如下图代码
- 这里子类实现接口的add方法时,类型为Test类型。
7.关于异常的编程,以下描述错误的是:( )
正确答案: A 你的答案: D (错误)
在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
int i=Integer.parseInt(”123a”);将产生NumberFormatException
int a[]=null; a[0]=1; 将产生NullPointerException
输入输出流编程中,读和写时都要抛出IOException
解析:
(1)异常分为运行时异常、非运行时异常以及error。
(2)其中error是系统异常,只能重启系统解决。非运行时异常需要我们自己补获,而运行异常是程序运行时由虚拟机帮助我们补获,运行时异常包括数组的溢出,内存的溢出空指针,分母为0等.
(3)A属于运行时异常,由JVM帮我们解决。
8.下面有关 java 类加载器,说法正确的是?()
正确答案: A B C D 你的答案: B D (错误)
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出
解析:
类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明:
Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.jar );
Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;
system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath 或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。
用户自定义类加载器: java.lang.ClassLoader 的子类
父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。