Java错题集一

1,如果要建立一个java.scut.computer的包,叙述正确的是?

A.只需在代码中加入“package java.scut.computer;”一个语句,并且必须放在代码的第一行
B.只需在代码中加入“package java.scut;”一个语句
C.必须在代码中加入“package java.scut;”和“package java.scut.computer;”两个语句
D.在代码中,不一定是第一句,只要是类定义前,加入package语句即可

(D )正确答案A
此题有争议,以标准答案为准
实际上在Java语言规范中,不允许package name以“java”开头,不然会报一个java.lang.SecurityException 的错误。因为假如我们允许包名以java开头,那么我们完全可以编写和jdk标准包下一模一样的类,如Java.lang.Integer。因此在虚拟机进行类或接口解析时可能会发生冲突。一句话总结就是:假如允许包名以java开头,可能会导致命名空间污染的问题

来源:
https://www.nowcoder.com/questionTerminal/c70fa69d5c0f4f09b7553d4f84bed281


2,子类要调用继承自父类的方法,必须使用super关键字。
A.正确
B.错误

( A )正确答案B

1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用。
4、子类不能访问父类的私有方法 用super也不行

来源:
https://www.nowcoder.com/questionTerminal/a1aafec6367449079de0ffa6ed9e64b5


3,下面有关java object默认的基本方法,说法错误的是?
A.equals(Object obj) 指示某个其他对象是否与此对象“相等”
B.copy() 创建并返回此对象的一个副本
C.wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
D.toString() 返回该对象的字符串表示

(A)正确答案B
java object默认的基本方法中没有copy(),含有如下方法:
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()

来源:
https://www.nowcoder.com/questionTerminal/7d0f6ee46013412ba20443f797b41940


4,JDK1.8版本之前,抽象类和接口的区别,以下说法错误的是

A.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
B.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
C.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。
D.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"has-a"关系,interface表示的是"is-a"关系。

正确答案D
反了,abstract class表示的是"is-a"关系,interface表示的是"has-a"关系。
其他选项正确。


5,下面哪个行为被打断不会导致InterruptedException:

A.Thread.join
B.Thread.sleep
C.Object.wait
D.CyclicBarrier.await
E.Thread.suspend

正确答案E
抛InterruptedException的代表方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法
另外CyclicBarrier的await方法也会爆 InterruptedException

来源:
https://www.nowcoder.com/questionTerminal/0e426707c41343c9a7707d5c835aa474?toCommentId=1112292


6,从内存实现或者反射的角度来看,关于继承的说法正确的是
注:此处的继承不代表能调用

A.子类将继承父类的所有的数据域和方法
B.子类将继承父类的其可见的数据域和方法
C.子类只继承父类public方法和数据域
D.子类只继承父类的方法,而不继承数据域

(B)正确答案A
子类可以继承父类的全部数据域和方法,但是这里继承代表的是“拥有”,即:只是拥有父类的全部数据域和方法,但不具备对某些私有数据域或私有方法的使用权(调用)。


7,Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述正确的是

A.ArrayList和LinkedList均实现了List接口
B.ArrayList的访问速度比LinkedList快
C.添加和删除元素时,ArrayList的表现更佳
D.HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值

(AB)正确答案ABD
A:ArrayList和LinkedList都实现List接口,Hashset实现Set接口
BC:Arraylist在内存中基于数组实现,可以通过为止找到地址查找快,增加删除需要修改其后面的所以元素所以慢。LinkedList在内存中基于链表存放,查找慢,修改快。
D:HashMap运行任何键值对。即使是null也是支持的


8,Java中关于继承的描述正确的是

A.一个子类只能继承一个父类
B.子类可以继承父类的构造方法
C.继承具有传递性
D.父类一般具有通用性,子类更具体

(ABC)正确答案ACD
在java中,子类构造器会默认调用super()(无论构造器中是否写有super()),用于初始化父类成员,同时当父类中存在有参构造器时,必须提供无参构造器,子类构造器中并不会自动继承有参构造器,仍然默认调用super(),使用无参构造器。因此,一个类想要被继承必须提供无参构造器。


9,往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:

public class OuterClass{
    private float f=1.0f;
    //插入代码到这里
}

A:class InnerClass{
public static float func(){return f;}
}
B:abstract class InnerClass{
public abstract float func(){}
}
C:static class InnerClass{
protected static float func(){return f;}
}
D:public class InnerClass{
static float func(){return f;}
}

正确答案:ABCD

主要考核了这几个知识点:
1.静态内部类才可以声明静态方法 AD
2.静态方法不可以使用非静态变量 C
3:定义抽象方法不可以有函数体 B

来源:
https://www.nowcoder.com/questionTerminal/48524c47dd924887be6684b17175fa40


10,以下JAVA程序的运行结果是什么

public static void main(String[] args) {
Object o1 = true ? new Integer(1) : new Double(2.0);
Object o2;
if (true) {
             o2 = new Integer(1);
} else {
o2 = new Double(2.0);
}
System.out.print(o1);
System.out.print(" ");         
System.out.print(o2);
}

(A)正确答案D
三元操作符如果遇到可以转换为数字的类型,会做自动类型提升。比如

Object o1 = (false) ? new Double(1.0) : new Integer(2);
System.out.println(o1);
	会打印2.0

来源:https://www.nowcoder.com/questionTerminal/701d348fec8f4c1893740e253217a65f


11,以下各类中哪几个是线程安全的?

A.ArrayList
B.Vector
C.Hashtable
D.Stack

正确答案:BCD
集合中线程安全的类有:vector,hashtable,stack,enumeration,除此之外均是非线程安全的类与接口


12,有关线程的叙述正确的是

A.可以获得对任何对象的互斥锁定
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C.线程通过使用synchronized关键字可获得对象的互斥锁定
D.线程调度算法是平台独立的

正确答案CD
C:线程的互斥锁机制:synchronized,lock,condition
D:平台独立性是指可以在一个平台上编写和编译程序,而在其他平台上运行。那么Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,那么本地程序转化成的字节码在各个平台都是一样的。也就是说和哪个平台没有关系


13,关于 Socket 通信编程,以下描述错误的是:

A.服务器端通过new ServerSocket()创建TCP连接对象
B.服务器端通过TCP连接对象调用accept()方法创建通信的Socket对象
C.客户端通过new Socket()方法创建通信的Socket对象
D.客户端通过new ServerSocket()创建TCP连接对象

( C)正确答案D


14,Math.floor(-8.5)=

A.(float)-8.0
B.(long)-9
C.(long)-8
D.(double)-9.0

( A)正确答案D
floor: 求小于参数的最大整数。返回double类型

     例如:Math.floor(-4.2) = -5.0

ceil: 求大于参数的最小整数。返回double类型

     例如:Math.ceil(5.6) = 6.0

round: 对小数进行四舍五入后的结果。返回int类型

     例如:Math.round(-4.6) = -5

**15, 下列哪个说法是正确的**

A.ConcurrentHashMap使用synchronized关键字保证线程安全
B.HashMap实现了Collction接口
C.Array.asList方法返回java.util.ArrayList对象
D.SimpleDateFormat是线程不安全的

(B)正确答案D
A选项中,ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。
B中,HashMap实现了map接口
C中,应该是Arrays.asList(),其将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部


16,下面有关webservice的描述,错误的是?
A.Webservice是跨平台,跨语言的远程调用技术
B.Webservice通信机制实质就是json数据交换
C.Webservice采用了soap协议(简单对象协议)进行通信
D.WSDL是用于描述 Web Services 以及如何对它们进行访问

(D)正确答案B
Webservice是跨平台,跨语言的远程调用技术;
它的通信机制实质就是xml数据交换;
它采用了soap协议(简单对象协议)进行通信


17,以下哪项陈述是正确的?

A.垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
B.垃圾收集允许程序开发者明确指定释放 哪一个对象
C.垃圾回收机制保证了JAVA程序不会出现 内存溢出
D.进入”Dead”状态的线程将被垃圾回收器回收
E.以上都不对

正确答案E
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收


18,
在这里插入图片描述

A.1,2,2
B.1,2,3
C.1,3,3
D.1,3,2

(B)正确答案D


19,下面属于java包装类的是?

A.String
B.Long
C.Character
D.Short

(ABD)正确答案BCD
Java 语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,即包装类。对应的基本类型和包装类如下表:

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

20,Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )

public class Demo{

  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}

A.func1
B.func2
C.func3
D.func4

道题考的是数据类型转换问题。由大到小需要强制转换,由小到大不需要。
A:return; 没有返回值,错误
B:short → float 无须强制转换,正确
C:long → float 无须强制转换(这个最选项容易出错),正确。

float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。
浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的。
第1位,符号位,即S
接下来8位,指数域,即E。
剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
然后按照公式: V=(-1)^s * M * 2^E
也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大。

D:double → float 没有强制转换,错误。

来源:
https://www.nowcoder.com/questionTerminal/0886d19c7b6a4cbe8c52b2a31d748252

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值