当前位置:文档之家› CoreJava分班测试试卷答案

CoreJava分班测试试卷答案

一、单项选择题(1分*20题=20分)

1、Java中,在包com.briup.a下定义一个类,要让包com.briup.b下的所有类都可以访问这个类,这个类必须定义为()。

A、protected

B、public

C、private

D、friendly

2、在Java中,下列句不能通过编译()。

A、String s= “join”+ “was”+ “here”;

B、String s= “join”+3;

C、int a= 3+5;

D、float f=5+5.5;

3、在Java中,下列()是不满足命名规范的变量名。

A、汉字

B、$Name

C、_this

D、instanceof

4、在Java中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是()。

A、clsaa A extends B,C

B、class A implements B,C

C、interface A implements B,C

D、class A implements B,implements

5、在Java中,给定某程序的main方法,如下,运行结果为()。public static void main(String [ ]args) {

int i = 0;

System.out.print(i++) ;

System.out.print(++i) ;

}

A、01

B、10

C、02

D、编译错误

6、在Java中,下面哪个语句能正确地创建一个整型的二维数组()。

A. int[][]a=newint[][];

B. inta[10][10]=newint[][];

C. inta[][]=newint[][10];

D. inta[][]=newint[10][10];

7、在Java中下面代码执行完之后i和j的值分别是多少()。public class ExaminationDemo{

public static void main(String[] args){

int i=1;

int j=10;

do{

if(i++>--j) continue;

}while(i<5);

}

}

A、i=6,j=4

B、i=5,j=6

C、编译错误

D、以上都不对

8、在Java中,下面关于构造函数的描述正确的是()。

A、类必须有显式构造函数

B、它的返回类型是void

C、它和类有相同的名称,但它不能带有任何参数

D、以上都不对

9、在Java中,下面关于继承和实现接口的叙述正确的是()。

A、在Java中类只允许单一继承。

B、在Java中一个类只能实现一个接口。

C、在Java中一个类不能同时继承一个类和实现一个接口。

D、在Java中接口只能实现接口。

10、在Java中,下列说法正确的是()。

A、ArrayList继承自List

B、AbstractSet继承自Set

C、HashSet继承自AbstractSet

D、TreeMap实现了HashMap

11、在Java中,下列关于线程的说法正确的是()。

A、创建线程对象,调用start()方法来执行该线程。

B、在自定义线程类时,不用重写run方法就可以运行线程。

C、在创建线程对象时,不能自定义线程名。

D、有t1,t2,t3三个线程,在运行线程的时候是按顺序运行的。

12、单击按钮组件会产生()事件。

A、KeyEvent

B、MouseEvent

C、ItemEvent

D、ActionEvent

13、在Java中,哪个关键字可以将异常抛给方法调用者()。

A、throw

B、finally

C、throws

D、static

14、在Java中,设x=1,y=2,z=3,则表达式y+=z--/++x的值是()。

A、3

B、3.5

C、4

D、5

15、在Java中,占用32位存储空间的是()

A、long ,double

B、long ,float

C、int ,double

D、int ,float

16、在Java中,要创建一个新目录,要使用()类的实例。

A、File

B、FileOutputStrean

C、PrintWriter

D、Directory

17、在Java中,String s=new String(“xyz”);创建了几个对象()。

A、1个

B、1个或2个

C、2个

D、以上都不对

18、在Java中,下面哪个方法可以唤醒其他线程()。

A、yield()

B、notify()

C、wait()

D、sleep()

19、在Java中,byte 数据类型的取值范围是()。A、-256 至255

B、-255 至255

C、-128 至127

D、-127 至128

20、在Java中,以下哪个最准确描述synchronized关键字()。

A、允许两线程并行运行,而且互相通信。

B、保证在某时刻只有一个线程可访问方法或对象。

C、保证允许两个或更多处理同时开始和结束。

D、保证两个或更多线程同时开始和结束。

二、填空题(1分*20空=20分)

1、在Java中,8种基本数据类型是:boolean、byte、char、short、int、float、long、double。

2、在Java中,任何一个Java程序都默认引入了一个包,这个包的名字叫https://www.doczj.com/doc/c216470147.html,ng。

3、在Java中,面向对象编程的三大特性:继承、封装、多态。

4、在Java中,编译源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为:类名.class 。

5、在Java中,创建多线程的途径有两种:创建Thread类的子类和实现Runnable接口。

6、在Java中,TCP 协议提供的是可靠无差错的数据传输,UDP 协议不保证数据传输的可靠性。

7、在Java中,使用关键字synchronized 给对象加互斥锁。

8、在Java中,使用javac命令来编译Java源程序,使用java 命令来执行编译之后生成的字节码文件。

三、简答题(4分*5题=20分)

1、在Java中,try{}里有一个return语句,那么跟在这个try后的finally{}里的代码会不会被执行?如果会被执行,什么时候被执行?在return 前还是后?这样做有什么弊端?

答:会执行,在方法返回调用者前执行。Java允许在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return 语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,这会对程序造成很大的困扰。

2、有一个类Student,该类里面有一个方法public void talk(),如何通过反射来调用该方法,请写出具体代码。

答:代码如下:

第一种方法:

package com.briup.t2016.exam;

class Student{

public void talk(){

System.out.println("Hello Student!!!");

}

}

public classExaminationDemo{

public static void main(String args[]) throws Exception{

Student stu=(Student)Class.forName("com.briup.t2016.exam.Student").newInstance();

stu.talk();

}

}

第二种方法:

package com.briup.t2016.exam;

class Student{

public void talk(){

System.out.println("Hello Student!!!");

}

}

public class ExaminationDemo{

public static void main(String args[]) throws Exception{

Student.class.newInstance().talk();

}

}

3、在Java中,switch是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

答:能;不能;JDK7以后可以。(分析:在JDK5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。)

4、在Java中,操作集合Map的时候,经常会涉及到一个叫做Entry 的类型,这个Entry类型的对象表示的含义是什么?

答:Map是Java中的接口,Map.Entry是Map的一个内部接口,此接口为泛型,定义为Entry,它表示Map中的一个实体,即key-value对。Map提供了一些常用的方法,如keySet(),entrySet()等方法。keySet()方法的返回值是Map中key值的集合,entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

5、下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?

importjava.util.ArrayList;

importjava.util.List;

public class TestClass {

public static void main(String args[]) {

List list = new ArrayList();

test2(list);

System.out.println(list.size()); // 1处

test3(list);

System.out.println(list.size()); // 2处

}

public static void test2(List list) {

list = null;

}

public static void test3(List list) {

list.add(“aaaa“);

}

}

答:两处均不会有异常,运行结果为:1处打印0;2处打印1。分析:将List的对象list作为参数传递给方法时,由于Java只有值传递,所以在test2和test3方法中所操作的list就是主方法中的那个list对象,所以通过这两个方法会改变主方法中的那个list的内容。

四、程序分析题(10分*2题=20分)

1、请认真阅读一下程序,分析并写出该程序的运行结果。

public class ExaminationDemo{

public static void main(String[] args){

System.out.println("运行ExaminationDemo中的main函数,创建D类实例");

new D();

}

}

class E{

E(){

System.out.println("执行E的构造函数");

}

public void funcOfE(){

System.out.println("执行E的函数");

}

}

class F{

F(){

System.out.println("执行F的构造函数");

}

public void funcOfF(){

System.out.println("执行F的函数");

}

}

class B{

E e=new E();

static F f=new F();

public String sb=getSb();

static{

System.out.println("执行B类的static块(B包含E类的成员变量,包含静态F类成员变量)");

f.funcOfF();

}

{

System.out.println("执行B实例的普通初始化块");

}

B(){

System.out.println("执行B类的构造函数(B包含E类的成员变量,包含静态F 类成员变量)");

e.funcOfE();

}

public String getSb(){

System.out.println("初始化B的实例成员变量sb");

return "sb";

}

}

class C extends B{

static{

System.out.println("执行C的static块(C继承B)");

}

{

System.out.println("执行C的普通初始化块");

}

C(){

System.out.println("执行C的构造函数(C继承B)");

}

}

class D extends C{

public String sd1=getSd1();

public static String sd=getSd();

static{

System.out.println("执行D的static块(D继承C)");

}

{

System.out.println("执行D实例的普通初始化块");

}

D(){

System.out.println("执行D的构造函数(D继承C);父类B的实例成员变量sb 的值为:"+sb+";本类D的static成员变量sd的值为:"+sd+";本类D的实例成员变量sd1的值是:"+sd1);

}

static public String getSd(){

System.out.println("初始化D的static成员变量sd");

return "sd";

}

public String getSd1(){

System.out.println("初始化D的实例成员变量sd1");

return "sd1";

}

}

运行结果:

运行ExaminationDemo中的main函数,创建D类实例

执行F的构造函数

执行B类的static块(B包含E类的成员变量,包含静态F类成员变量) 执行F的函数

执行C的static块(C继承B)

初始化D的static成员变量sd

执行D的static块(D继承C)

执行E的构造函数

初始化B的实例成员变量sb

执行B实例的普通初始化块

执行B类的构造函数(B包含E类的成员变量,包含静态F类成员变量) 执行E的函数

执行C的普通初始化块

执行C的构造函数(C继承B)

初始化D的实例成员变量sd1

执行D实例的普通初始化块

执行D的构造函数(D继承C);父类B的实例成员变量sb的值为:sb;本类D的static成员变量sd的值为:sd;本类D的实例成员变量sd1的值是:sd1

2、仔细阅读以下程序,回答问题:

public class MyThread extends Thread{

private static intnum;

public void run() {

for(int i=0;i<10;i++){

synchronized (this.getClass()) {

num++;

System.out.println("num="+num);

if(num==5){

try {

wait();

}catch (InterruptedException e) {

e.printStackTrace();

}

}//if代码块结束

}//synchronized代码块结束

notify();

}//for代码块结束

}//run方法代码块

public static void main(String[] args) {

Thread t1 = new MyThread();

Thread t2 = new MyThread();

t1.start();

t2.start();

}

}

(1)变量num是不是俩个线程t1和t2共享的数据?

(2)俩个线程t1和t2在运行期间争夺的是不是同一把锁对象? (3)程序在运行期间会不会出现异常(假设运行期间线程t1首先拿到了锁对象)?

(4)如果不会出现异常那么运行的结果是怎样的,简单描述一下(5)如果会出现异常,那么在什么地方出现异常,出现异常的原因是什么,以及怎么修改能改正.并简单描述一下改正之后的运行结果。

答:(1)、是共享数据

(2)、是同一把锁对象

(3)、程序在运行期间会出现异常,

wait();代码会出现异常,因为只有锁对象才能调用wait()方法,直接调用wait相当于this.wait(),但是this在这里不是锁对象

notify();代码也会出现异常,也是因为只有锁对象才能调用notify()方法,直接调用notify相当于this.notify(),但是this在这里不是锁对象(4)、wait()这句代码可以修改为this.getClass().wait();

notify()这句代码可以修改为this.getClass().notify();并且把这句代码移动到synchronized代码块的内部,因为在synchronized代码块外部是不能调用wait()或者notify()方法的

(5)、修改之后的运行现象:t1先抢夺到cup使用权以及锁对象,然后开始运行加锁的代码,直到有一次num的值等于5的时候,t1线程执行了this.getClass().wait();方法就从运行状态进到了等待池里面,同时交出锁对象和cup的执行权,然后t2开始运行,由于num是共享的,所有t2运行的时候是从num=6开始运行的,因为代码首先执行了num++,直到t2运行结束的时候调用this.getClass().notify();方法去叫醒的在等待池中的t1线程,接着t1线程醒了进到锁池里面等t2线程执行结束死亡之后,就重新回到就绪状态,拿到cup执行权和锁对象之后,接着刚刚

wait等待的地方往下继续运行,直到运行结束为止。

五:编程题(6分*2题+8分*1题=20分)

1、请写出冒泡排序、选择排序和插入排序的任意两种。(6分)答:冒泡排序:

public class BubbleSort{

public static void main(String[] args){

int[] arr={2,5,-5,98,198,43};

System.out.println("排序前的数组为:");

for(int i=0;i

System.out.print(arr[i]+" ");

}

System.out.println();

inttmp=0;

for(int i=0;i<(arr.length-1);i++){

for(int j=i;j

if(arr[i]

tmp=arr[j];

arr[j]=arr[i];

arr[i]=tmp;

}

}

}https://zhaojunchao-PC:8443/svn/briup/

System.out.println("排序后的数组为:");

for(int i=0;i

System.out.print(arr[i]+" ");

}

}

}

选择排序:

public class SelectSort{

public static void main(String[] args){

int[] array={2,5,-5,98,198,43};

System.out.println("排序前的数组为:");

for(int i=0;i

System.out.print(array[i]+" ");

}

System.out.println();

// 排序

intlen=array.length;

for(int i=0;i

// 记录当前位置

int position=i;

// 找出最小的数,并用position指向最小数的位置

for(int j=i+1;j

if(array[position]>array[j]){

position=j;

}

}

// 交换最小数data[position]和第i位数的位置

int temp=array[i];

array[i]=array[position];

array[position]=temp;

}

System.out.println("排序后的数组为:");

for(int i=0;i

System.out.print(array[i]+" ");

}

System.out.println();

}

}

插入排序:

public class InsertSort{

public static void main(String[] args){

int[] array={2,5,-5,98,198,43};

System.out.println("排序前的数组为:");

for(int i=0;i

System.out.print(array[i]+" ");

}

System.out.println();

// 排序

for(int i=0;i

intinsertVal=array[i];

intinsertIndex=i-1;

while((insertIndex>=0)&&(insertVal

insertIndex--;

}

array[insertIndex+1]=insertVal;

}

System.out.println("排序后的数组为:");

for(int i=0;i

System.out.print(array[i]+" ");

}

System.out.println();

}

}

2、使用递归,编写程序计算1!+2!+3!+…+10!。(6分)

答:public class ExaminationDemo{

public static void main(String[] args){

System.out.println(add(5));

}

public static int recursion(intnum){

if(num==0){ return 1; }

returnnum*recursion(--num);

}

public static int add(intnum){

int sum=0;

for(int i=1;i<=num;i++){

sum+=recursion(i);

}

return sum;

}

}

3、编写PictureClient.java、PictureServer.java和PictureThread.java文件,功能是用多线程实现将一张图片从客户端(PictureClient.java)上传至服务端(PictureServer.java),多线程是指:服务端一直在运行,等待客户端的消息,当有多个客户端同时上传图片时,服务端要能同时处理多个客户端,须考虑程序在运行过程中可能出现的异常。(8分)答:代码如下:

//PictureClient.java

import java.io.*;

https://www.doczj.com/doc/c216470147.html,.Socket;

importjava.util.Scanner;

public class PictureClient{

public static void main(String[] args){

System.out.println("这是客户端。。。");

try{

Socket socket=new Socket("127.0.0.2",9999);

File file=new File("file/client.jpg");

if(!file.exists()){

file.createNewFile();

}

DataOutputStreamdataOutputStreamToServer=new DataOutputStream (socket.getOutputStream());

dataOutputStreamToServer.writeLong(System.currentTimeMillis ());

FileInputStreamfileInputStreamFromFile=new FileInputStream(fi le);

OutputStreamoutputStreamToServer=socket.getOutputStream();

byte[] data=new byte[1024];

intlen=0;

while((len=fileInputStreamFromFile.read(data))!=-1){

outputStreamToServer.write(data,0,len);

}

socket.shutdownOutput();

InputStreaminputStreamFromServer=socket.getInputStream();

byte[] dataFromServer=new byte[1024];

int read=inputStreamFromServer.read(dataFromServer);

System.out.println(new String(dataFromServer,0,read));

fileInputStreamFromFile.close();

socket.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

//PictureServer.java

importjava.io.IOException;

import https://www.doczj.com/doc/c216470147.html,.*;

public class PictureServer{

public static void main(String[] args){

System.out.println("这是服务端。。。");

try{

ServerSocketserverSocket=new ServerSocket(9999);

while(true){

Socket socket=serverSocket.accept();

new Thread(new PictureThread(socket)).start();

}

}catch(IOException e){

e.printStackTrace();

}

}

}

//PictureThread.java

import java.io.*;

import https://www.doczj.com/doc/c216470147.html,.*;

public class PictureThread implements Runnable{

private Socket socket;

publicPictureThread(Socket socket){

this.socket=socket;

}

@Override

public void run(){

String hostAddress=socket.getInetAddress().getHostAddress();

try{

System.out.println(hostAddress+"...connected...");

DataInputStreamdataInputStreamFromClient=new DataInputStream (socket.getInputStream());

longcurrentTimeMillis=dataInputStreamFromClient.readLong();

InputStreaminputStreamFromClient=socket.getInputStream();

FileOutputStreamfileOutputStreamToFile=new FileOutputStream(n ew File("file/server_"+currentTimeMillis+".jpg"));

byte[] data=new byte[1024];

intlen=0;

while((len=inputStreamFromClient.read(data))!=-1){

fileOutputStreamToFile.write(data,0,len);

}

OutputStreamoutputStreamToClient=socket.getOutputStream();

outputStreamToClient.write((hostAddress+"上传成功。。。").getByt es());

fileOutputStreamToFile.close();

socket.close();

}catch(Exception e){

throw new RuntimeException(hostAddress+"上传失败。。。");

}

}

}

选择和填空的答案

一、1~5:BDDBC 6~10:DBDAC 11~15:ADCAD 16~20:A BBCB

二、1:boolean、byte、char、short、int、float、long、dou ble

2:https://www.doczj.com/doc/c216470147.html,ng

3:继承、封装、多态

4:类名.class

5:创建Thread类的子类、实现Runnable接口

6:TCP、UDP

7:synchronized

8:javac、java

相关主题
文本预览
相关文档 最新文档