【Java】Java选择题错题集(一)

What is the result of compiling and executing the following fragment of code:
1
2
3
4
5
6
7
8
9
Boolean flag = false;
if (flag = true)
{
    System.out.println(“true”);
}
else
{
    System.out.println(“false”);
}

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

The code fails to compile at the “if” statement.
An exception is thrown at run-time at the “if” statement.
The text“true” is displayed.
The text“false”is displayed.
Nothing is displayed.

解析:Boolean修饰的变量为包装类型,初始化值为false,进行赋值时会调用Boolean.valueOf(boolean b)方法自动拆箱为基本数据类型,因此赋值后flag值为true,输出文本true。 如果使用==比较,则输出文本false。if的语句比较,除boolean外的其他类型都不能使用赋值语句,否则会提示无法转成布尔值。if判断的是赋值语句是否正确

在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?

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

管道
消息队列
高速缓存数据库
套接字
对于管道,有下面这几种类型:
①普通管道(PIPE):通常有两种限制,一是单工,即只能单向传输;二是血缘,即常用于父子进程间(或有血缘关系的进程间)。

②流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。

③命名管道(name_pipe):去除了上述的第二种限制,实现了无血缘关系的不同进程间通信。
显然,要求是对于不同的服务器之间的通信,是要要求全双工形式的,而管道只能是半双工,虽然可以双向,但是同一时间只能有一个方向传输,全双工和半双工的区别可以如下图示理解:【Java】Java选择题错题集(一)

设有下面两个赋值语句:

a = Integer.parseInt("1024");

b = Integer.valueOf("1024").intValue();

下述说法正确的是()

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

a是整数类型变量,b是整数类对象。
a是整数类对象,b是整数类型变量。
a和b都是整数类对象并且它们的值相等。
a和b都是整数类型变量并且它们的值相等。
intValue()是把Integer对象类型变成int的基础数据类型; 
parseInt()是把String 变成int的基础数据类型; 
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)
本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int,所以选择D
判断对错。List,Set,Map都继承自继承Collection接口。

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

【Java】Java选择题错题集(一)

下列不属于Java语言性特点的是

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

Java致力于检查程序在编译和运行时的错误
Java能运行虚拟机实现跨平台
Java自己操纵内存减少了内存出错的可能性
Java还实现了真数组,避免了覆盖数据类型的可能
程序设计语言中,数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,这样的数组称之为“真数组”
实现了真数组为Java语言健壮性的特点之一。
数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,避免了数据覆盖的可能性和数据类型覆盖并没有关系

在Java中,关于HashMap类的描述,以下错误的是

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

HashMap使用键/值得形式保存数据
HashMap 能够保证其中元素的顺序
HashMap允许将null用作键
HashMap允许将null用作值

HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null

Hashtable不能将键和值设为null,否则运行时会报空指针异常错误

HashMap线程不安全,Hashtable线程安全

关于spring说法错误的是()

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

spring是一个轻量级JAVA EE的框架集合
spring是“依赖注入”模式的实现
使用spring可以实现声明事务
spring提供了AOP方式的日志系统
spring没有提供AOP方式的日志系统
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

Spring通过对AOP的支持,借助log4j等Apache开源组件实现了日志系统。

对Collection和Collections描述正确的是

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

Collection是java.util下的类,它包含有各种有关集合操作的静态方法
Collection是java.util下的接口,它是各种集合结构的父接口
Collections是java.util下的接口,它是各种集合结构的父接口
Collections是java.util下的类,它包含有各种有关集合操作的静态方法
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
public interface Collection<E> extends Iterable<E>
{ Collection接口继承了Iterable 接口  }
 
public class Collections {  
    private Collections() {
    }
}
java8中,忽略内部接口的情况,不能用来修饰interface里的方法的有( )

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

private
public
protected
static

Java8的接口方法可以有如下定义
only public, abstract, default, static,strictfp are permitted
在Jdk1.7中,下述说法中抽象类与接口的区别正确的有哪些?

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

抽象类中可以有普通成员变量,接口中没有普通成员变量。
抽象类和接口中都可以包含静态成员常量。
一个类可以实现多个接口,但只能继承一个抽象类
抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:    
1.抽象类可以有构造方法,接口中不能有构造方法。  
2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
3.抽象类中可以有普通成员变量,接口中没有普通成员变量 
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型
7. 一个类可以实现多个接口,但只能继承一个抽象类。二者在应用方面也有一定的区别:接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。

下列方法中哪个是线程执行的方法? ()

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

run()
start()
sleep()
suspend()

选A,start是启动线程对象,使之从新建状态转入就绪状态;sleep让线程睡眠一段时间,在此期间线程不消耗CPU资源;suspend使线程挂起,暂停执行, 如果想恢复线程,必须由其他线程调用 resume方法。

关于依赖注入,下列选项中说法错误的是()?

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

依赖注入能够独立开发各组件,然后根据组件间关系进行组装
依赖注入提供使用接口编程
依赖注入使组件之间相互依赖,相互制约
依赖注入指对象在使用时动态注入

依赖注入目的是减少组件之间的耦合度,使开发变得简单。

在 myjsp.jsp 中,关于下面的代码说法错误的是: (  )   
<%@ page language="java" import="java.util.*" errorPage="error.jsp" isErrorPage="false" %> 

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

该页面可以使用 exception 对象
该页面发生异常会转向 error.jsp
存在 errorPage 属性时,isErrorPage 是默认为 false
error.jsp 页面一定要有isErrorPage 属性且值为 true
exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用。对于C项,errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到 errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时, isErrorPage属性值为false
isErrorPage默认值为false,若要当前页面为错误页面就设置isErrorPage=true
事务隔离级别是由谁实现的?

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

Java应用程序
Hibernate
数据库系统
JDBC驱动程序
A,我们写java程序的时候只是设定事物的隔离级别,而不是去实现
B,Hibernate是一个java的数据持久化框架方便数据库的访问
C,事物隔离级别由数据库系统实现,是数据库系统本身的一个功能
D,JDBC是java database connector,也就是java访问数据库的驱动
下列哪一项不属于Swing的顶层容器?()

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

JApplet
JTree
JDialog
JFrame

顶层容器是指可以不能被其他容器包含 ,是容纳其他容器的容器组件
顶层容器包含JApplet、JDialog、JFrame和JWindow及其子类.

JFrame中就可以放Jtree(树形组件)

下列哪一项不属于Swing的顶层容器?()

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

JApplet
JTree
JDialog
JFrame

String str1 = “abc”,“abc”分配在内存哪个区域?

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

字符串常量区
寄存器
用new创建的对象在堆区
函数中的临时变量在栈去
java中的字符串在字符串常量区

下列哪个说法是正确的()

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

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

ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

Arrays.asList(),其将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部类: 


下面哪个语句是创建数组的正确语句?( )

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

float f[][] = new float[6][6];
float []f[] = new float[6][6];
float f[][] = new float[][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];

【Java】Java选择题错题集(一)


Which statement declares a variable a which is suitable for referring to an array of 50 string objects?(Java)

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

char a[][];
String a[];
String[] a;
Object a[50];
String a[50];
Object a[];
在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。
1. String a[]=new String[50];
2. String b[];
3. char c[];
4. String d[50];
5. char e[50];

以下哪个方法用于定义线程的执行体? ( )

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

start()
init()
run()
synchronized()

start()是线程开始执行

run()才是定义线程内部执行的方法

导出类调用基类的构造器必须用到的关键字: ( )


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

this
final
super
static

基类就是父类,导出类就是子类。

在try的括号里面有return一个值,那在哪里执行finally里的代码?

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

不执行finally代码
return前执行
return后执行
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。

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

多态==晚绑定或动态绑定
不要把函数重载理解为多态,因为多态是一种运行期行为,不是编译器行为。
多态:父类的引用指向子类的实例。
比如 Parent p = new Child()
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
如果有,再去调用子类的同名方法。

静态方法特殊,静态方法只能继承,不能覆盖,如果子类有和父类相同的静态方法,只是起到隐藏父类方法的作用。这时候,谁的引用就调用谁的方法。

下列哪项不属于jdk1.6垃圾收集器?

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

Serial收集器
parNew收集器
CMS收集器
G1收集器
【Java】Java选择题错题集(一)

以下关于JAVA语言异常处理描述正确的有?

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

throw关键字可以在方法上声明该方法要抛出的异常。
throws用于抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。
finally语句块是不管有没有出现异常都要执行的内容。
在try块中不可以抛出异常
Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
throw用于抛出异常
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
cacth用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。
以下哪些类是线程安全的()

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

Vector
HashMap
ArrayList
StringBuffer
Properties

A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,非线程安全的StringBuilder
E,Properties类是Hashtable的一个子类,hashTable是线程安全的,所以properotes是线程安全的

有一个源代码,只包含import java.util.* ; 这一个import语句,下面叙述正确的是?   ( )


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

只能写在源代码的第一句
可以访问java/util目录下及其子目录下的所有类
能访问java/util目录下的所有类,不能访问java/util子目录下的所有类
编译错误

导入java.util.*不能读取其子目录的类,因为如果java.util里面有个a类,java.util.regex里面也有个a类,我们若是要调用a类的方法或属性时,应该使用哪个a类呢。所以也应该选C

通过HttpServletRequest. getParameter获取的参数.

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

总是采用UTF-8编码
总是采用lS08859-1编码
由客户端浏览器和Web容器配置共同决定编码
由服务器所在的操作系统决定编码

浏览器根据html中指定的编码格式进行编码,tomcat根据指定的格式进行解码,另外get请求和post请求对编码格式的处理也是不同的

Math.floor(-8.5)=( )

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

(float)-8.0
(long)-9
(long)-8
(double)-9.0
floor: 求小于参数的最大整数。返回double类型-----n. 地板,地面
         例如:Math.floor(-4.2) = -5.0
-----------------------------------------------------------
ceil:   求大于参数的最小整数。返回double类型-----vt. 装天花板;
         例如:Math.ceil(5.6) = 6.0
当编译并运行下面程序时会发生什么结果()
1
2
3
4
5
6
7
8
9
10
11
public class Bground extends Thread{
    public static void main(String argv[]){
        Bground b = new Bground();
        b.run();
    }
    public void start(){
        for(int i=0;i<10;i++){
            System.out.println("Value of i = "+i);
        }
    }
}

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

编译错误,指明run方法没有定义
运行错误,只鞥呢run方法没有定义
编译通过并输出0到9
编译通过,但无输出

首先继承Thread,然后调用run方法,bgroud并没有重写run方法,那么就是调用父类Thread的run方法。

下列哪一项的实现不可以添加为 TextField 对象的监听器()

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

MouseMotionListener
FocusListener
WindowsListener
ActionListener

在单行文本输入区(Textfield)构件上可能发生的事件包括FocusEvent焦点事件,所对应的事件监听器是FocusListener;ActionEvent动作事件,所对应的事件监听器是ActionListener;MouseEvent鼠标事件,所对应的事件监听器是MouseMotionListener;

下面有关JVM内存,说法错误的是?

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

程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

下面有关java hashmap的说法错误的是?

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

HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
HashMap 的实现不是同步的,意味着它不是线程安全的
HashMap通过开放地址法解决哈希冲突
HashMap中的key-value都是存储在Entry数组中的

记住 hashmap采用拉链法解决冲突

关于ThreadLocal类 以下说法正确的是

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

ThreadLocal继承自Thread
ThreadLocal实现了Runnable接口
ThreadLocal重要作用在于多线程间的数据共享
ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
选DE.
1、ThreadLocal的类声明:
public class ThreadLocal<T>
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,
变量被彻底封闭在每个访问的线程中。所以E对。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
 static class ThreadLocalMap {

        static class Entry extends WeakReference<ThreadLocal> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal k, Object v) {
                super(k);
                value = v;
            }
        }

        /**
         * The table, resized as necessary.
         * table.length MUST always be a power of two.
         */
        private Entry[] table;
}
所以D对。
说明输出结果。
1
2
3
4
5
6
7
8
9
10
11
12
package test;
import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    
}

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

SuperTest
SuperTest.class
test.SuperTest
test.SuperTest.class
TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字。这个运行时的类就是当前类,所以
super.getClass().getName()
返回的是test.SuperTest,与Date类无关
要返回Date类的名字需要写super.getClass().getSuperclass()
有关finally语句块说法正确的是( )

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

不管 try 语句块正常结束还是异常结束,finally语句块都是要被执行的
在try语句块或catch语句块中执行到System.exit(0)直接退出程序
finally块中的return语句会覆盖try块中的return返回
finally 语句块在 catch语句块中的return语句之前执行

System.exit(0)。表示将整个虚拟机里的内容都释放,JVM停止工作,此时程序正常退出

如果try语句里有return,那么代码的行为如下: 
1.如果有返回值,就
把返回值保存到局部变量
2.执行jsr指令跳到finally语句里执行
3.执行完finally语句后,返回之前保存在局部变量表里的值

如果try,finally语句里均有return,忽略try的return,而使用finally的return.

Java程序的种类有( )

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

类(Class)
Applet
Application
Servlet

Java程序的种类有:

(a)内嵌于Web文件中,由浏览器来观看的Applet

(b)可独立运行的 Application

(c)服务器端的 Servlet

对于子类的构造函数说明,下列叙述中错误的是( )。

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

子类不能继承父类的无参构造函数。
子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。
在创建子类的对象时,若不含带参构造函数,将先执行父类的无参构造函数,然后再执行自己的无参构造函数。
子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。

构造函数不能被继承,构造方法只能被显式或隐式的调用。

下面有关servlet和cgi的描述,说法错误的是?

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

servlet处于服务器进程中,它通过多线程方式运行其service方法
CGI对每个请求都产生新的进程,服务完成后就销毁
servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

下列 java 程序输出结果为______。
1
2
3
4
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));

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

true,false
true,true
false,true
false,false
对于不同的环境结果不同
程序无法执行

1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
2、两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true

4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

下述有关c++的虚类和java接口的描述,说法错误的是?

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

c++虚类相当与java里面的抽象类
c++中没有接口的概念,与之对应的是纯虚类,对应的是java的接口
纯虚函数和虚函数的区别在于前者只包含定义,而后者还可以包含函数体。
一个抽象类和接口中的方法必须是抽象方法
1、一个子类只能继承一个抽象类(虚类),但能实现多个接口;
2、一个抽象类可以有构造方法,接口没有构造方法;
3、一个抽象类中的方法不一定是抽象方法,即其中的方法可以有实现(有方法体),接口中的方法都是抽象方法,不能有方法体,只有声明;
4、一个抽象类可以是public、private、protected、default,
   接口只有public;
5、一个抽象类中的方法可以是public、private、protected、default,
   接口中的方法只能是public和default
虚virtual;纯虚=0