Java选择题(四)

1.Java Application 中的主类需包含main方法,以下哪项是main方法的正确形参?( )
正确答案: B 你的答案: B (正确)
A.String args
B.String[] args
C.Char arg
D.StringBuffer[] args

2.在JAVA中, 下列标识符合法的是()
正确答案: C 你的答案: C (正确)
A.3kyou
B.@163
C.name
D.while

解释:合法标识符:三不能
1.不能以数字开头
2.不能是关键字
3.不能包含除了$和_以外的其他字符

3.设有下面一段代码:

class  Student  extends  Person {
long    id;     // 身份证号
int  score;  // 入学总分
String  name;   // 姓名
int  getScore(){
return  score;
}
}

问:类 Person 和类 Student 的关系是( )。
正确答案: B 你的答案: D (错误)
A.包含关系
B.继承关系
C.关联关系
D.无关系,上述类定义有语法错误

4.执行下列程序的输出结果为( )

public class Test {
 public static void main(String[] args) {
 String s1 = "HelloWorld";
 String s2 = new String("HelloWorld");
 if (s1 == s2)  {
 System.out.println("s1 == s2");
 } else {
 System.out.println("s1 != s2");
 }
 if (s1.equals(s2)) {
 System.out.println("s1 equals s2");
 } else {
 System.out.println("s1 not equals s2");
 }
 }
 }

正确答案: D 你的答案: A (错误)
A.s1 == s2
s1 not equals s2
B.s1 == s2
s1 equals s2
C.s1 != s2
s1 not equals s2
D.s1 != s2
s1 equals s2

解释: s1直接指向常量池中的字符串变量(没有就在常量池创建一个) s2是指向堆里的一个字符串对象,对象里面有常量池中字符串对象的引用

5.下列关于Java中类的构造方法的描述,正确的是()
正确答案: B 你的答案: C (错误)
A.构造方法的返回类型为void
B.可以定义一个类而在代码中不写构造方法。
C.在同一个类中定义的重载构造方法不可以相互调用。
D.子类不允许调用父类的构造方法。

解释:
A、构造器没有返回值,这个没有返回值和返回值为void可部一样。
B、每个类在没有自己显式声明构造器的时候,都会有一个默认的无参构造。
C、构造器可以重载,而且可以使用super()、this()相互调用
D、每个构造器的默认第一行都是super(),但是一旦父类中没有无参构造,必须在子类的第一行显式的声明调用哪一个构造。

6.在java中,无论在何处调用,使用静态属性必须以类名做前缀。
正确答案: B 你的答案: A (错误)
A.正确
B.错误

解释:
1如果是本类使用,可以直接就用静态变量名。2如果是其他类使用,可以使用类名来调用,也可以创建一个实例对象来调用。3如果静态变量所在的类是静态类,那么不管在本类里或者在其他外部类,都可以直接使用静态变量名。

7如下语句通过算术运算和逻辑运算之后i和 j的结果是( )

int i=0;
int j=0;
if((++i>0)||(++j>0))
{
//打印出i和j的值。
}

正确答案: D 你的答案: D (正确)
i=0;j=0
i=1;j=1
i=0;j=1
i=1;j=0

解释: && 和 || 为短路与 短路或
&&若前面的表达式为false,整个逻辑表达式为false,所以后面的表达式无论true和false都无法影响整个表达式的逻辑结果,所以为了提高代码执行速率,这里后面的表达式就不会执行。
同理,若前面表达式为true,则后面的表达式无需计算。

& 和 | 为不短路与 不短路或 无论什么情况,前面的和后面的都要执行。

8.以下J2EE中常用的名词解释错误的是?
正确答案: B 你的答案: C (错误)
A.EJB容器:Enterprise java bean 容器
B.JNDI:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
C.JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
D.JAF:JAVA安全认证框架。提供一些安全控制方面的框架。

解释:
(1) web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

(2) EJB容器:Enterprise java bean容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

(3)JNDI:(Java Naming & Directory
Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

(4)JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

(5)JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

(6)JAF:(Java ActionFrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。

(7)RMI/IIOP:(Remote Method Invocation/internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。

9.以下哪一项正则能正确的匹配网址: http://www.bilibili.com/video/av21061574 ()
正确答案: B 你的答案: D (错误)
A./^(https:)?)?([a-zA-Z\d]+).bilibili.com/?video/av(\D{1,8})/?$/

B./^(http:)?(\w+).bilibili.com/?video/av(\d{1,8})/?$/

C./^(http:)?:?(\w+).bilibili.com/?\w*$/

D./^(http:)?([a-zA-Z\d]+).bilibili.com/?video/av\w*/+$/

10.下面哪种情况会导致持久区jvm堆内存溢出?
正确答案: C 你的答案: D (错误)
A.循环上万次的字符串处理
B.在一段代码内申请上百M甚至上G的内存
C.使用CGLib技术直接操作字节码运行,生成大量的动态类
D.不断创建对象、

解释:
一个对象的一生:我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的“From”区,自从去了Survivor区,我就开始漂了,有时候在Survivor的“From”区,有时候在Survivor的“To”区,居无定所。直到我18岁的时候,爸爸说我成人了,该去社会上闯闯了。于是我就去了年老代那边,年老代里,人很多,并且年龄都挺大的,我在这里也认识了很多人。在年老代里,我生活了20年(每次GC加一岁),然后被回收。

  1. 关于下面的程序Test.java说法正确的是( )。
public class Test {
    static String x="1";
    static int y=1;
    public static void main(String args[]) {
        static int z=2;
        System.out.println(x+y+z);
    }
}

正确答案: D 你的答案: D (正确)
A.3
B.112
C.13
D.程序有编译错误

12.在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。()
正确答案: B 你的答案: A (错误)
A.正确
B.错误

解释:

使用泛型的好处:
1,类型安全。 泛型的主要目标是提高 Java
程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。
泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的
JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM
或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

所以泛型只是提高了数据传输安全性,并没有改变程序运行的性能

13.@SuppressWarnings(“deprecation”)的功能是什么?
正确答案: A 你的答案: D (错误)
A.屏蔽不赞同使用的类和方法的警告
B.屏蔽在强制类型转换的时候编译器给出的警告
C.关闭所有警告信息
D.当在可序列化的类上缺少serialVersionUID定义的警告

解释:
1.Java三大注解分别是@Override @Deprecated @Suppresswarnings
2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错
3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等
4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务

14.jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?

正确答案: B D 你的答案: D (错误)
A.抽象类可以有构造方法,接口中不能有构造方法
B.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C.一个类可以实现多个接口,但只能继承一个抽象类
D.接口中可以有普通成员变量,抽象类中没有普通成员变量

解释:
抽象类
特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上
public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法
7.则实现类定义为抽象类。

15

void waitForSignal()
{
    Object obj = new Object();
    synchronized(Thread.currentThread())
    {
        obj.wait();
        obj.notify();
    }
}

Which statement is true?

正确答案: A 你的答案: A (正确)
A.This code may throw an InterruptedException
B.This code may throw an IllegalStateException
C.This code may throw a TimeOutException after ten minutes
D.This code will not compile unless”obj.wait()”is replaced with”(Thread)obj).wait()”
E.Reversing the order of obj.wait()and obj.notify()may cause this method to complete normally

16.关于HashMap和Hashtable正确的说法有()
正确答案: A C 你的答案: B C (错误)
A.都实现了Map接口
B.Hashtable类不是同步的,而HashMap类是同步的
C.Hashtable不允许null键或值
D.HashMap不允许null或值

解释: 1、继承不同。public class Hashtable extends Dictionary implements Map

public class HashMap extends AbstractMap implements Map

2、Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

3、Hashtable中,key和value都不允许出现null值。

在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

4、两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

5、哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

6、Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数

17.有以下程序段, 则下面正确的选项是()

public class MyThead extends Thread{
    public static void main(String[] args) {
        MyThead t=new MyThead();
        MyThead s=new MyThead();
        t.start();
        System.out.println("one.");
        s.start();
        System.out.println("two.");
    }
    public void run() {
        System.out.println("Thread");
    }
}

正确答案: B C D 你的答案: B (错误)
A.编译失败
B.程序运行可能结果为:
one.
Thread
two.
Thread
C.程序运行可能结果是:
one.
two.
Thread
Thread
D.程序运行结果不稳定

解释:
start()是开启线程,等待获得时间片,一到获得时间片就执行。所以可能一开启就获得了时间片执行,也有可能等到two输出后才获得了时间片。所以BC都可能,所以D也正确。

18.CMS垃圾回收器在那些阶段是没用用户线程参与的
正确答案: A C 你的答案: A (错误)
A.初始标记
B.并发标记
C.重新标记
D.并发清理

解释:
用户线程(user-levelthreads)指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
CMS的GC过程有6个阶段(4个并发,2个暂停其它应用程序)

  1. 初次标记(STW initial mark)
  2. 并发标记(Concurrent marking)
  3. 并发可中断预清理(Concurrent precleaning)
  4. 最终重新标记(STW remark)
  5. 并发清理(Concurrent sweeping)
  6. 并发重置(Concurrent reset) 在初次标记,重新标志的时候,要求我们暂停其它应用程序,那么这两个阶段用户线程是不会参与的

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

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

正确答案: A B C D 你的答案: D (错误)
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;}
}

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

20.有关finally语句块说法正确的是( )
正确答案: A B C 你的答案: B (错误)
A.不管catch是否捕获异常,finally语句块都是要被执行的
B.在try语句块或catch语句块中执行到System.exit(0)直接退出程序
C.finally块中的return语句会覆盖try块中的return返回
D.finally 语句块在 catch语句块中的return语句之前执行

解释:
D.不是return之前,是return执行完成之前,return表达式的结果会暂时保存起来,不会被改变

21.HashSet子类依靠()方法区分重复元素。
正确答案: C 你的答案: A (错误)
A.toString(),equals()
B.clone(),equals()
C.hashCode(),equals()
D.getClass(),clone()

解释:
HashSet的底层还是用HashMap来实现的。将Entry<K,V>的V都变成了同一个Object对象,public static final PRESENT = new Object()。 而HashMap的数据结构是数组+链表+红黑树。

调用K的hashCode方法,然后高低16位进行&运算。得到的hash值,与数组tab[](桶)的长度-1进行&运算,确定插入对象在哪一个桶上。然后调用对象的equals方法,形成链表。当链表长度大于8时,链表转红黑树。

22.程序文件名必须与公共外部类的名称完全一致(包括大小写).
正确答案: A 你的答案: A (正确)
A.正确
B.错误

23.当你编译和运行下面的代码时,会出现下面选项中的哪种情况?

public class Pvf{
    static boolean Paddy;
    public static void main(String args[]){
        System.out.println(Paddy);
    }
}

正确答案: B 你的答案: C (错误)
A.编译时错误
B.编译通过并输出结果false
C.编译通过并输出结果true
D.编译通过并输出结果null

解释: 类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。
boolean类型默认值是false

24.关于Java语言中的final关键字的使用,下列说法正确的是()

正确答案: C 你的答案: B (错误)
A.在使用final关键字定义的方法里面使用final关键字定义变量。
B.使用final关键字定义变量,必须在变量定义的同时给定变量的具体数值,完成变量初始化。
C.final关键字可以用来修饰方法,表明此方法不可以被子类重写。
D.使用final关键字定义变量,必须同时使用static关键字。

解释:
A 选项在 final 定义的方法里,不是必须要用 final 定义变量。
B final定义的变量,可以在不是必须要在定义的同时完成初始化,也可以在构造方法中完成初始化。
C正确,final修饰方法,不能被子类重写,但是可以被重载。
D final 定义变量,可以用 static 也可以不用。

25.以下java程序代码,执行后的结果是()

java.util.HashMap map=new java.util.HashMap(); 
map.put("name",null);      
map.put("name","Jack");
System.out.println(map.size());

正确答案: C 你的答案: B (错误)
A.0
B.null
C.1
D.2

解释:ashMap可以插入null的key或value,插入的时候,检查是否已经存在相同的key,如果不存在,则直接插入,如果存在,则用新的value替换旧的value,
第一条put语句,会将key/value对插入HashMap,
第二条put语句,要替换为(name,jack)。所以,size为1.

26.下列叙述错误的是( )

正确答案: D 你的答案: D (正确)
A.在接口中定义的方法除了default和static关键字修饰的方法拥有方法体,其他方法都应是没有方法体的抽象方法(JDK1.8以后)
B.一个java类只能有一个父类,但可以实现多个接口
C.在类声明中,用implements关键字声明该类实现的接口
D.定义接口时使用implements关键字。

解释:
A、JDK8开始,接口中可以定义有方法体的方法,方法必须被default和static修饰。除此之外,其他方法都是抽象方法。
B、Java的语法是单继承,但是继承可以传递。其实B更准确一点是只能有一个直接父类。
C、继承用extends,实现用implements。先继承后实现。
D、类是class,接口是interface。

27.正则表达式中,表示匹配非数字字符的字符是()?
正确答案: D 你的答案: D (正确)
A.\b
B.\d
C.\B
D.\D

28.有如下一段代码,请选择其运行结果()

public class StringDemo{
  private static final String MESSAGE="taobao";
  public static void main(String [] args) {
    String a ="tao"+"bao";
    String b="tao";
    String c="bao";
    System.out.println(a==MESSAGE);
    System.out.println((b+c)==MESSAGE);
  }
}

正确答案: C 你的答案: A (错误)
A.true true
B.false false
C.true false
D.false true

解释: hotspot中编译时"tao"+“bao"将直接变成"taobao”,b+c则不会优化,因为不知道在之前的步骤中bc会不会发生改变,而针对b+c则是用语法糖,新建一个StringBuilder来处理

29.下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:()
正确答案: A E 你的答案: D (错误)
A.java.util.ConcurrentHashMap
B.java.util.Map
C.java.util.TreeMap
D.java.util.SortMap
E.java.util.Hashtable
F.java.util.HashMap

解释:
Hashtable的方法都是synchrnized修饰的线程安全,
ConcurrentHashMap并发容器,JDK7采用分段锁,JDK8采用CAS算法,线程安全,建议使用,Connections工具类提供了一个方法synchrnizedMap可以把Map同步,本质就是给每一个方法加上synchrnized关键字进行同步

30.针对以下代码,哪些选项执行后是true的:()

class CompareReference{
   public static void main(String [] args){
   float f=42.0f;
   float f1[]=new float[2];
   float f2[]=new float[2];
   float[] f3=f1;
   long x=42;
   f1[0]=42.0f;
  }
}

正确答案: B C 你的答案: C (错误)
A.f1== f2
B.x== f1[0]
C.f1== f3
D.f2==f1[1]

解释:

public static void main(String[] args){
int i=42;
double d=42.0000;
long l=42;
float f=42.0f;
float f2=42.00f;
System.out.println(d== i);
System.out.println(f== i);
System.out.println(f== f2);
System.out.println(l== i);
System.out.println(d== f);
} /*out: true true true true true
*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风儿吹吹吹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值