牛客易错题记录

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 的子类

父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。 

9.在java中重写方法应遵循规则的包括()

正确答案: B C 你的答案: A B (错误)

访问修饰符的限制一定要大于被重写方法的访问修饰符

可以有不同的访问修饰符

参数列表必须完全与被重写的方法相同

必须具有不同的参数列表

解析:
(1)访问修饰符的限制是等于或者大于
(2)C选项有问题,题目说的参数列表必须完全相同,但是我觉得只要参数类型一样就行,参数名不一样也会重写。如下图代码

package test;

public class test1 {
	public static void main(String[] args) {
		B b=new B();
		b.haha(1);
	}
}
class A{
	void haha(int i) {
		int j=i+i;
		System.out.println(j);
	}
}
class B extends A{
	void haha(int j) {
		System.out.println(j);
	}
}
***

## 结果是:1。 参数名不完全一样,此时照样重写。

***
package test;

public class test1 {
	public static void main(String[] args) {
		B b=new B();
		b.haha(1);
	}
}
class A{
	void haha(int i) {
		int j=i+i;
		System.out.println(j);
	}
}
class B extends A{
	void haha(double j) {
		System.out.println(j);
	}
}
## 这里的结果是2:子类没有重写父类的方法。

子类没有重写父类方法,但是子类默认有一个和父类重名的haha方法,子类在调用时,会调用父类中的哈哈方法。

10.如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是? ( )

正确答案: C 你的答案: D (错误)

protected void setColor() { …}

void setColor() { …}

public void setColor() { …}

以上语句都可以用在类BlueGlass中

解析:不管是继承中的重写方法,还是实现接口的方法,子类中的方法权限,都得大于或者等于父类中的方法权限,接口中的方法默认权限为public abstract,所以ABD错,默认权限为frend。

11.在Java中,以下关于方法重载和方法重写描述正确的是?

正确答案: D 你的答案: D (正确)

方法重载和方法的重写实现的功能相同

方法重载出现在父子关系中,方法重写是在同一类中

方法重载的返回值类型必须一致,参数项必须不同

方法重写的返回值类型必须相同或相容。

解析:
(1)重写设计到权限和返回值,是在继承关系中才存在的,而重写是在同一个类中的方法重名时才会出现重写这个概念。
(2)什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。
(3)方法重写要注意的事项:

  1. 方法重写时, 方法名与形参列表必须一致。
  2. 方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
  3. 方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。
  4. 方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。
    Exception(最坏)
    RuntimeException(小坏)

(4)方法的重载:在一个类中 存在两个或者两个 以上的同名函数,称作为方法重载。
方法重载的要求
1. 函数名要一致。
2. 形参列表不一致(形参的个数或形参 的类型不一致)
3. 与返回值类型无关。

12.java中关于内存回收的正确说法是

正确答案: B 你的答案: D (错误)

程序员必须创建一个线程来释放内存

内存回收程序负责释放无用内存

内存回收程序允许程序员直接释放内存

内存回收程序可以在指定的时间释放内存对象

解析:
首先明确一点,java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:

  1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
  2. 如果内存确实很紧张,调用System.gc() 方法来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。

13.下面哪种流可以用于字符输入:

正确答案: C 你的答案: A (错误)

java.io.inputStream

java.io.outputStream

java.io.inputStreamReader

java.io.outputStreamReader

解析:stream是处理字节流,streamReader是处理字符流。

14. 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

1
2
3
4
5
6
7
8
9
10
11
12
13

package NowCoder;
class Test {
public static void hello() {
System.out.println(“hello”);
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}

正确答案: A 你的答案: A (正确)

能编译通过,并正确运行

因为使用了未初始化的变量,所以不能编译通过

以错误的方式访问了静态方法

能编译通过,但因变量为null,不能正常运行

解析:这里test.hello()方法其实没用,test类中的hello方法是静态,在创建test对象的时候,虽然它是无用的对象,但是还是创建了,在创建时test类会加载,当类第一次加载的时候,静态类方法hello()会执行一次,并且只执行一次。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值