卓越工程师Java基础考试试卷
一、选择题(每题1分,共20分)
1.用Java虚拟机执行类名为Hello的应用程序的正确命令是( )。D
A.java Hello.classB.Hello.class
C.java Hello.javaD.java Hello
2.编译一个Java程序Hello.java的正确命令形式是( )。C
A.javac HelloB.Javac Hello
C.javac Hello.javaD.javac hello
3.设Hello.html文件嵌入一个Applet类Hello,运行或查看这个Applet的命令是( )。A
A.appletviewer Hello.htmlB.单击Hello.class
C.appletviewer Hello.classD.单击Hello.java
4.设有如下程序段。
int i=1,j=10;
do{
if(i>j) continue;
j--;
}while(++i<6)
这段代码结束后i和j的值是什么?( )A
A.i=6,j=5B.i=5,j=5C.i=6,j=4D.i=5,j=6
5.执行下列代码后,哪个结论是正确的?( )B
String[] s=new String[10];
A.s[10]为””B.s[9]为nullC.s[0]为未定义D.s.length()为10
6.下面对methoda()方法的哪一种声明是包中的类可访问的,并且访问时不需要建立methoda()方法所在类的实例?( )C
A.abstract public void methoda();
B.public abstract double methoda();
C.static void methoda(double dl){}
D.public native double methoda(){}
7.下面哪一种声明的方法迫使它的子类去实现它?( )D
A.public double method();
B.static void method(double dl){}
C.public native double method();
D.abstract public void method();
8.下面的说法正确的是( )。C
A.Java语言里的线程不是对象
B.Java中任何可执行的类都需要main方法
C.Java语言的类都是java.lang.Object的子类
D.double是Java语言的合法标识符
9.下述哪个事件表明在一个java.awt.Component构件上有一个按键被按下?( )A
A.KeyEventB.KeyDownEvent
C.KeyPressEventD.KeyTypedEvent
10.怎样创建一个监听类,当鼠标移动时,它可以接收事件?( )D
A.通过继承MouseListener接口
B.通过实现MouseListener接口
C.通过继承MouseMotionListener接口
D.通过实现MouseMotionListener接口
11.下述哪些语句为真?( )A
A.一个GridLayout布局管理器可以将多个构件定位在多行或多列上
B.一个BorderLayout布局管理器的North位置是放置一个Frame的菜单栏的恰当位置
C.构件在一个GridLayout布局管理器中可以改变单元的大小,可以在单元格中居中摆放
D.一个BorderLayout布局管理器用于定位一个构件时,当容器改变大小时可以保持该构件的大小不变
12.下述哪个选项为真?( )D
A.Error类是一个RuntimeException异常
B.任何抛出一个RuntimeException异常的语句必须包含在try块之内
C.任何抛出一个Error对象的语句必须包含在try块之内
D.任何抛出一个Exception异常的语句必须包含在try块之内
13.下列关于Java线程的说法哪些是正确的?( )D
A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成
B.创建线程的两种方法中,从Thread类中继承的创建方式可以防止出现多父类问题
C.Thread类属于java.util程序包
D.以上说法无一正确
14.有如下程序。
public class Foo{
public static void main(String args[]){
try{return;}
finally{System.out.println(“Finally”);}
}
}
该程序的执行结果是( )。B
A.程序无输出B.程序输出“Finally”
C.代码可以通过编译,但执行时产生异常
D.因为缺少catch块,所以编译出错
15.下面的说法正确的是( )。D
A.应用程序中可以使用的所有语句都可以在Applet中使用
B.Applet程序中可以使用的所有语句都可以再应用程序中使用
C.Applet程序都可以当作应用程序使用
D.System.exit(0)不能在Applet中使用
16.当浏览器从另一个URL返回包含一个Applet对象的页面时,应调用如下哪个方法?( )B
A.init()B.start()C.stop()D.destroy()
17.下面哪些类用于实现TCP/IP客户端和服务器?( )C
A.ServerSocket,DatagramSocketB.Server,Socker
C.Socket,ServerSocketD.DatagramPacket,DatagramSocket
18.下面正确的创建Socket的语句是( )。B
A.Socket a=new Socket(80);
B.Socket b=new Socket(“130.3.4.5”,80);
C.ServerSocket c=new Socket(80);
D.ServerSocket d=new Socket(“130.3.4.5”,80);
19.下面的描述中错误的是( )。B
A.Statement的executeQuery()方法会返回一个结果集
B.Statement的executeUpdate()方法会返回是否更新成功的boolean值
C.使用ResultSet中getString()方法可以获得一个对应于数据库中char类型的值
D.ResultSet中的next()方法会使结果集中的下一行成为当前行
20.如果数据库中某个字段为numberic型,可以通过结果集中的哪个方法获取?( )B
A.getNumberic()B.getDouble()
C.setNumberic()D.setDouble()
二、填空题(每空1分,共20分)
1.main方法的声明修饰符包括________________________。public static void
2.缩写JDK代表________________________。Java开发工具。
3.执行下列代码后的结果是a=________、b=________、c=________、x=________。
int x,a=2,b=3,c=4;
x=++a+b+++c++;
3、4、5、10
4.Java中类成员的访问修饰符有以下3种,:private、public、____________,再加上____________也属于一种限定范围。其中,限定的范围最大的是____________。protected、无修饰符、public
5.________________布局管理器使用的是组件的最佳尺寸。
FlowLayout
6.如果有一个类MyFrame是Frame的子类,能够被不同包中的类所使用,同时又能够为线程提供运行代码(run()方法),请写出该类的声明头部:____________________________________________________________________。
public class MyFrame extends Frame implements Runnable
7.完成下面程序中需要填入的内容。
import java.awt.______________;
import java.______________.Applet;
public class Hello extends Applet{ //一个Applet
public voin paint(Graphics g){
g.drawString(“Hello world!”,20,20);
}
}
Graphics、applet
8.JDBC中ResultSet对象的____________方法可以使游标指向结果集的下一条记录,________________方法可以以布尔值的形式获取结果集的某一列的值。
next()、getBoolean()
9.JDBC中获取Connection对象需要调用________________类的________________方法(只需写出方法名)。这个方法的一种形式带有3个字符串参数,这3个参数的含义分别为____________________、____________________、____________________。
DriverManager、getConnection、数据库URL标识、访问数据库的用户名、访问数据库的密码
三、简答题(每题5分,共30分)
1. 什么是访问控制符?有哪些访问控制符?哪些可以用来修饰类?哪些用来修饰域和方法?
答:访问控制符是一组限定类、域或方法是否可以被程序内和程序之外的部分访问或调用的修饰符。具体的说,类及其属性和方法的访问控制符规定了程序内的其他部分和程序之外其他部分是否有权访问和调用它们。其中程序里的其他部分是指程序中的该类之外的其他类或方法。
类的访问控制符只有一个public。
域和方法的访问控制符有public、private、protected。另外还有一种没有定义专门的访问控制符的情况,即默认情况。
2. 什么是域的隐藏?什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?
答:子类重新定义一个与从父类继承来的域变量完全相同的变量,称为域的隐藏。即子类中定义了与父类同名的域变量,就是子类变量对同名父类变量的隐藏。
方法的覆盖是指子类重定义从父类继承来的一个同名方法,此时子类将清除父类方法的影响。子类可以通过重新定义与父类同名的方法,实现自身的行为。
方法的覆盖与域的隐藏的不同之处在于:子类隐藏父类的域只是使之不可见,父类的同名域仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使父类方法在子类对象中不复存在。
3. 构造方法的继承原则有哪些?继承方式下子类的构造方法如何设计?
答:子类可以继承父类的构造方法,构造方法的继承遵循以下的原则。
l 子类无条件地继承父类的无参数的构造方法。
l 如果子类没有定义构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类定义了构造方法,则在创建新对象时,将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。
l 对于父类的带参数构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。
设计子类的构造方法可选择如下方式。
l 仅调用父类的无参数构造方法。
l 定义自己的一个(或多个)构造方法并调用父类的带参数的构造方法。
4. 简述Java的异常处理机制。
答:Java采取“抛出——捕获”的方式,一旦一个异常现象产生了,Runtime环境和应用程序抛出各种标准类型和自定义的异常,系统就可以捕获这些异常,并一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。
5. 写出使用多线程方法使得一个服务器同时为多个客户端程序服务的基本过程。
答:创建多个客户服务器的过程为:创建两个类,第一个类等待连接,并且一旦建立连接就把一个活跃连接传送到第二个类的一个对象;第二个类扩展Thread,并且与某个客户进行通信。其具体步骤如下:
(1)第一个类在一个特定的端口创建一个新的ServerSocket对象,它的accept方法应该嵌入到一个无限循环中。如果建立起一个连接,则这个类将accept方法返回的Socket传递到扩展Thread的第二个类的一个新的对象中,一个新对象对应一个客户。
(2)第二个类即线程类,在实例化过程中使用Socket作为输入参数。并在与客户的连接上建立输入和输出流。然后在run()内部按照一个的协议用输入输出流处理所有的通信。
6. 归纳一下使用JDBC进行数据库连接的完整过程。
答:(1)加载数据库驱动程序。
(2)建立与SQL数据库的连接。
(3)传送一个SQL命令。
(4)获得执行结果。
四、编程题(每题10分,共30分)
1.编写一个用线程实现数字时钟的应用程序。
import java.awt.*;
import java.util.Calendar;
public class Clock extends Frame implements Runnable{
Thread thread;
Font font=new Font(“Monospaced”,Font.BOLD,18);
int hour,minute,second;
Clock(){
if(thread==null){
thread=new Thread(this);
thread.start();
}
setSize(200,100);
setVisible(true);
}
public void run(){
while(true){
Calendar time=Calendar.getInstance();
hour=time.get(Calendar.HOUR);
minute=time.get(Calendar.MINUTE);
second=time.get(Calendar.SECOND);
try{
thread.sleep(1000);
}catch(Exception e){
}
repaint(1000);
}
}
public void paint(Graphics g){
g.setFont(font);
String time=String.valueOf(hour)+”:”+String.valueOf(minute)
+”:”+String.valueOf(second);
g.drawString(time,50,50);
}
public static void main(String args[]){
Clock c=new Clock();
}
}
2.使用Socket编写一个服务器端程序,服务器端程序在端口8888监听,如果它接到客户端发来的“hello”请求,会回应一个“hello”,对客户端的其他请求不响应。
import java.io.*;
import java.net.*;
public class HelloServer{
public static void main(String args[]) throws IOException{
ServerSocket server=null;
server=new ServerSocket(8888);
Socket ClientSocket=null;
ClientSocket=server.accept();
String line;
BufferedReader br=new BufferedReader(new
InputStreamReader(ClientSocket.getInputStream()));
PrintWriter pw=new PrintWriter(ClientSocket.getOutputStream());
while(true){
line=br.readLine();
if(line.equals(“hello”)){
os.println(“hello”);
os.flush();
}
}
}
}
3.编写一个使用SQL Server连接驱动与SQL Server数据库连接的程序。(可以参考教材例题11.3或11.4)
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
public class Test {
public static void main(String[] srg) {
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载JDBC驱动
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sample"; //连接服务器和数据库sample
String userName = "sa"; //默认用户名
String userPwd = "123456"; //密码
Connection dbConn;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("Connection Successful!"); //如果连接成功控制台输出Connection Successful!
} catch (Exception e) {
e.printStackTrace();
}
}
}
展开阅读全文