该答案存在错误之处,仅供参考。 ---计科101 郝佳
第一章 Java语言概论 &第二章 Java语言程序设计基础
一、单选题
1.一个Java源程序为Test.java,编译该程序应该使用的命令为( B )。
(A)javac Test (B)javac Test.java (C)java Test (D)java Test.java 编译:javac 文件名.java 运行:java 文件名
2.下面数据类型的定义中错误的是( C )。 (A)int a = 10; (B)double d = 1.2; (C)float f = 1.2; (D)char c = ‘A’;
3.main()方法是Java Application程序执行的入口点,关于main()方法的方法头以下哪项是合法的(B)?
(A)public static void main()
(B)public static void main(String args[]) public static void main(String [ ] args) (C)public static int main(String []args)
(D)public void main(String args[])
4.对一个java源文件 aaa.java,编辑保存后但未编译,在其所在目录下执行 java aaa,则接着会出现什么( A )。
(A)error: cannot read: aaa.java (B)无任何显示
(C)Exception in thread \ (D)程序正常执行并显示
5.给出一段程序,试判断哪个是正确的结果。( D )
public class Test{
public static void main (String args[]){ try{
System.out.print(\
finally{System.out.println(“Finally executing”); } } } (A)无法编译运行,因为没有指定异常 (B)无法编译运行,因为没有catch子句 (C)Hello world
(D)Hello world Finally executing
6.设有int a[]={1,2,3,4,5,6,7,8},i=5; 则执行System.out.println(a[++i])的值为(B) (A)6 (B) 7 (C)4 (D)8
7.下列不属于java语言鲁棒性特点的是( B) (A)java能检查程序在变异和运行时的错误 (B)java能运行虚拟机实现跨平台
(C)java自己操纵内存,减少了内存出错的可能性
(D)java语言还实现了真数组,避免了覆盖数据的可能
二、简答题
1.安装JDK后如何对环境变量进行设置?
安装JDK后,还需要设置路径,即把jdk/bin目录加入到执行路径中,该路径是操作系统寻找本地Java运行环境的目录列表。
右击桌面上【我的电脑】图标,在打开的快捷菜单中选择【属性】命令,则弹出【系统属性】的窗口,选择【高级】选项卡,然后单击【环境变量】按钮。在【环境变量】对话框中选择【系统变量】的path路径,单击【编辑】按钮。弹出【编辑系统变量】对话框,在【变量值】文本框中加入“C:\\Program Files (x86)\\Java\\jdk1.7.0_05\\bin;”(即jdk/bin目录所在路径,注意路径之间用“;”分隔)。 2.常量和变量有什么区别?
常量的值在运行期间恒定不变,常量标识符在程序中只能被引用,而不能被重新赋值。使用常量可以增强程序的可读性、课维护性。
变量是一个用来存取数据的存储单元,其中存储的值可以在程序执行过程中修改。 3.写出下面程序的运行结果
(1)考点:字符串连接方法,String s1=xx;String s2=yy;连接为xxyy方法为xx+yy
public class abc
{ public static void main(String args[ ])
{ AB s = new AB(\ System.out.println(s.toString( )); } }
class AB { String s1; String s2;
AB( String str1 , String str2 ) { s1 = str1; s2 = str2; } public String toString( ) { return s1+s2;} }
Hello!I love JAVA.
(2)
public class abc {
public static void main(String args[ ]) { int i , s = 0 ;
int a[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 }; for ( i = 0 ; i < a.length ; i ++ ) if ( a[i]%3 == 0 ) s += a[i] ; System.out.println(\ } }
s=180
第三章 数组与字符串
一维数组的表示方法: 数据类型 数组名[ ] int score[ ] 数据类型[ ] 数组名 int[] score 二维数组的表示方法:数据类型 数组名[ ][ ] 数据类型[ ][ ] 数组名
一、选择题
1.在注释//Start For loop 处要插入哪段代码可实现根据变量i的值定位数组ia[]的元素(?D) 每个数组都有个属性length,数组(int[] score)长度的表示方法score.length 字符串常用的方法之一:字符串的长度 length( ) public class Lin{ public void amethod(){ int ia[] = new int[4]; //Start For loop
{ ia[i]=i;
System.out.println(ia[i]); } } }
(A)for (int i=0; i < ia.length() -1; i++) (B)for (int i=0; i< ia.length(); i++) (C)for (int i=1; i < 4; i++) (D)for (int i=0; i< ia.length;i++)
2.下列创建二维整型数组正确语句是:(C) (A)int a[][] = new int [10,10]; (B)int a[10][10] = new int [][]; (C)int a[][] = new int [10][10]; (D)int []a[] = new int [10;10];
3.设有如下程序,其调试结果为:(B)??? class Q2 {
public static void main(String[] args) { int[] seeds = {1,2,3,4,6,8}; int n= seeds.length; for (int i = 0; i < 3; i++) for (int k = 0; k< n-1; k++) seeds[k]= seeds[k+1]; for (int i = 0; i System.out.print(\ } } i=0:2 3 4 6 8 i=1:3 4 6 8 8 i=2: 4 6 8 8 8 (A)输出: 1 2 3 4 6 (B)输出: 4 6 8 8 8 (C)输出: 2 3 4 6 8 (D)输出: 2 3 4 6 4.阅读下面代码,他们完成的功能是(B) String[] a={“学生”,”自习”,”教师”,”备课”,”学校”}; for(int i=0; i 5.指出下列运行结果(B) ??? public class Example { String str = new String(\char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex = new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+\ System.out.print(ex.ch); } public void change(String str,char ch[]){ str=\ ch[0]='g'; } } (A)good and abc (B)good and gbc (C)test ok and abc (D)Test ok and gbc 6.下面的程序段执行后输出的结果是(A )。 StringBuffer buf=new StringBuffer(\ buf.insert(7,\ System.out.println(buf.toString()); StringBuffer字符串缓冲区 insert(int offset, String str) 将字符串插入此字符序列中。 (A)Beijing@2008 (B)@Beijing2008 (C)Beijing2008@ (D) Beijing#2008 7.下列不属于整形变量内容的是(C) (A)Byte (B)Short (C)Float (D)long 二、填空题 1.字符串分为两大类,一类是字符串常量,使用 String 类的对象表示;另一类是字符串变量,使用 StringBuffer 类的对象表示。 2.在java语言中,如果数值后没有字母,计算机默认值为 double 类型(double) 3.浮点型数据属于实型数据,属于float和 double 两种(double) 4.标示符是以 字母 、下划线、美元符号为首字母的字符串序列(字母) 三、简答题: 1.String 和StringBuffer的区别 String:字符串常量,该类创建的对象是不允许改变的,即固定长度,内容不变。 StringBuffer:字符串变量,该类创建的对象是允许改变的。 2.== 与 equals 的区别 ==:比较的是两个对象的地址是否相同 Equals:如果没有被重写,比较的是两个对象的地址是否相同。但是在String中,equal 被重写,比较的是两个对象的内容是否相同。 第四章 类与对象 类的成员变量:(1)实例变量:没有static修饰 访问方式:对象名 . 实例变量名 (2)类变量/静态变量:有static修饰 访问方式:类名 | 对象名 . 类变量名 类的成员方法:与上面类似 实例方法可以操作静态变量,但是静态方法不能操作实例变量 抽象类与抽象方法:用关键字abstract修饰的类称为抽象类。用关键字abstract修饰的方法称为抽象方法。 抽象类可以包含抽象方法,也可以包含非抽象方法。但是不能在非抽象类中声明抽象 方法。 最终类:用关键字final声明。 最终类中包含的都是最终方法。而非最终类也可以包含最终方法。 一、选择题 1.以下程序的运行结果为:(C) public class A { static int k=3; public static void main(String[] args) { int k=4; A x1=new A(); x1.k++; A x2=new A(); x2.k++; k++; System.out.println(x1.k); } } (A) 3 (B) 4 (C)5 (D)6 2.编译和运行以下程序结果为:(B) public class A { static int k=3; static int m; 静态变量,默认值为 0 public static void main(String[] args) { k++; if (m==0) System.out.println(k); else System.out.println(B.k); k++; } } class B { static int k=6; } (A)3 (B)4 (C)5 (D).编译错误 3.关于被保护访问控制符protected修饰的成员变量,以下说法正确的是(A) (A)可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类 (B)可以被两种类访问和引用:该类本身、该类的所有子类 (C)只能被该类自身所访问和修改 (D)只能被同一个包中的类访问 4.下列关于修饰符混用的说法,错误的是(D) (A)abstract不能与final并列修饰同一个类 (B)abstract类中不可以有private的成员方法 (C)abstract方法必须在abstract类中 (D)static方法中能处理非static的属性 Static方法不能操作非static变量 抽象类abstract:构造方法、静态成员方法不能被声明为抽象方法。 最终类final:最终类不能被继承。 最终类中包含的都是最终方法。而非最终类中也可以包含最终方法。 构造函数和静态函数以及Final修饰的函数不能使用abstract修饰符 5.下面是有关子类调用父类的构造方法的描述,正确的是(C) (A)子类定义了自己的构造方法,就不会调用父类的构造方法 (B)子类必须通过super关键字调用父类没有参数的构造方法 (C)如果子类的构造方法没有通过super调用父类的构造方法,那么子类会先调用用父类不含参数的构造方法,再调用子类自己的构造方法 (D)创建子类对象时,先调用子类自己的构造方法 子类自动调用父类中的无参构造函数 6.假设Foo类有如下定义,设f是Foo的一个实例,下列哪个调用时错误的(A) Public class Foo { int i; static String s; void imethod() {} Static void smethod() {} } (A) Foo.imethod(); (B) f.imethod(); (C) System.out.println(f.i); (D)Foo.smethod() 7.以下程序调试结果为:(C) class Base{ Base(){ int i = 100; System.out.print (i); } } public class Pri extends Base{ static int i = 200; public static void main(String argv[]){ Pri p = new Pri(); System.out.print(i); } } (A)编译错误 (B)200 (C)100200 (D)100 8 试完成下述程序片段:(D) public class Point { int x,y; public Point(int x,int y) { =x; =y; } ...... } (A)Point.x Point.y (B)无解 (C) x1 y1 (D) this.x this.y 9.以下声明合法的是( C) (A)default String s; default应该去掉 (B)public final static int w( ); (C)abstract double d; (D)abstract final double hyperbolicCosine( ); 二、填空题: 1.Java 原文件中最多只能有一个 父 类,其他类的个数不限。 2. 继承 主要强调子类在父类的基础上取长补短,而 多态 主要强调的是类与类之间的传输。 3. 构造函数 是类中的一个特殊方法,用它来定义对象的初始状态。 4.java语言中 java.lang.Object 是所有类的根。 5.在java语言中有一种叫做 构造函数 特殊方法,在程序中用他来对类成员进行初始化。(构造函数) 6.定义一个类包括定义类头和定义 类体 两个部分。(类体) 7.java是面向对象语言,对象是客观事物的 实体 ,对象与之是一一对应的,他是很具体的概念(实体) 三、简答题 1.简述类和对象的概念以及他们的区别 类:具有相同属性和方法的一组对象的集合。 对象:具有类类型的变量。 区别:类是实体模型的概念,是抽象的,不具体的。而对象则是一个实体,是真实的,具体的。 2.什么是继承?父类与子类的关系分别是什么含义,其关系如何? 继承:从已有类派生出新类的过程称为继承。 父类:已有类称为父类 子类:派生出的新类称为子类。 父类和子类的关系:子类是从父类派生出来的。子类的实例都是父类 的实例,但不能说 父类的实例是子类的实例。 3.什么叫方法重写/覆盖(override)?如果子类要重写/覆盖父类中的某个方法,则子类中的方法声明应该如何进行声明? 方法重写/覆盖:一个类中不同的的方法使用相同的名字,而方法的参数列表在数据类型、 参数个数或者参数次序上有所不同。 子类的成员方法的名字、返回值的类型、参数的个数和类型与父类的某个方法要完全相同。 4.简述public,protected,private的作用,并比较他们的异同? Public: 用于声明共有类成员,该成员可以被所有类访问。 Private:用于声明私有类成员,该成员仅能被当前类的成员访问。 Protected:用于声明保护型类成员,该成员能被当前类及其子类或者当前包中的其他类 访问。 第五章 集合 Map:HashMap,TreeMap Set:HashMap,TreeMap List:ArrayList,LinkedList Collection接口常用方法:iterator 返会在此Collection上进行迭代的迭代器。 Iterator 对Collection进行迭代的迭代器。 一.简答题 1.简述List ,Map,set的区别和联系 List(列表):与数组相似,元素对象可重复。(有序可重复) Map(映射):集合中的元素包含一对键。对象和值的对象,键不重复,值可以重复。 Set(集):相当于数学的集合,元素对象不能重复。(无序不重复) 二.代码编写题 1.读代码,将代码补充完整 _________A_____________//导包 public class Gest{ public static void main(String[] args){ List list = new ArrayList(); __________B___________//从键盘上输入 String name; while(true){ System.out.print(\访客名称:\ name=scanner.nextLine(); if (name.equals(\ __________C_____________//将name添加到list表单里 } System.out.print(\访客名单 \ System.out.println(list); foreach(list); } private static void foreach(List list){ for(int i=0;i A: __import java.util.*_;__________ B:__ Scanner scanner=new Scanner(System.in);____ C:___ list.add(name)_;_____________________ D:____String gest=(String)list.get(i);_____________ E:___ System.out.print(gest.toUpperCase()+\ \______ 2.假设存在一个person.properties文件,文件内容为: #summary #Wed Sep 26 17:02:11 CST 2012 age=10 password=123456 username=Mary 读一下代码,补充完整。 import java.util.*; import java.io.*; public class PropertiesDemo2{ public static void main(String[] args) throws IOException{ A //得到Properties对像 对像名自取 B //加载person.properties文件 System.out.println(props); //从内存集合props中读属性信息,显示在CRT上 System.out.println( C );//输出用户名 System.out.println( D ); //输出密码 System.out.println(props.getProperty(\ //修改获增加内存集合props中属性信息 props.setProperty(\ props.setProperty(\ props.setProperty(\ props.setProperty(\一个骨灰级美女\ //将内存集合props中属性信息,存储到磁盘文件person.properties中 E } } A: Properties props=new Properties(); B: props.load(new FileReader(\ C: props.getProperty(\ D: props.getProperty(\ E: props.store(new FileWriter(\ 3.读下列代码,补充完整。 import java.util.*; public class MapKeyValue{ public static void main(String[] args){ A //得到一个Map对象 map.put(\一\ map.put(\二\ map.put(\三\ Collection sets; //Iterable sets; Iterator it; //创建集合迭代器 System.out.println(\显示键\ sets=map.keySet(); B //遍历sets while( C ){ String element=(String)it.next(); System.out.println(element); } System.out.println(\显示值\ D //将map里的值放到sets里 it=sets.iterator(); while(it.hasNext()){ String element=(String)it.next(); System.out.println(element); } } public static void foreach(Iterable sets){ E //得到一个迭代器对象it while(it.hasNext()){ String element=(String)it.next(); System.out.println(element); } } } A: Map map=new HashMap(); B: it=sets.iterator(); C: it.hasNext() D: sets=map.values(); E: Iterator it=sets.iterator(); 4.读代码,补充完整 import java.util.*; class Student{ private String name; private String number; Student(String name,String number){ this.name=name; this.number=number; } @Override public String toString(){ return String.format(\ } } public class Students1{ public static void main(String[] args){ ____________A_________________//实例化Hashset对象,对象名为set ____________B__________________//将Helen,110添加进set中 for(Object element : set){ System.out.println(element.toString()); } } } A:__ Set set = new HashSet();_________ B:__ set.add(new Student(\__ 第六章:接口与Java API基础 一个类是可以实现多个接口的。 一个类实现了某个接口,就必须重写该类的所有方法。 接口中的所有方法都没有 方法体。 接口中的方法不论是否被声明为public,结果都会按照public类型处理。 接口中的属性都会被隐式的声明为static和final。 接口是一种特殊的抽象类。 一、选择题 1.System类在哪个包中?(D) (A)Java.util (B)Java.io (C)Java.awt (D)Java.long 2.关于接口,正确的是(AB) (A)实现一个接口必须实现接口的所有方法 (B)一个类可以实现多个接口 (C)接口间不能有继承关系 (D)接口等于抽象类 3.下列常用包中,存放用户图形界面的包是(A) (A)Java.awt (B)Java.long (C)Java.util (D)Java.io 4.以下哪些方法不是Collection 接口的方法?(D) (A)iterator (B)isEmpty (C)toArray (D)setText IsEmpty: 如果此 collection 不包含元素,则返回 true。 Iterator:返回在此 collection 的元素上进行迭代的迭代器。 ToArray: 返回包含此 collection 中所有元素的数组。 5.下面的程序输出的结果是( B) public class A implements B { public static void main(String args[]) { int i; A c1 = new A(); i= c1.k; System.out.println(\ } } interface B { int k = 10; } (A)i=0 (B)i=10 (C)程序有编译错误 (D)i=true 6.关于以下程序段的说法,正确的是(A) 1.Class MyListener implements 2. ActionListener,ItemListener{ 3. public void actionPerformed(ActionEvent ae){ 4. System.out.println(\5. public void itemStateChanged(ItemEvent ie){ 6. System.out.println(\7. } 8.} (A)可通过编译 (B)第2行产生编译错误 (C)第3行产生编译错误 (D)第5行产生编译错误 二、填空题: 1在 Java 程序中,通过类的定义只能实现 单 重继承,但用过接口的定义可以实现 多 重继承关系。 2.接口是一种只含有抽象方法或 常量 的一种特殊抽象类。 三、简答题: 1.abstract和interface有什么区别? Abstract:可以使用关键字abstract来声明一个抽象类。 Interface:可以使用关键字interface来声明一个接口。 说出一些常用的类,包,接口,请各举5个(常用包P124) 常用类:Object类,Math类,基本数据类型Integer类,日期Date类,File类 常用包:java.lang包,java.util包,java.awt包,javax.swing包,java.applet包 常用接口:Set接口,List接口, Map接口,Collection接口,Iterator接口 第七章:异常处理 一、选择题 1.java中用来抛出异常的关键字是( C) (A) try (B) catch (C) throw (D) finally 2.关于异常,下列说法正确的是( A ) (A) 异常是一种对象 (B) 一旦程序运行,异常将被创建 (C) 为了保证程序运行速度,要尽量避免异常控制 (D) 以上说法都不对 3.下列程序的执行,说法错误的是( C) class MultiCatch { public static void main(String args[]) { try { int a=args.length; int b=42/a; a=0 int c[]={1}; c[42]=99; 第十行 System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); 第十五行 } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越边界异常:”+e); 第十九行 } } } (A) 程序将输出第15行的异常信息 (B) 程序第10行出错 (C) 程序将输出“b=42” (D) 程序将输出第19行的异常信息 4.下列程序的执行,说法正确的是 (D) class ExMulti { static void procedure() { try { int c[]={1}; c[42]=99; } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越界限异常:”+e); } } public static void main(String args[]) { try { procedure(); int a=args.length; int b=42/a; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } } } (A) 程序只输出第12行的异常信息 (B) 程序只输出第26行的异常信息 (C) 程序将不输出异常信息 (D) 程序将输出第12行和第26行的异常信息 5.java语言中,下列哪一子句是异常处理的出口( C ) (A) try{?}子句 (B) catch{?}子句 (C) finally{?}子句 (D) 以上说法都不对 6.当某一线程正处于休眠状态,而另一个线程用 Thread 类中的 interrupt() 方法中断它时,抛出的异常类型是(C) (A) IOException (B) RuntimeException (C) InterruptedException (D) ClassNotFoundException IOException:当发生某种 I/O 异常时,抛出此异常。 RuntimeException:Java 虚拟机正常运行期间抛出的异常的超类。 InterruptedException:当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该 线程被中断时,抛出该异常。 7.以下关于java异常说法不正确的是( )。 都对吧?? (A) Throwable 类是 Java 语言中Error类和Exception类的父类。 (B) 当异常对象是Exception类(或其子类)的实例时,能通过 Java 虚拟机或者throw 语句抛出该异常对象,并能通过try?catch?finally处理。 (C) 如果只用一个catch块捕捉多个异常对象,则catch 子句中的参数类型应是所有异常对象的父类。 (D) 以上说法都不对。 8.程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于10,使用throw语句显式地引发异常,异常输出信息为“something’s wrong!”, 语句为(C)。 (A) if ( i > 10 ) throw Exception(“something’s wrong!”); (B) if ( i > 10 ) throw Exception e (“something’s wrong!”); (C) if ( i > 10 ) throw new Exception(“something’s wrong!”); (D)if ( i > 10 ) throw new Exception e (\ 9.下列类中在多重catch中同时使用时,( C )异常类应该最后列出。 (A) ArithmeticException (B)NumberFormatException (C) Exception (D)ArrayIndexOutOfBoundsException 二、填空题 1.catch子句都带一个参数,该参数是某个异常的类及其变量名,catch用该参数去与_______对象的类进行匹配。 2.变量属性是描述变量的作用域,按作用域分类,变量有局部变量、类变量、方法参数和_异常处理参数_________。 3.捕获异常要求在程序的方法中预先声明,在调用方法时用_try-catch-finally______________________语句捕获并处理。 4.捕获异常的统一出口通过___finally______________语句实现。 5.java语言的类库中提供了一个___Throwable__________类,所有的异常都必须是它的实例或它子类的实例。 三、解答题 1.Java的异常处理是怎样实现的?异常处理的目的是什么? Java异常处理的实现:java.lang.Exception是异常类,Exception类对象是java程序处理 或抛出的对象,有各种不同的子类分别对应不同类型的异常。当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之对应时,系统都会产生一个相应的该异常类的对象,即产生一个异 常。并由定义的异常处理方法进行捕获并进行及时处理。这就是异常处理机制,是一种对异常进行事后处理的机制。 异常处理的目的:异常处理是捕获及处理运行时错误的一种机制,使程序具有处理运行 错误的能力。即使发生了运行错误,应用程序也能够捕获并即使处理异常,使程序从运行错误中很好地修复并继续运行,而不会导致程序运行非正常终止。 2.说明throw语句与throws子句的区别。 Throw语句:java中通过throw语句主动抛出异常。 Throws语句:Throws是java一种被动异常处理机制。 一旦方法中通过throws声明抛 出异常,异常处理的任务将推卸给它的上层调用者,即throws后的异常将要求调用该方法的程序通过try-catch-finally进行处理。 3.下面程序定义了一个字符串数组,并打印输出,捕获数组超越界限异常。请在横线处填入适当的内容完成程序。 public class HelloWorld { int i=0; String greetings[]= { “Hello world!”, “No,I mean it!”, “HELLO WORLD!!” }; while(i<4){ ___try_________ { System.out.println(greeting[i]); } ___catch______(ArrayIndexOutOfBoundsException e){ System.out.println(“Re-setting Index Value”); i=-1; finally { System.out.println(“This is always printed”); } i++; } } } 第八章:输入输出流 (把书上常用的类及其方法看一遍) InputStreamReader 是字节流通向字符流的桥梁 一、选择题 1.字符流与字节流的区别在于( B ) (A)前者带有缓冲,后者没有 (B)前者是块读写,后者是字节读写 (C)二者没有区别,可以互换使用 (D)每次读写的字节数不同 2.实现字符流的写操作类是( B) (A)FileReader (B)Writer (C)DataInputStream (D)FileOutputStream 3.下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程序当前目录下不存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是( D) FileOutputStream(String name):创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果该文件不存在,就创建该文件。 import java.io.*; public class Test { public static void main(String args[]) { try { String s=\ byte b[]=s.getBytes(); FileOutputStream file=new FileOutputStream(\ file.write(b); file.close(); } catch(IOException e) { System.out.println(e.toString()); } } } (A) ABCABC (B) ABCDE (C) Test (D) ABCDE ABCDE ABCDE 4.现开发一个功能对Date进行格式化,转换为年-月-日格式. 当前日期假设为2010年9月1日,执行此方法得到什么结果(D) package com.test; import java.io.IOException; import java.sql.Date; import java.text.SimpleDateFormat; public class Test { public static String formatDate(){ SimpleDateFormat sdf = new SimpleDateFormat(\ return sdf.format(new Date(0)); } public static void main(String[]args){ System.out.println(formatDate()); } } Date类:从1970-01-01,00点开始计时 (A)编译出错 (B)运行出错 (C)2010-09-01 (D)1970-01-01 5.当处理的数据量很多,或向文件写很多次小数据,一般使用( C)流 (A)DataOutput (B)FileOutput (C)BufferedOutput (D)PipedOutput DataOutputStream :创建一个新的数据输出流,将数据写入指定基础输出流。 FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流 BufferedOutputStream:该类实现缓冲的输出流。 6.当要将一文本文件当作一个数据库访问,读完一个纪录后,跳到另一个纪录, 它们在文件的不同地方时,一般使用(B)类访问。 (A)FileOutputStream (B)RandomAccessFile (C)PipedOutputStream (D)BufferedOutputStream RandomAcessFile:此类的实例支持对随机访问文件的读取和写入。 7.流的传递方式是(B) (A)并行的 (B)串行的 (C)并行和串行 (D)以上都不对 8.获取一个不包含路径的文件名的方法为(A) (A)String getName( ) (B)String getPath( ) (C)String getAbslutePath( ) (D)String getParent( ) 二、填空题 1.java的输入输出流包括_字节流______、字符流、文件流、对象流以及多线程之间通信的管道。 2.DataOutputStream数据流向文件里写数据的方法为__write( )________。 3.文件操作中经常需要的是随机访问, java中的_RandomAccessFile_____类提供了随机访问文 件的功能。 5.文件类__File_____是java.io中的一个重要的非流类,里面封装了对文件系统进行操作的功能。 6.下列程序实现从控制台输入并读取输出字符串,请将程序补充完整 InputStreamReader:是字节流通向字符流的桥梁 BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 import java.io.*; public class CharInput { public static void main(String args[]) throws java.io.IOException { String s; InputStreamReader ir; BufferedReader in; ir=new_ InputStreamReader ___________(System.in); in=new__BufferedReader__________(ir); while ((s=in._readLine()_________)!=null) { System.out.println(“Read;”+s); } } } 三、解答题 1.下列程序实现从当前目录的date.ser文件中读取文件内容并显示出来,请将程 序补充完整。 ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 要从由 ObjectOutputStream 中的示例写入的流读取 FileInputStream fis = new FileInputStream(\ ObjectInputStream ois = new ObjectInputStream(fis); import java.io.*; import java.util.Date; public class UnSerializeDate { UnSerializeDate() { Date d=null; try { FileInputStream f=new A (\ ObjectInputStream s=new ObjectInputStream( B ); d=(Date) s.readObject(); f.close(); } catch(Exception e){ e.printStackTrace(); } System.out.println(\ System.out.println(\ } public static void main(String args[]) { new UnSerializeDate(); } } A: FileInputStream B: f 2.简述字节流和字符流的区别。 字节流:用于读写字节类型的数据,可分为表示输入流的InputStream类及其子类,表 示输出流的OutputStream类及其子类。 字符流:用于读写字符类型 数据。Reader和Write类是字符输入输出流的抽象类。 第九章:图形用户界面 一、选择题 1.java.awt包提供了基本的java程序的GUI设计工具,包含控件、容器和(A) (A)布局管理器 (B)数据传送器 (C)图形和图像工具 (D)用户界面构件 2.所有Swing构件都实现了(A)接口 (A)ActionListener (B)Serializable (C)Accessible (D)MouseListener ActionListener:监听器接口 3.事件处理机制能够让图形界面响应用户的操作,主要包括(D) (A)事件 (B)事件处理 (C)事件源 (D)以上都是 4. 关于使用Swing的基本规则,下列说法正确的是( A ) (A)Swing构件可直接添加到顶级容器中 (B)要尽量使用非Swing的重要级构件 (C)Swing的Jbutton不能直接放到Frame上 (D)以上说法都对 5.下面哪种布局管理器使容器中各个构件呈网格布局,平均占据容器空间(C) (A)FlowLayout (B)BorderLayout (C)GridLayout (D)CardLayout 6.容器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变? ( B ) (A)CardLayout (B)FlowLayout (C)BorderLayout (D)GridLayout 7.以下哪条语句构造了可以显示5行文本、每行大约20个字符的文本框(A ) (A)JTextArea jta=new JTextArea(5,20); (B)JTextArea jta=new JTextArea(20,5); (C)JTextField jtf=new JTextField(5,20); (D)JTextField jtf=new JTextField(20,5); 8.以下哪个类是Jpanel的默认布局管理器(C) (A)BorderLayout (B)CardLayout (C)FlowLayout (D)GridBagLayout 二、简答题 1.AWT组件和Swing组建的特点分别是什么? Awt:抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。 依赖于目标平台,属于重量级组件。 Swing:是一个为Java设计的用户界面开发工具包。不依赖于目标平台,更少的使用本 地的GUI属于轻量级组件。 2.简述事件处理机制。(P186) 首先声明一个事件监听器,将其注册在想要监听的事件源上。当用户在图形界面上进行操作产生事件时,事件源把事件发送给事件监听器。事件监听器对象利用事件对象中的信息决定如何对事件进行处理。 四、代码编写题 1.按下图所示,写出代码可以实现下图的程序 import javax.swing.*; //swing组件 import java.awt.*; //AWT组件 public class SimpleFrame{ public static void main(String args[]){ JFrame frame; JPanel panel; JButton button; frame=new JFrame(); frame.setTitle(\ button=new JButton(\ Font font=new Font(\BOLD,48); //Font 类表示字体java.awt.Font button.setFont(font); panel=new JPanel(); panel.add(button); frame.add(panel); frame.setSize(600,400); //设置Frame的宽和高 frame.setVisible(true); //使Frame变为可见 } 2.读代码,画出代码运行的结果 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BorderLayoutDemo extends JFrame{ private final String names[]={\ private final String locations[]={ BorderLayout.NORTH,BorderLayout.SOUTH, BorderLayout.EAST,BorderLayout.WEST, BorderLayout.CENTER }; private JButton[] buttons=new JButton[names.length]; public BorderLayoutDemo(String title){ super(title); setLayout(new BorderLayout()); Font font=new Font(\ for(int i=0;i add(buttons[i],locations[i]); //将某按钮放在某位置 } setSize(800,800); setVisible(true); } public static void main(String args[]){ new BorderLayoutDemo(\ } } 第十章:多线程 每个运行的程序是一个进程。 一个进程可以包含多个线程。 一、选择题 1.Java怎样实现多线程? (D) (A)继承Thread接口 (B)继承Runnable类 (C)实现Thread类 (D)实现Runnable接口 2.下列说法中,正确的一项是( A ) ?答案是? (A)单处理机的计算机上,2个线程不能并发执行 (B)单处理机的计算机上,2个线程实际能够并发执行 (C)一个线程可以包含多个线程 (D)一个进程只能包含一个线程 3.下列说法中错误的一项是( A ) (A)线程就是程序 (B)线程是一个程序的单个执行流 (C)多线程是指一个程序的多个执行流 (D)多线程用于实现并发 4.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态( D) (A)等待阻塞状态下的线程被notify()唤 (B)等待阻塞状态下的线程被interrput()中断 (C)等待时间到 (D)等待阻塞状态下的线程调用wait()方法 5.下列哪个方法可以使线程从运行状态进入其他阻塞状态( A ) (A)sleep (B)wait (C)yield (D)start 6.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的 (C) (A)sirialize (B)transient (C)synchronized (D)static 7.当( A)方法终止时,能使线程进入死亡状态。 (A)run (B)setPrority (C)yield (D)Sleep 有两个原因会导致线程死亡:(1)因为线程执行完run方法正常退出,线程被终止。 (2)因为一个未捕获的异常终止了run方法而意外终止。 8.哪种原因可以导致线程不能运行,它们是( D )。 (A)等待 (B)休眠 (C)挂起及由于I/O操作而阻塞 (D)以上都是。 9.下列说法中错误的一项是(D) (A)一个线程是一个Thread类的实例 (B)线程从传递给纯种的Runnable实例run()方法开始执行 (C)线程操作的数据来自Runnable实例 (D)新建的线程调用start()方法就能立即进入运行状态 10.下列关于Thread类提供的线程控制方法的说法中,错误的一项是( C) (A)在线程A中执行线程B的join()方法,则线程A等待直到B执行完成 (B)线程A通过调用interrupt()方法来中断其阻塞状态 (C)若线程A调用方法isAlive()返回值为true,则说明A正在执行中 (D)currentThread()方法返回当前线程的引用 Interrupt():测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。 二、解答题 1. java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? 有两种:一、继承Thread类;二、实现Runable接口; 关键字为:synchronized 2. sleep()和wait()有什么区别 ? 3. 线程有哪几个基本状态?它们之间如何转化?简述线程的生命周期。 线程有6种基本状态:New(新建)、Runnable(可运行)、Blocked(阻塞)、Waiting(等 待)、Timed waiting(计时等待)和Terminated(被终止) 线程状态图:P221 线程的生命周期:新建-就绪-阻塞-运行--死亡 五、代码编写题 1根据提示将代码补充完整 import java.lang.*; class MyRunnable implements Runnable { public void run(){ go(); } public void go(){ doMore(); } public void doMore(){ for(int i=1;i<10;i++){ try{______A________}catch(Exception e) {e.printStackTrace();} __________________B_________________ } } } public class ThreadTest_02{ public static void main(String args[ ]) throws InterruptedException{ System.out.println(\主线程开始运行...... 任务:建立2个线程,自己还要做事情! \ Runnable threadJob=new MyRunnable(); Thread jerry=new Thread(threadJob,\米老鼠 \ Thread tom =new Thread(threadJob,\汤姆猫 \ //新建线程 __________C___________ ___________D___________ for(int i=1;i<10;i++){ _________A____________ System.out.println(\主线程获得CPU使用权,在运行 \ } System.out.println(\主线程 ,主线程死亡 \ } } A_____ Thread.Sleep(100);______ __//线程休眠100毫秒 B_ Thread.currentThread().getName()________//输出当前线程的名 C_____jerry.start();__________________________//启动线程 D_____tom.start();_________________________//启动线程 2.编写程序实现线程的同步.假设一个银行的ATM机,它可以允许用户存款也可以取款.现在一个账户上有200元,用户A和用户B都拥有在这个账户上存款和取款的权利.用户A将存入100元,而用户B将取出50元,那么最后账户的存款应该是250元。 第十一章:数据库连接 一、选择题 1.要使用java程序访问数据库,则必须首先与数据库建立连接,在建立连接前,应加载数据库驱动程序,该语句为(A) (A)Class.forName(\(B)DriverManage.getConnection(\ (C)Result rs= DriverManage.getConnection(\(D)Statement st= DriverManage.getConnection(\ 2.要使用java程序访问数据库,则必须首先与数据库建立连接,该语句为( B ) (A)Class.forName(\(B)DriverManage.getConnection(\ (C)Result rs= DriverManage.getConnection(\(D)Statement st= DriverManage.getConnection(\ 3.java程序与数据库连接后,需要查看某个表中的数据,使用下列哪个语句?( A ) (A)executeQuery() (B)executeUpdate() (C)executeEdit() (D)executeSelect() 查看:executeQuery( ) 增,删,修改:executeUpdate( ) 4.Java中,JDBC是指( A ) (A)Java程序与数据库连接的一种机制 (B)Java程序与浏览器交互的一种机制 (C)Java类库名称 (D)Java类编译程序 5.在利用JDBC连接数据库时,为建立实际的网络连接,不必传递的参数是(D ) (A)URL (B)数据库用户名 (C)密码 (D) 数据库名 getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。 6.JDBC的模型对开放数据库连接(ODBC)进行了改进,它包含(D) (A)一套发出SQL语句的类和方法 (B)更新表的类和方法 (C)调用存储过程的类和方法 (D)以上全部都是 7.JDBC中要显式地关闭连接的命令是(A) (A)Connection.close(); (B)RecordSet.close(); (C)Connection.stop(); (D)Connection.release(); 二、填空题 1.java数据库操作流程: 加载驱动程序 、 建立连接 、 创建语句 、 执行语句 、处理结果。 2.Java编程语言前台应用程序使用__JDBC API______来和JDBC驱动管理器进行交互。 3.JDBC驱动管理器使用__Driver接口 ______来装载合适的JDBC驱动。 4.查询数据库的7个标准步骤是:载人JDBC驱动器、定义连接的网址URL、 建立连接、建立声明对象、执行查询或更新、处理结果、_关闭连接_________。 三、解答题 1.简要概述一下操作数据库的流程。 (1) 加载驱动程序 (2) 建立连接 (3) 创建语句 (4) 执行语句 (5) 处理结果 2.使用Java开发任何数据库应用程序都需要哪四个主要接口?请简要说明它们的功能。 Driver、Connection、Statement、ResultSet Driver:每个驱动程序必须实现的接口,JDBC应用程序使用Driver接口装载一个合适的 驱动程序。 Connection:与特定的数据库建立连接(会话),在连接上下文中执行SQL语句并返回结果。 Statement:用于执行静态SQL语句并返回它所生成结果的对象。 ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 3.Statement与Prestatement有什么区别? Statement:用于执行静态SQL语句并返回它所生成结果的对象。 Prestatement:由Statement接口扩展而来的,表示预编译的SQL语句的对象。SQL语句被预编译并存储在Prestatement对象中。然后可以使用此对象多次高效地执行该语句。 六、代码编写题 1.编写实现连接数据库(以oracle为例),若连接成功,则用System.out.println()打印“数据库连接成功”,反之,打印“数据库连接失败”(10分) 已知: User=\ password=\ Url=\jdbc:oracle:thin:@127.0.0.1:1521:XE\ 2.读代码,补全程序(User:system Password:system) import java.sql.*; public class InputStudent0{ public static void main(String args[]) { String url = \ Connection con; String sql; Statement stmt; int varSno; String varSname,varSex,varDept; int varAge; try { A //加载驱动 } catch(java.lang.ClassNotFoundException e) { System.err.print(\ System.err.println(e.getMessage()); } try { B //连接数据库 stmt = con.createStatement(); con.setAutoCommit(false); //向student表中插入一行录记录 sql = \ \ALUES('911','拉登','男','CS',20)\ C //操作SQL语句 try{ Thread.sleep(10000); }catch(Exception e){} //检索student表中的所有记录并获取数据输出。 sql = \ D //等到结果集 System.out.println(\ System.out.println(\ 学号 姓名 性别 所在系 年龄\ System.out.println(\ ------------------------------------------\ while( E ) { varSno = rs.getInt(1); varSname = rs.getString(2); varSex = rs.getString(3); varDept= rs.getString(4); varAge = rs.getInt(5); System.out.println(\ \ \ \ \ \ } System.out.println(\ ------------------------------------------\ //关闭连接。 F con.commit(); con.close(); } catch(SQLException ex) { System.err.println(\ } } } A:__ Class.forName(\__ B:__ con = DriverManager.getConnection(url, \_ C:__ stmt.executeUpdate(sql);__ D:__ ResultSet rs = stmt.executeQuery(sql);___ E:__ rs.next()______ F:__ stmt.close();con.commit();con.close();______ 第十二章:网络编程 TCP:服务程序先选定一个固定的端口号对外发布。 客户程序先按照约定的主机和端口号向服务器程序发送一个要求建立连接的请求。 一、选择题 1.为了获取远程主机的文件内容,当创建URL对象后,需要使用哪个方法获取信息(C)案是???? (A)getPort() (B)getHost() (C)openScream() (D)openConnection() 2.java程序中,使用TCP套接字编写服务端程序的套接字类是(B) (A)Socket (B)ServerSocket (C)DatagramSocket (D)DatagramPacket 3.ServerSocket的监听方法accept()的返回类型是(C) (A)Void (B)Object (C)Socket 答 (D)DatagramSocket 4.当使用客户端套接字Socket创建对象时,需要指定( A) (A)服务器主机名称和端口 (B)服务器端口和文件 (C)服务器名称和文件 (D)服务器地址和文件 5.使用流式嵌套字编程时,为了向对方发送数据,则需要使用哪个方法( C) (A)getInetAddress() (B)getLocalPort() (C)getOutputStream() (D)getIutputStream() 6.使用UDP套接字通信时,哪个方法用于接收数据(B) (A)read() (B)receive() (C)accept() (D)Listen() 7.要取得数据包中的源地址可以用下列哪个语句(A)答案是??? (A) getAddress() (B) getPort() (C) getName() (D) getData() 二、填空题 1.TCP/IP套接字是最可靠的双向流协议,等待客户端的服务器使用 ServerSocket ,而要连接到服务器的客户端要使用 Socket 2.在TCP/IP协议的传输层除了TCP协议之外还有 UDP 协议,几个标准的应用层协议HTTP,FTP,SMTP??使用的都是 UDP , TCP 主要用于需要很强的实时交互性的场合,如 3网络中的每台计算机都必须有一个唯一的标识。计算机通过这个标识来识别接收数据的计算机和发送数据的计算机,从而实现网络中计算机的相互通信。在TCP/IP协议中,这个标示符就是 IP地址 4.IP地址在计算机中用 4 字节,即 32 位的二进制数来表示。 5.Java为网络协议提供的API在 java.net 包中。 三、简答题 1.介绍使用java Socket创建客户端Socket的过程 服务程序先选定一个固定的端口号对外发布服务,客户程序则必须先按约定的主机和端口号向服务程序发送 一个要求建立连接的请求,申请建立 一个到服务程序的连接。 2.简述基于TCP和UDP套接字通信的主要区别 TCP:提供一种面向连接的、可靠的数据流服务。基于TCP的核心概念是socket。在使用 TCP协议进行双向通信时,网络中的两个应用程序之间必须首先建立一个连接,这一连接的两个端点分为称为socket。 UDP:不是基于连接,提供一种简单、高效的传输服务。UDP采用数据报进行通信,数据 报是否可以到达目标,以什么次序到达目标都未经校验。 3.写出DatagramSocket常用的构造方法 DatagramSocket()构造数据报套接字并将其绑定到本地主机上任何可用的端口。 DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 代码编写题 1.设服务器端程序监听端口为8629, 当收到客户端信息后,首先判断是否是“BYE”,若是,则立即向对方发送“BYE”,然后关闭监听,结束程序。若不是,则在屏幕上输出收到的信息,并由键盘上输入发送到对方的应答信息。请编写程序完成此功能。 import java.net.*; import java.io.*; class Server{ public Server() { try { SocketServer A System.out.println(\服务器端已运行,等待客户端连接:\ B //接收客户端的连接请求; BufferedReader in = new BufferedReader(new InputStreamReader( C )); PrintWriter out = new PrintWriter( D ,true); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while(true) {line = (in.readLine().trim()); if( E ) { out.println(\ out.close(); in.close(); socket.close(); br.close(); ss.close(); break;} System.out.println(\客户输入为 :\ System.out.println(\请输入回答:\ line=br.readLine(); //从键盘上输入信息; F //向对方发送信息 } } catch (IOException e){} } public static void main(String[] args) throws Exception{ new Server(); } } A: ServerSocket server = new ServerSocket(8269); B: Socket socket=server.accept(); C: socket.getInputStream() D: socket.getOutputStream() E: line.equals(\ F: out.println(line); 2.读代码,补充完整(注:端口5000) import java.io.*; import java.net.*; import java.util.*; public class MultiThreadServer{ public static void main (String args[]) throws Exception{ //建立Server Socket并等待连接请求。 A ServerSocket server = new ServerSocket(5000); while(true){ System.out.print(\在等待客户端的请求: \ B Socket socket=server.accept(); System.out.print(\连接成功!\ //连接建立,创建一个Server端线程与Client端通信。 Runnable myJob =new MyJob(socket); Thread t=new Thread(myJob); C t.start(); //启动线程 } } } //实现线程接口 class MyJob implements D Runnable { private static int serialNumber=1; private int myNumber= serialNumber++; private Socket socket; public MyJob(Socket socket){ this.socket=socket; } public void run(){ try{ //通过socket获获取网络连接上的InputStream和OutputStream PrintWriter out = new PrintWriter( E socket.getOutputStream() ); out.println(\号服务员为你提供服务! out.flush(); //read client's information BufferedReader in = new BufferedReader( new InputStreamReader( F socket.getInputStream() )); while(true){ String s=in.readLine(); System.out.println(\ + myNumber+\ out.println(myNumber+\号服务员已收到\ out.flush(); if(s.equals(\ } System.out.println(\ +\号服务员同时离开啦,不在提供服务哈~ in.close(); out.close(); G socket.close(); }catch(Exception e){System.out.println(\} } } A:__________________________________ B:___________________________________ C:__________________________________ D:___________________________________ E:___________________________________ F:____________________________________ G:___________________________________ 3.读代码,补充完整(注:端口5000) import java.io.*; import java.net.*; import java.util.*; \ \ public class MyClient{ public static void main (String args[]){ try{ A //发出连接请求 //连接建立,通过Socket获取连接上的输入/输出流。 PrintWriter out = new PrintWriter( B ); BufferedReader in = new BufferedReader( new InputStreamReader ( C )); System.out.println(\ //创建标准输入流,从键盘接收数据。 Scanner sin = new Scanner( D ); //从标准输入中读取一行,发送Server端,当用户输入bye时结束连接。 String s; while(!( E ).equals(\ out.println(s); out.flush(); System.out.println(\ } out.println(s); System.out.println(\ //关闭连接。 out.close(); in.close(); socket.close(); }catch (Exception e) { System.out.println(\ } } } A:__ Socket socket = new Socket(\ B:__ socket.getOutputStream()______ C:__ new InputStreamReader (socket.getInputStream()) ___ D:__ System.in__________________ E:__ !(s=sin.nextLine()).equals(\____________________