一. 填空题(每个1分,共20分)
1.Java中可使用throw关键字来引发用户异常,使用try-catch-finally结构捕获产生的异常。
2. 由于资源不足而阻塞线程方法是:wait(),当资源释放唤醒阻塞线程的方法是notify()或notifyAll()。
3. java语言使用的Unicode字符集含2^16个字符。 4. 给方法加上关键字synchronized表示方法同步。
5. Java数据类型中,long是8(64位)字节,short是2(16位)字节。
6. import语句的作用是:加载已定义好的类或包
/简化类名,除了java.lang包外,其它包都需要显式引入。
7. Java.net包中,支持http协议的用户网页数据提交的类是HttpURLConnection。 8. java类中的方法按属性可分为 类 方法和实例方法两种。
9.AWT所有的组件和容器都从Component类派生。Applet类的父类是:Panel。 10.类变量除了可用对象引用访问外,还可以通过类名来访问。 11.Java中,用final修饰的类则表示该类不能被继承。
12.可支持文件随机读写的流类是RandomAccessFile,支持套接口的客户端数据传递的类是Socket,服务端的类是ServerSocket。 二.选择题(每个1分,共10分)
1. 以下关于abstract的说法,正确的是 D A. abstract只能修饰类 B. abstract只能修饰方法
C. abstract类中必须有abstract方法
D. abstarct方法所在的类必须用abstract修饰 2. 以下关于类继承的说法,正确的是 C A.子类中可见父类中的同名方法
B. 子类中可以直接使用父类的同名方法 C. 子类中使用super才能使用父类同名方法 D. 以上都不对
3. 关于类继承的说法,正确的是 B A. Java 类允许多继承 B. Java接口允许多继承 C. 接口和类都允许多继承 D. 接口和类都不允许多继承
4.关于接口的说法,正确的是 A
A.接口中的方法只能在接口的实现类中实现 B.接口中可定义变量成员 C.接口中不能定义常量 D.以上都不对
5.接口A中有2个方法,接口B中有两个方法,以下正确的是 D A.若接口C继承A,B两个接口,则C一定继承了四个方法
B.若类C实现接口A,B,则C中必须至少实现A、B?中各一个方法
C.若类C要继承接口A,B,则可以定义接口D来继承接口A、B,由类C实现接口D,才能达到目的。
D.以上都不对
6.AWT中容器跟组件的关系是 A Component Container
A.容器类也是一种特殊的组件类 B.组件类也是一种特殊的容器类 C.容器类与组件类没有关系 D.以上都不对
7.以下类中属于Container的是 D A.List B.Canvas C.TextField D.Panel
8.关于Applet类,正确的说法是B
java.lang.Object
java.awt.Component java.awt.Container java.awt.Panel
java.applet.Applet
A.Applet类是java.awt中的类
B.Applet类是Container的间接子类 C.Applet类不是容器类 D.以上都不对
9.关于以下的组件的接口,正确的是D
A. TextArea组件对应的接口是ActionListener B. List组件对应的接口是ActionListener C. Choice组件对应的接口是ActionListener D. 以上都不对
10.以下那种布局是Applet的默认布局 B A.BorderLayout B.FlowLayout C.CardLayout D.GridLayout
三.判断说明(每题2分,共20分,用T和F表示正确和错误,并说明理由) 1.(T)Java程序中没有全程函数,必须全部由类组成。
理由:Java具有面向对象的特点,不兼容过程式计算机语言,面向对象性比C++更彻底 2.(F)Java程序在不同类型的cpu上执行,必须重新编译。
理由:Java具有平台无关性的特点,编译一次就可以运行在任何操作系统上运行 3.(F)一个类的方法,如果没有明确定义,则其访问限制缺省为protected。 理由:缺省为Default
4.(F)Java中的类和接口都不允许多继承。
理由:Java的类不允许多继承,但接口允许多继承 5.(T)char类型可以直接当成整数使用。
理由:char数据类型比int数据类型弱,可以直接转换为int类型 6.(T)当一个对象停止使用后,程序员可以不显式撤销这个对象。 理由:Java的垃圾回收机制会自行处理无用的对象,释放内存 7.(T)Applet本身是个容器,不允许再产生窗口对象。 理由:Applet是顶层容器而且没有main方法
顶层容器:Frame Applet Dialog 以及 JFrame JApplet JDialog 8.(F)start方法可以使线程立刻在物理机上执行。
理由:只是把当前线程加入到线程队列中,由Java虚拟机进行调度
1.观察下面鼠标绘图代码解答下列问题 //程序代码
import java.applet.* import java.awt.*;
import java.awt.event.*;
public class Example extends Applet implements MouseMotionListener { int x=-1,y=-1; public void init()
{ setBackground(Color.green) ; addMouseMotionListener(this); }
public void mouseMoved(MouseEvent e){}
public void update(Graphics g) { paint(g); }//第11行 public void paint(Graphics g) { if(x!=-1&&y!=-1) {g.setColor(Color.red); g.drawLine(x,y,x,y);} }
public void mouseDragged(MouseEvent e) {x=(int)e.getX(); y=(int)e.getY(); repaint(); } }
//代码结束
1)MouseMotionListener接口中处理的鼠标事件有几种,分别是什么(2分) 答:主要有鼠标拖动事件和移动鼠标事件。
mouseDragged(MouseEvent e) 和mouseMove(MouseEvent e)
2)MouseListener接口处理什么鼠标事件?与本程序中实现的mouseMotionListener接口有什么区别?是否可以在同一个类中同时实现这两个接口?(2分)
点击,移入,移出,按下,释放
void mouseClicked(MouseEvent e) Invoked when the mouse button has been clicked (pressed and released) on a component. void mouseEntered(MouseEvent e) Invoked when the mouse enters a component. void mouseExited(MouseEvent e) Invoked when the mouse exits a component. void mousePressed(MouseEvent e) Invoked when a mouse button has been pressed on a component. void mouseReleased(MouseEvent e) Invoked when a mouse button has been released on a component. 可以
3)如果11行不重写update方法,这个程序的运行结果有改变吗,会有什么现象出现?(2分)
答:有,当鼠标拖动时只绘画一小段线,然后很快地消失了,无法进行正常的绘画操作。
4)本例中实际画出图形的语句是哪行?它的功能有什么缺陷(2分) 答:进行画图的语句是:g.drawLine(x,y,x,y);
该函数只根据鼠标所在坐标绘画单点,当鼠标快速移动的时候,绘制出的图形是不连续。
5)在鼠标快速移动的时候,绘制出的图形还是不连续,应该怎么改进?请写出进一步改进的代码(7分)
答:应保存当前左标和新左标,利用g.drawLine(x,y,old_x,old_y)进行绘画。 关键代码:
public class Example extends Applet implements MouseMotionListener { int x=-1,y=-1; int m_x=-1,m_y=-1; public void init() {
setBackground(Color.green); addMouseMotionListener(this); }
public void mouseMoved(MouseEvent e) { x= y= m_x= m_y= -1; } public void update(Graphics g){ paint(g);} public void paint(Graphics g)
{ if(x!=-1&&y!=-1&&m_x!=-1&&m_y!=-1) { g.setColor(Color.red);
g.drawLine(x,y,m_x,m_y); } }
public void mouseDragged(MouseEvent e)
{ m_x=x; m_y=y;
x=(int)e.getX(); y=(int)e.getY(); repaint(); } }
四.综合题
4.(15分)什么是JDBC(1分),它有几种连接数据库的方式(2分)请写出使用数据库的步骤及其代码(5分)。如何实现模糊查询(2分),JDBC在internet上使用有何缺陷,如何克服,举例说明(5分)。
答:P351~352, P358~363
JDBC就是Java Database Connectivity JAVA数据库连接 有4种连接方式:1、JDBC-ODBC桥
2、由本地化方法实现JDBC的API 3、通过中间件实现JDBC的API
4、直接采用java语言实现与特定数据库交互的协议,直接访问数据库 步骤:1、创建数据源,如果有需要的话要设置数据源的各项属性 2、创建命名服务上下文,然后设置命名服务上下文的各项属性 3、在新创建的命名服务上下文中绑定新创建数据源和指定的名称 P588 有例子代码!
SQL语句实现模糊查询
文章分类:数据库
SQL语句实现模糊查询,有些东西老是既不清楚,现在做个笔记吧。
我们可以在where子句中使用like来达到模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很像...”的数据记录,以下是可使用的通配符: % 零或者多个字符
_ 单一任何字符(下划线) \\ 特殊字符
[] 在某一范围内的字符,如[0-9]或者[aeth] [^] 不在某范围内的字符,如[^0-9]或者[^aeth]
后两种,需要Oracle 10g以上使用支持like的正则regexp_like。
其中关于条件,Oralce中SQL语句提供了四种匹配模式:
1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2,_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句: 比如 SELECT * FROM [user] WHERE u_name LIKE '_三_' 只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的; 再比如 SELECT * FROM [user] WHERE u_name LIKE '三__'; 只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三' 将找出“张三”、“李三”、“王三”(而不是“张李王三”);
如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e” SELECT * FROM [user] WHERE u_name LIKE '老[1-9]' 将找出“老1”、“老2”、……、“老9”;
4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
比如SQL Server: SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三' 将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等; Oracle 10g以上的用法为:
select*fromtablewhereregexp_like(name,'[张李王]三'); SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]'; 将排除“老1”到“老4”,寻找“老5”、“老6”、……
注:oracle like 不支持正则,你可以使用支持like的正则regexp_like
5,查询内容包含通配符时
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,\"[\此句一定要在最前 str=replace(str,\"_\str=replace(str,\"%\sqlencode=str end function
在查询前将待查字符串先经该函数处理即可。
因篇幅问题不能全部显示,请点此查看更多更全内容