77范文网 - 专业文章范例文档资料分享平台

北邮《Java技术》期末复习题(含答案)(2)

来源:网络收集 时间:2018-12-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

12. 在编写程序时如何把异常交给方法调用者去处

理? 答:

可以在产生异常的方法内部自己处理异常,也可以不自己处理,而是简单的声明自己可能会抛出哪些类型的异常,如果方法代码执行过程中真的产生异常了,那么就让方法调用者去处理。方法是在方法声明中使用 throws 短语声明该方法可能会抛出哪种类型的异常。 13. 简述异常的传播途径。 答:

在“try … catch … finally”结构中,如果没有一个 catch 子句能够匹配已经产生的异常,则执行 finally 子句(如果存在)。此时,如果仍然没有程序能够处理这个异常,好像发出异常的语句根本没有嵌套在 try 语句中,控制流程将会立即离开当前方法,过早地返回调用当前方法的方法中。如果这个调用语句处于某一个 try 语句范围之内,则将开始执行新一轮的异常匹配操作。 14. 简述异常的层次结构。答:

当有异常发生时, Java 虚拟机会生成异常对象交给运行时系统。异常对象是异常类创建的。Java中的异常类是以一定的层次结构来组织的。下图表示了异常处理的类层次。

15. 简述 Java 中流的概念和作用。答: 直观地说,流就是用于处理输入/输出的字节序列或字符序列。Java 把程序与各种实际设备之间的数据输入输出的处理细节都封装在称为“流”的系统类中。这样,虽然各种实际设备的差别很大,但是我们可以通过 Java 平台提供的“流”类,使用相同的方法来连接数据资源和应用程序。java.io程序包中提供了大量的数据流类,编程人员只要使用相应的数据流类,就可以与相应的设备交换数据。

16. 什么是线程?使用多线程有哪些好处?有会带来

哪些问题?答:

通俗地讲,线程是一个代码执行流。 使用多线程的好处是:(1)多线程为多个代码执行流并发执行提供了可能。(2)多线程程序比多进程程序降低了资源占用要求。

使用多线程也会对系统产生一些不利影响:(1)线程需要占用内存,线程越多,内存占用越多。(2)线程过多,会消耗大量CPU时间来跟踪线程。(3)必须考虑多线程同时访问共享资源的问题,如果没有协调好,就会产

6

生令人意想不到的问题,例如死锁和资源竞争等。(4)因为同一个任务的所有线程都共享相同的地址空间,并共享任务的全局变量,所以程序也必须考虑多线程同时访问的全局变量问题。

17. 试比较Runnable 接口中定义的run() 方法与

Application程序入口 main() 方法有那些相近之处。答:

在 Runnable 接口中定义的惟一的方法是 run(),在线程执行时调用。线程退出 run() 之后,就已经死亡,无法重新启动或复用。不管是正常退出还是由于未捕获异常退出,情况都是如此。在效果上,线程的 run() 方法与 Java 应用程序的 main() 方法作用相同:就是代码的初始入口点。在应用程序中, mian() 控制程序的主流程,在线程中, run() 控制线程任务的处理流程。

从本质上来说,对于一个新创建的线程, run() 方法可以被看成是 main()方法:如同程序是从 main() 方法开始运行一样,新线程就是从其 run() 方法开始运行的。但是 main() 方法从 argv 来获取它的参数(argv 一般是通过命令行来设定的),而新创建的线程是用编程的方式从原始线程获取它的参数的。因此,我们可以通过构造方法、静态实例变量或者程序员设计的其他技术来获得这些参数。

18. Java 线程的生命周期有哪些状态?简述线程状态

转换方式。答:

一个线程从创建到工作到死亡的过程称为线程的生命周期。线程生命周期共有五个状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

新建状态是指创建了一个线程,但它还没有启动。 就绪状态是当前线程处于新建状态后,调用了 start() 方法,线程就处于就绪状态。就绪状态的线程具备了运行条件,但尚未进入运行状态。

运行状态是某个就绪状态的线程获得 CPU 资源,正在运行。

阻塞状态是正在运行的线程遇到某个特殊情况。例如,延迟、挂起、等待 I/O 操作完成等。进入阻塞状态的线程让出 CPU,并暂时停止自己的执行。线程进入阻塞状态后,就一直等待,直到引起阻塞的原因被消除,线程又转入就绪状态,重新进入就绪队列排队。

死亡状态是指线程不再具有继续运行的能力,也不能再转到其他状态。

19. 简述 Java 线程调度机制。答:

Java 的线程调度机制负责调度线程。 Java 的线程调度策略采用抢占式调度,优先级高的线程比优先级低的线程优先执行。在优先级相同的情况下,就按“先到先服务”的原则调度线程。 Java 有专门的调度器,它的任务是使优先级高的线程能始终运行,一旦时间片有空闲,则使具有同等优先级的线程以轮流的方式顺序使用时间片。只有当高级别的线程死亡时(除非用 sleep(int millsecond) 或 wait() 方法让出 CPU 资源),低级别线程才有机会获得 CPU 资源。

线程的优先级用数值表示,数值越大优先级越高(范围1~10)。每个线程根据继承性自动从父线程获得一个线程的优先级,也可在程序中重新设置线程的优先级。对于任务较紧急的重要线程,可安排较高的优先级。相反,则给一个较低的优先级。

20. 什么是守护线程?它和非守护线程有什么不同?

答:

所谓“守护线程(daemon thread)”是指,只要程序还在运行,它就应该在后台提供某种公共服务的线程,但是守护线程不属于程序的核心部分。因此,当所有非守护线程都运行结束的时候,程序也结束了。相反,只要还有非守护线程在运行,程序就不能结束。 事实上,“守护线程”和“非守护线程”本质上并没有什么区别,只是JVM 对其控制的方式有所不同而已。主要表现在:第一,守护线程一般是在后台提供某种服务,而非程序核心部分的线程,所以它的优先级最低。这意味着 JVM 会尽量先调度那些非守护线程运行。第二,程序中所有非守护线程都已结束运行时,程序就结束。

21. 什么是事件?什么是事件驱动工作方式? 答: 事件泛指由用户或系统触发的一个特定操作。例如:用鼠标单击命令按钮,将触发一个按钮的Click事件;用鼠标选择一个菜单项,会产生一个菜单项的选择事件,等等。事件驱动工作方式是指,程序启动后,执行一系列初始化操作,然后处于等待状态。当用户或系统触发某个事件之后,程序马上就去执行与该事件对应的过程。待事件过程执行完毕后,系统又处于等待某事件发生的状态。程序的这种工作方式称为事件驱动工作方式。

具有图形界面的Java程序使用事件驱动工作方式。编写具有图形用于界面的 Java 程序时不仅要创建程序的图形界面,还要编写相应的事件处理代码,这样程序才能响应用户的操作。

22. Java GUI 库代码提供的基本功能有哪些?答: Java 通过提供 GUI 库提供对图形用户界面编程的支持, GUI 库的代码提供了这样一些基本功能:

创建用户界面的“ 控件” 或组件,如滚动条、按钮和

7

标签等。

通过把 GUI 事件(例如单击按钮)和程序程序员编写的事件处理代码关联起来,可以控制组件的动作 。 支持对屏幕上的组件进行分组和布局。

支持访问窗口管理器,指定某个窗口作为输入焦点,读取 JPEG 和其它影响文件 ,以及进行打印等。 23. 如何用分层次的方法看待组件和容器之间的关

系? 答:

容器和组件通常是具有一定的包含关系的。可以按照这样的观点分层次:

顶层容器(不会包含在其它任何容器中的容器),例如JFrame 、JApplet 、JDialog 、JWindow等;

中间容器,例如 JPanel 、JScrollPane 、JSplitPane 、JToolBar 等; 基本控件,例如 JButton 、JComboBox 、JList 、JMenu 、JTextField 等;

可编辑的组件,例如 JColorChooser 、JFileChooser 、JTextArea 等。

在构建程序的图形界面时,一般一次创建顶层容器,中间容器,基本控件和可编辑组件,然后再把基本控件和可编辑组件放到中间容器中,最后再把中间容器放到顶层容器中。

24. Java 是如何管理组件布局的? 答:

在容器中可以放置许多组件,需要合理地安排这些组件在容器中的位置才能使界面方便使用并且美观,这些工作就是组件的布局设计与管理。

每个容器都有一个布局管理器用来管理放到这个容器中的组件的布局。当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。布局管理器可以使我们生成的图形用户界面具有良好的平台无关性。在Java语言中,用布局管理器来管理组件在容器中的布局,而不直接设置组件位置和大小。容器通过选择不同的布局管理器来决定布局。

25. 什么是事件源?什么是事件监听者?它们之间是

如何配合实现事件处理的?答:

Java 中把能够产生事件的组件叫做事件源。这个程序中的按钮就是一个事件源。在Java 中,事件源产生的事件并不是由事件源本身处理,而是由其它对象来处理。用来处理事件的对象叫做事件监听者或事件监听器。 系统把事件源产生的事件交给事件监听者处理,事件监听者使用相应事件监听接口的事件处理方法处理该事件。

26. 要让应用程序在框架窗口关闭后退出,可以使用哪

些办法? 答:

在有着多个框架的程序中,可能不能因为用户关闭了多了框架中的一个就让程序全部退出。默认情况下,当用户关闭一个框架时,该框架会隐藏起来,但应用程序不会终止。要退出程序,可以使用语句

fra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 或者在已注册的 WindowListener 对象的 windowClosing 方法中去退出程序,比如在那里使用语句 System.exit(0);

27. 简述JFrame 框架的基本结构。 答:

JFrame 框架的基本结构。其基本结构如下图所示:

JFrame 窗口中包含一个 JRootPane 类的实例(对象),用这个对象管理放到框架窗体中的元素。JRootPane 面板包含一个 glassPane 面板和一个 JLayeredPane 面板。 glassPane 面板能够截取鼠标移动,而JLayeredPane 面板负责管理 contentPane 内容面板和 JMenuBar 菜单。程序中要使用的按钮、列表框等组件不是直接添加到 JFrame 框架窗口,而是需要添加到内容面板中,而 JMenuBar 对象则负责管理出现在框架窗口顶部的菜单。

28. 简述给窗口添加菜单的基本过程。答:

(1)创建所需要的菜单条对象、菜单对象和菜单项对象。

(2)把菜单项添加到菜单对象。 (3)把菜单添加到菜单条对象。

(4)把装配好的菜单条对象添加的窗口对象。

8

29. 简述 Java 程序与数据库连接的基本方法。答: Java 程序连接数据库的方法有两种:一种是使用 JDBC – ODBC 桥连接器与数据库连接,另一种是使用 JDBC 驱动程序与数据库连接。

用 JDBC – ODBC 桥连接器与数据库连接的基本过程:(1)建立 ODBC 数据源。(2)在程序中使用Class.forName(\加载JDBC – ODBC驱动程序。(3)使用

DriverManager.getConnection(myUrl, user, password)建立数据库连接(4)使用相应语句做其它操作。 使用 JDBC 驱动程序与数据库连接的过程:(1)下载和安装相应的 JDBC 驱动程序。(2)在程序中使用Class.forName(\river\加载JDBC驱动程序。(3)使用

DriverManager.getConnection(myUrl, user, password)建立数据库连接(4)使用相应语句做其它操作。

30. 常见的Java 数据库编程 API有哪些?它们的主

要功能分别是什么? 答:

DriverManage 类是 java.sql 包中用于管理数据库驱动程序的类。它处理驱动程序的加载和建立数据库连接。DriverManage 类的静态方法 getConnection() 用于建立数据库连接。该方法返回一个 Connection 对象。

Connection 类是 java.sql 包中用于处理特定数据库连接的类。Connection 对象表示一个实际的数据库连接,在操作数据库之前应该首先建立数据库连接,取得 Connection 对象。

Statement 类是 java.sql 包中用于在指定的连接中处理 SQL 语句的类。取得 Connection 对象之后,用该对象的 createStatement() 方法创建 Statement 对象,然 后就可以用 Statement 对象执行 SQL 语句操作数据库了。

ResultSet 类是 java.sql 包中用于管理查询结果集的类。Statement 对象执行 SQL 语句时,如果该 SQL 语句是一个查询语句,将返回一个查询结果集, ResultSet 对象就表示一个查询结果集,它管理查询结果记录。

编程题

1. 编写一个字符方式的Application程序。在程序中

定义一个表示雇员的类Employee。在类Employee中定义两个属性,分别表示雇员的姓名和薪酬。定义类Employee构造方法,为两个属性赋初值。另外在类Employee的中分别定义两个获取属性值的成员方法。在程序的主类中创建一个Employee类的对象objE,为该对象的所有成员变量赋初值,并且在标准输出设备上输出它的成员变量的值。请写出此Application程序的源程序代码。 class Employee { private String name; private double salary; Employee(String n, double s) { name = n; salary = s; } String getName() { return name; } double getSalary() { return salary; } }

public class PayrollSystem { public static void main(String[] args) { Employee objE = new Employee(\1287.0); System.out.print(\ System.out.println(\objE.getSalary()); } }

2. 编写一个 Java Application 程序,要求从键盘读入

整数n,计算n!并输出结果。 import java.io.*; public class Test17 { public static void main(String args[]) throws IOException { int n; int i,m=1; String str; BufferedReader buf; buf=new BufferedReader(new InputStreamReader(System.in)); System.out.print(\

9

} 3.

}

str=buf.readLine(); n=Integer.parseInt(str); for (i=1;i<=n;i++) m=m*i;

System.out.println(\

编写一个字符方式的Application程序。在程序中定义一个表示人的类CPerson。在类CPerson中有表示人的姓名和性别的成员变量,有显示人的姓名和性别的成员方法。再定义一个表示教师的子类CTeacher,CTeacher继承自CPerson,同时在CTeacher中增加表示教师职称的成员变量以及显示职称的成员方法。在程序的主类中创建一个CTeacher类的对象tobj,为该对象的所有成员变量赋初值,并且在标准输出设备上输出它的成员变量的值。请写出此Application程序的源程序代码。 class CPerson { String name = new String(); String gender = new String(); void showName() { System.out.println(name); } void showGender() { System.out.println(gender); } }

class CTeacher extends CPerson { String post = new String(); void showPost() { System.out.println(post); } }

public class CPersonApp { public static void main(String[] args) { // TODO Auto-generated method stub CTeacher tobj=new CTeacher(); tobj.name = \ tobj.gender = \ tobj.post = \ tobj.showName(); tobj.showGender(); tobj.showPost(); } }

4. 设有如下接口定义, interface Shapes { public abstract double getArea(); public abstract double getPerimeter(); }

用接口Shapes约定二维几何图形都要提供求面积的功能和求周长的功能。

编写一个直角三角形类,该类实现了Shapes接口。请写出该类的代码。

public class RightAngledTriangle implements Shapes { private double a; private double b; public RightAngledTriangle(double a, double b) { this.a = a; this.b = b; } public double getArea() { return a * b / 2; } public double getPerimeter() { double c = java.lang.Math.sqrt(a * a + b * b); return a + b + c; } }

5. 编写一个 JFrame 窗口程序,要求窗口具有菜单

File,菜单File具有菜单项Open和菜单项Exit。程序运行时,若选择Open,则把当前源程序的内容在窗口的内容面板中显示出来;若选择Exit则退出程序。

import javax.swing.*; import java.awt.*;

import java.awt.event.*; import java.io.*;

public class Ex { public static void main(String[] args) { String str1 = \显示源文件\ MyJFrame mw = new MyJFrame(str1, 400, 300); mw.setVisible(true); } }

class MyJFrame extends JFrame implements ActionListener { JTextArea text = new JTextArea();

10

JScrollPane jsp = new JScrollPane(text);

Container conPane = null; FileReader file; BufferedReader in; // 构造方法 public MyJFrame(String name, int w, int h) { super(); setTitle(name); setSize(w, h); setLocation(100, 100); conPane = getContentPane(); conPane.setLayout(new BorderLayout()); text.setEnabled(false); conPane.add(jsp, BorderLayout.CENTER); JMenuBar mnb = new JMenuBar(); JMenu fileMenu = new JMenu(\ JMenuItem openItem = new JMenuItem(\ JMenuItem exitItem = new JMenuItem(\ openItem.addActionListener(this); exitItem.addActionListener(this); fileMenu.add(openItem); fileMenu.addSeparator(); fileMenu.add(exitItem); mnb.add(fileMenu); setJMenuBar(mnb); /* 准备输入流对象 */ try { File f = new File(\ file = new FileReader(f); in = new BufferedReader(file); } catch (FileNotFoundException e) { text.setText(\文件没找到。\ openItem.removeActionListener(this); } /* 关闭窗口时退出程序 */ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

} 6.

// 实现 ActionListener 中的方法

public void actionPerformed(ActionEvent e) { String s; if (e.getActionCommand() == \ System.exit(0); } else if (e.getActionCommand() == \ try { while ((s = in.readLine()) != null) text.append(s + '\\n'); } catch (IOException exp) { } } }

编写一个字符方式的Application程序。在程序中定义一个表示学生的类Student。Student类的属性为学号、姓名和成绩;方法为增加记录setRecord和得到记录getRecord。setRecord给出学号、姓名和成绩的赋值,getRecord通过学号得到学生的成绩。在程序的主类中创建一个Student类的对象objStu,调用setRecord方法为其属性赋值,然后输出该学生的成绩。请写出源程序代码。 class Student { private int ID; private String name; private float score; public void setRecord(int ID,String name,float score){ this.ID = ID; this.name = name; this.score = score; } public float getRecord(int ID){ if(ID == this.ID) return this.score; else return -1; } }

public class StudentApp { public static void main(String[] args) { Student objStu = new Student(); objStu.setRecord(0, \ float Sco = objStu.getRecord(0); System.out.print(Sco);

11

}

}

7. 按照下面要求编写程序:编写一个 JFrame 窗口程

序,要求窗口的内容面板上有一个按钮,点击按钮可以弹出一个对话框。请写出源程序代码。 import javax.swing.*; import java.awt.*;

import java.awt.event.*;

public class FrameApp implements ActionListener { public static void main(String[] args) { JFrame jframe = new JFrame(\ jframe.setSize(400,100); jframe.getContentPane().setLayout(new FlowLayout()); JButton jbtn1 = new JButton(\按钮\ jbtn1.addActionListener(new FrameApp()); jframe.getContentPane().add(jbtn1); jframe.setVisible(true); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, \ } }

8. 按照下面要求编写程序:编写一个 JFrame 窗口程

序,要求窗口标题栏的文字是“这是一个JFrame窗口程序”。请写出源程序代码。 import javax.swing.*; import java.awt.event.*;

class MyJFrame extends JFrame{ public MyJFrame(String name, int w, int h) { super(); setTitle(name); setSize(w, h); setLocation(100, 100); } }

public class MyJFrameApp { public static void main(String[] args) { String str1 = \ MyJFrame mw = new MyJFrame(str1, 400, 300); mw.setVisible(true); } }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库北邮《Java技术》期末复习题(含答案)(2)在线全文阅读。

北邮《Java技术》期末复习题(含答案)(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/380851.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: