Java面向对象编程 练习题
专题1 初识Java 一、填空题
1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是( JAVA SE )、( JAVA EE )、( JAVA ME )。
2.环境变量的设置,若JDK安装在“D:\\JDK”,则应设置Path为(D:JDK\\bin )、classpath为( D:JDK\\lib )。
3.Java源文件的扩展名为( .java ),用Javac编译Java源文件,得到的字节码文件的扩展名为(.class )。
4.如果Java源文件中有多个类,那么只能有一个类是(public class )类。 5.Java程序可以分成两类,即(Java Application )和(java Applet)。
二、选择题
1.作为Java应用程序入口的main方法,其声明格式是(b )
A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是(B)
A.java AppFirst.java B.java AppFirst C.java appfirst.class D.javac AppFirst
3.设有一个Java小程序,源程序名为FirstApplet.java,其HTML文件为FirstApplet.html,则运行该小程序的命令为(D)
A.java FirstApplet B.javac FirstApplet.java C.appletviewer FirstApplet.java D.appletviewer FirstApplet.html 4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的(A)文件夹下。
A.bin B.jre C.include D.doc 5.Java语言是一种 D 语言。 A.机器
B.汇编
C.面向过程的
D.面向对象的
6、Java程序的最基本组成单位是 D 。 A.函数
B.过程 C.变量 D.类
1
三、简答题
1.Java语言有哪些特点? 2.JDK安装完成后,如何设置环境变量? 3.简述Java应用程序和小应用程序的区别。 4.简述Java应用程序的开发过程
专题2 标识符、表达式、数据类型 一、填空题
1.Java逻辑常量有两个:(ture )和(flase )。 2.写出下列表达式的运算结果,设a=2,b=-4,c=true。 (1)-a%b++ -2 (2)a>=1 && a <= 10 ? a : b 2 (3)c^(a>b) (4)(-a)< false -8 -0.4 (5)(double)(a+b)/5+a/b 3、比较两个数相等的运算符是: = = 。 4、Java中的八种基本数据类型分别是:char、 int 、 long 、 shore 、 flaot、 double 、 byte 和 boolean 。 二、选择题 1.下面这些标识符哪个是错误的(C ) A.Javaworld B._sum C.2Java Program D.$abc 2.下列哪一组运算符的优先级顺序是从高到低排列的( B) A.|、&、! B.&、^、|| C.!、%、++ D.<、<<、++ 3、下面哪个赋值语句不会产生编译错误( D) A.char a=?abc?; B.byte b=152; C.float c=2.0; D.double d=2.0; 4.下面哪个单词是Java语言的关键字(D ) 2 A.False B.FOR C.For D.for 5.执行下面程序后,哪个结论是正确的( D) int a, b, c; a=1; b=3; c=(a+b>3 ? ++a : b++); A.a的值为2,b的值为3,c的值为1 B.a的值为2,b的值为4,c的值为2 C.a的值为2,b的值为4,c的值为1 D.a的值为2,b的值为3,c的值为2 6.设各个变量的定义如下,哪些选项的值为true ( C ) int a=3, b=3; boolean flag=true; A.++a = = b B.++a= = b++ C.(++a = = b) || flag D.(++a= =b) & flag 7.表达式(int)6.5/7.5*3的值的类型为(C ) A.short B.int C.double D.float 8.设a, b, x, y, z均为int型变量,并已赋值,下列表达式的结果属于非逻辑值的是( D) A.x>y && bx-y C.y = = ++x D.y+x*x++ 9.下面语句输出的结果为( B) Syste.out.println(5^2); A.6 B.7 C.10 D.25 10.对下面的语句执行完后正确的说法是:( D) int c=?c?/3; System.out.println(c); A.输出结果为21 B.输出结果为22 C.输出结果为32 D.输出结果为33 11.以下选项中变量a已定义类型,合法的赋值语句为( D) A.a = int(y); B.a= =1; C.a = a+1=3; D.++a; 12.执行下列程序段后,ch,x,y的值正确的是:( A) int x=3, y=4; boolean ch; ch=x A.true,3,4 B.true,4,3 C.false,3,4 D.false,4,3 13.下列标识符中,正确的是 B 。 A、1_Back B、$_Money C、$-money D、2-Forward 14.现有一个int类型的整数和一个double类型的浮点数,当它们之间做了加法运算之后,得到的结果类型应该是 B 。 A、int类型 B、double类型 C、float类型 D、long类型 15、以下程序的运行结果为 A 。 public class A { 3 public static void main(String a[]) { int x = 2, y = 5; String z = \ System.out.println(x + y); System.out.println(x + z + \ System.out.println(\ System.out.println(\ } } A.7 B.7 C.25 D.7 25x+z 7x+z 25x+z 25x+z x+y=25 x+y=25 x+y=7 x+y=25 x+z=25 x+z=7 x+z=25 x+z=7 16、设有定义int a=12;则执行a*=12;语句后,a的值为: A 。 A.144 B.12 C.24 D.0 17、下列标识符中,合法的一个是 B C 。 A.$#@!$ B.$我们$ C.$22$ D.2$$2 18、执行下列程序段后,b, x, y的值分别是 B 。 int x=6,y=8; boolean b; b=x>y&&++x==--y; A.true , 6, 8 B.false , 6, 8 C.e, 7, 7 D.false, 7, 7 19、下列程序运行的结果是 D 。 public class A { public static void main(String args[]) { int x = 7%3; while(x){ x--; } System.out.println(x); } } A.0 B.1 C.true D.编译错误 三、编程题 1.使用Math.pow()方法,求出2的32次方的值。 4 专题3 流程控制语句 一、填空题 1.在switch语句中的表达式的类型必须是( int型 )或者(与int相容的类型[byte,char,long,short] )。 2.break在循环语句中的作用是(跳出当前循环 )。 3.分支语句包括( if)和( switch)。 4.while循环语句的循环次数(0或者不限 ),do-while语句的循环次数( 至少一次 ),for语句的循环次数(0或者不限 )。 二、选择题 1.下面程序片段输出的是什么( C) int a=3, b=1; if(a=b) Syste.out.println(“a=”+a); A.a=1 B.a=3 C.编译错误,没有输出 D.正常运行,但没有输出 2.下面语句执行后,x的值为(C ) int a=4, b=5, x=3; if(++a==b) x=x*a; A.3 B.12 C.15 D.20 3.请看下面的程序代码: if(x<0) {Syste.out.println(“first”);} else if(x<20) {Syste.out.println(“second”);} else {Syste.out.println(“third”);} 当程序输出“second”时,x的范围是( B) A.x<=0 B.x<20 && x>=0 C.x>0 D.x>=20 4.请看下面的程序代码: switch(n){ case 0: Syste.out.println(“first”); case 1: case 2: Syste.out.println(“second”); break; default: Syste.out.println(“end”); 5 } 当n为何值时,程序段将输出字符串”second”( D ) A. 0 B.1 C.2 D.以上都可以 5.下列语句执行后,j的值是(D ) int j=3, i=3; while(--i!=i/j) j=j+2; A. 4 B.5 C.6 D.7 6.下列语句执行后,x的值是(D) int x=2 ; do{x+=x ; }while(x<17); A. 4 B.16 C.32 D.256 7.执行下列语句后,i、j的值是( B) int i=1, j=8; do{ if(i++>--j) continue; }while(i<4); A. i=4, j=5 B.i=5,j=4 C.i=5,j=5 8.下列语句执行后,k的值是( B ) int j=4, i, k=10; for(i=2; i!=j; i++) k=k-i; A. 4 B.5 C.6 D.7 9.下列语句执行后,c的值是(C ) char c=?\\0?; for(c=?a?; c if(c>=?e?) break; } A. ?e? B.?f? C.?g? D.?h? 10.若变量都已经正确说明,则以下程序段输出为( A ) a=10; b=50; c=30; if(a>b) a=b;b=c; c=a; System.out.println(“a=”+a+” b=”+b+” c=”+c); A.a=10 b=50 c=10 B.a=10 b=30 c=10 C.a=50 b=30 c=10 D.a=50 b=30 c=30 D.i=5,j=6 6 11.以下程序段输出是(D ) int x=1,y=0,a=0,b=0; i=(--a==b++)? - -a : ++b; j=a++; k=b; System.out.println(“i=”+i+” ,j=”+j+” ,k=”+k); 2 -1 2 A.i=2,j=1,k=3 B.i=1,j=1,k=2 C.i=4,j=2,k=4 D.i=2,j=-1,k=2 12.以下程序的输出是( B ) int x=1,y=0,a=0,b=0; switch(x){ case 1: switch(y){ case 0: a++;break; case 1: b++;break; } case 2: a++;break; case 3: a++;b++; } System.out.println(“a=”+a+”,b=”+b); 2 0 A.a=1, b=0 B.a=2,b=0 C.a=1, b=1 D.a=2, b=2 13.以下程序段输出是( C ) int i=0,j=0,a=6; if ((++i>0) || (++j>0 )) a++ : System.out.println(“i=”+i+” ,j=”+j+” ,a=”+a); A.i=0,j=0,a=6 B.i=1,j=1,a=7 C.i=1,j=0,a=7 D.i=0,j=1,a=7 14、下列程序运行的结果是 C 。 public class A{ public static void main(String args[]){ char c = 'd'; for (int i = 1; i <= 4; i++) { switch (i){ case 1: c = 'a'; System.out.print(c); break; case 2: 7 } } } c = 'b'; System.out.print(c); break; case 3: c = 'c'; System.out.print(c); default: System.out.print(\ } A.! B.dbc! C.abc! D.abc!! 三、编程题 1.输入4个数,将这4个数按从小到大输出。 2.输入一个年份值,判断是否是闰年,输出相应的信息。 3.输入一元二次方程系数,若有实数根,求根并输出,否则输出“不是二次方程或没有实数根”的信息。 4.编写程序,计算邮局汇款的汇费:如果汇款金额小于100元,汇费为1元,如果金额在100元与500元之间,按1%收取汇费,如果金额大于500元,汇费为50元。 5.求某年某月的天数. 6.求从1到100之间所有奇数的平方和(用for、while和do??while编写程序)。 7.求S=1+2+3+?+n之和,S<1000的最大n的值。 8. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 9.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个,到第十天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少? 10.输出九九乘法表。 11.输出1000之内的所有完数。所谓完数指的是:如果一个数恰好等于它的所有因子之和,这个数就称为完数。 12.输出100以内的全部素数。 13.求1!+2!+3!+??+10! 14.求2+22+222+2222+22222。 8 专题4 数组 一、填空题 1.定义一个整型数组y,它有5个元素分别是1,2,3,4,5.用一个语句实现对数组y的声明、创建和赋值:(int y []={1,2,3,4,5} )。 2.设有整型数组的定义:“int x[][]={{12,34},{-5},{3,2,6}};”则x.length的值为(9 ) 3.求取二维数组a[][]的第i行元素个数的表达式是( )。 4、一个一维数组有10个元素,则该数组可用的下标范围是 0-9 。 5、String S[]={“安徽”, “江苏”, “山东”};则S[1]的值是: 江苏 。 6、当声明一个数据组int arr[]=new int[5];时,这代表这个数组所保存的变量类型是 整形 ,数组元素下标的使用范围是 0-4 。 二.选择题 1.设有定义语句“int a[]={66,88,99};”,则以下对此语句的叙述错误的是( C) A.定义了一个名为a的一维数组 B.a数组有3个元素 C.a数组的元素的下标为1~3 D.数组中的每个元素是整数 2.设有定义“int[] a=new int[4];”则数组a的所有元素是(B ) A.a0、a1、a2、a3 B.a[0]、a[1]、a[2]、a[3] C.a[1]、a[2]、a[3]、a[4] D.a[0]、a[1]、a[2]、a[3]、a[4] 3.下面哪个选项正确地声明了一个字符串数组 (C ) A.char[] str B.char[][] str C.String[] str D.String[10] str 4、假设有这样的数组创建:int a[]={1,2,3,4,5,6,7};则该数组长度为 D 。 A.4 B.5 C.6 D.7 5、下列二维数组的创建中错误的是 A 。 A.int a[][]=new int[3][] ; B.int[][] a=new int[3][4] ; C.int a[][]={{1,2},{3,4}} ; D.int [][] a=new int[][]; 9 三、编程题 1.编写一个程序,计算一维数组中的最大值、最小值及其差值。 2.将一个数组中的数逆序重新存放。 3.已知数组(12,23,26,45,58,60)是有序的,输入一个数x,将它插入到数组中,保证数组仍然是有序的。 4.输出杨辉三角形。如: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ?? 5.求一个二维数组的每行最大数。 **专题5 面向对象 一、填空题 1. 如果一个方法不返回任何值,则该方法的返回值类型为 void 。 2. 如果子类中的某个方法名、返回值类型和_传递参数_______与父类中的某个方法 完全一致,则称子类中的这个方法覆盖了父类的同名方法。 3. 接口中所有的属性均为_公有__、__静态_____和_常量_____的 4. 方法是一种仅有方法声明,没有具体方法体和操作实现的方法,该方法必 须在 类之中定义。 5. 在Java程序中,通过类的定义只能实现 重继承,但通过 的定义可以 实现多重继承关系。 6. 一般Java程序的类主体由两部分组成:一部分是 成员变量 ,另一部分是 成员方法 。 7. 分别用 class 关键字来定义类,用 关键字来分配实例存储空间。 8. 当一个类的修饰符为 private 时,说明该类不能被继承,即不能有子类。 9. 在Java中,能实现多重继承效果的方式是 。 10 二、选择题 1. 方法内定义的变量( )。 A.一定在方法内所有位置可见 B.可能在方法的局部位置可见 C.在方法外可以使用 D.在方法外可见 2. 方法的形参( D)。 A.可以没有 B.至少有一个 C.必须定义多个形参 D.只能是简单变量 3. return语句(D)。 A.不能用来返回对象 B.只可以返回数值 C.方法都必须含有 D.一个方法中可以有多个 4. main()方法的返回值类型是(C。 A.boolean B.int C.void D.static 5. 编译并运行下面的程序,运行结果是( )。 public class A{ public static void main(String args[]){ A a=new A(); a.method(8); } void method(int i){ System.out.println(“int: ”+i); } void method(long i){ System.out.println(“long: ”+i); } A.程序可以编译运行,输出结果为:“int: 8” B.程序可以编译运行,输出结果为:“long: 8” C.程序有编译错误,因为两个method()方法必须定义为静态(static)的 D.程序可以编译运行,但是没有输出 6. 能作为类及其成员的修饰符是( )。 A.interface B.class C.protected D.public 7. 下列方法定义中,方法头不正确的是( )。 A.public static x(double a){…} B.public static int x(double y){…}C.void x(double d){…} D.public int x(){…} 8. 构造方法在( )时被调用。 11 A.类定义时 B.使用对象的变量时 C.调用对象方法时 D.创建对象时 9. 下列哪个类声明是正确的( )。 A.public abstract class Car{…} B.abstract private move(){…} C.protected private number; D.abstract final class H1{…} 10. 下列不属于面向对象程序设计的基本特征的是( )。 A.抽象 B.封装 C.继承 D.静态 11. 请看下面的程序段 class Person{ String name,department; int age; public Person(String n){name=n;} public Person(String n,int a){name=n; age=a;} public Person(String n, String d, int a ){ //doing the same as two arguments version if constructer } 下面那个选项可以添加到// doing the same??处( ) A.Person(n,a) B.this(Person(n,a)) C.this(n,a) D.this(name.age) 12. 请看下面的程序段 class Test{ private int m; public static void fun(){ //some code } } 方法fun()如何来访问变量m( ) A.将private int m 改成protected int m B.将private int m 改成public int m C.将private int m 改成static int m D.将private int m 改成int m 13. 有一个类A,对于其构造函数的声明正确的是( )。 A.void A(int x){?} B.public A(int x){?} C.A A(int x){?} D.int A(int x){?} 14. 请看下面的程序段 public class Test{ long a[]=new long[10]; pubic static void main(String args[]){ System.out.println(a[6]); } } 哪一个选项是正确的( )。 12 A.不输出任何内容 C.当编译时有错误出现 A.extends C.this 16. 声明为static的方法不能访问( )类成员。 B.输出0 D.当运行时有错误出现 B.final D.finalize B.子类 D.用户自定义类 15. 关键字( )表明一个对象或变量在初始化后不能修改。 A.超类 C.非static 17. 定义类A如下: class A{ int a,b,c; public void B(int x,int y, int z){ a=x;b=y;c=z;} } 下面对方法B的重载哪些是正确的( )。 A.public void A(int x1,int y1, int z1){ a=x1;b=y1;c=z1;} B.public void B(int x1,int y1, int z1){ a=x1;b=y1;c=z1;} C.public void B(int x,int y){ a=x;b=y;c=0;} D.public B(int x,int y, int z){ a=x;b=y;c=z;} 18. 编译运行下面的程序,结果是( )。 public class A{ public static void main(String args[]){ B b=new B(); b.test(); } void test(){ System.out.print(“A”); } } class B extends A{ void test(){ super.test(); System.out.print(“B”); } } A.产生编译错误 19. 已知类关系如下: Class Employee{} Class Manager extends Employee{} Class Director extends Employee{} 则下列语句正确的是:( )。 B.代码可以编译运行,并输出结果:AB C.代码可以编译运行,但没有输出 D.编译没有错误,但会产生运行时异常 A.Employee e=new Manager(); B.Director d=new Manager(); 13 C.Director d =new Employee (); D.Manager m=new Director (); 20. 接口是Java面向对象的实现机制之一,以下说法正确的是( )。 A.Java支持多重继承,一个类可以实现多个接口 B.Java只支持单重继承,一个类可以实现多个接口 C.Java只支持单重继承,一个类可以实现一个接口 D.Java支持多重继承,但一个类只可以实现一个接口 21.下列方法的声明中不合法的是 。 A.float area( ){…} C.area{…} B.void area( ){…} D.int area(int r){…} 22、下面哪个包是编程时不需要导入就可以直接使用的 。 A.java.net B.java.lang C.java.sql D.java.util 23、调用构造方法是在 。 A.类定义时 C.调用对象的方法时 B.创建对象时 D.使用对象的变量时 24、在子类构造方法的哪个地方可以调用其父类的构造方法 。 A.任何地方 B.构造方法的第一条语句 C.构造方法的最后一条语句 D.无法在子类构造方法中调用父类的构造方法 25、关于Java中的继承,下列说法错误的是 。 A.继承是面向对象编程的核心特征,通过继承可以更有效地组织程序结构。 B.继承使得程序员可以在原有类的基础上很快设计出一个功能更强的新类,而不必从头开始,避免了工作上的重复。 C.每一次继承时,子类都会自动拥有父类的属性和方法,同时也可以加入自己的一些特性,使得它更具体、功能更强大。 D.继承一般有多重继承和单一继承两种方式,在单一继承中每一个类最多只有一个父类,而多重继承则可以有多个父类。Java中的类都采用多重继承。 26、当方法中的局部变量与成员变量同名时,必须使用下列哪一个关键字指出成员变量 。 A.static B.super C.this D.new 27、什么样的方法不能被重写 。 14 A.私有(private)方法 B.最终(final)方法 D.以上都不对 C.受保护(protected)的方法 28、下列有关抽象类与接口的叙述中正确的是哪一个 。 A.抽象类中必须有抽象方法,接口中也必须有抽象方法 B.抽象类中可以有非抽象方法,接口中也可以有非抽象方法 C.含有抽象方法的类必须是抽象类,接口中的方法必须是抽象方法 D.抽象类中的变量定义时必须初始化,而接口中不是 29、从下列程序中你发现了几处错误 。 abstract class A{ abstract void f(){}; public abstract void k(); } class B extends A{ protected void f(){ } void k(){ System.out.print(\ } public static void main(String[] args) { A a=new A(); a.f(); a.k(); } } A.1 B.2 C.3 30、下列程序运行的结果是 。 interface InterfaceA{ String s=\ void f(); } class ClassA implements InterfaceA{ public void f(){ System.out.print(s); } } class ClassB{ void g(InterfaceA a){ a.f(); } } D.4 15 public class E { public static void main(String[] args) { ClassB b=new ClassB(); b.g(new ClassA()); } } A.good B.编译正确,但无运行结果 D.以上都不对 C.编译错误:b.g(new ClassA()) 31、下列类的声明中不合法的是 。 A.class People(){?} C.class A{?} B.class 植物{?} D.public class 共有类{?} 32、能作为类的修饰符, 也能作为类成员的修饰符的是 。 A.public B.extends C.Float D.static 33、试完成下述程序片段 。 public class Point{ int x,y; public Point(int x,int y){ ( )=x; ( )=y; } ...... } A.Point.x Point.y C.super.x super.y B.this.x this.y D.无解 34、在JAVA 中,下列说法正确的是: 。 A.一个子类可以有多个父类,一个父类也可以有多个子类 B.一个子类可以有多个父类,但一个父类只可以有一个子类 C.一个子类只可以有一个父类,但一个父类可以有多个子类 D.上述说法都不对 35、Father和Son是两个java类,下列哪一选项正确的标识出Father是Son的父类? A.class Son implements Father C.class Father extends Son B.class Father implements Son D.class Son extends Father 36、重载指的是方法具有相同的名字,但这些方法的参数必须不同。下列哪种说法不属于方法参数的不同 。 16 A.形式参数的个数不同。 C.形式参数的名字不同。 B.形式参数的类型不同。 D.形式参数类型的排列顺序不同。 37、下列有关抽象类与接口的叙述中正确的是哪一个 。 A.抽象类中必须有抽象方法,接口中也必须有抽象方法 B.抽象类中可以有非抽象方法,接口中也可以有非抽象方法 C.含有抽象方法的类必须是抽象类,接口中的方法必须是抽象方法 D.抽象类中的变量定义时必须初始化,而接口中不是 38、从下列程序中你发现了几处错误 。 abstract class A{ abstract void f(){}; public abstract void k(); } class B extends A{ protected void f(){ } void k(){ System.out.print(\ } public static void main(String[] args) { A a=new A(); a.f(); a.k(); } } A.1 B.2 C.3 D.4 39、关于接口的定义和实现,以下描述正确的是 。 A.接口定义的方法只有定义没有实现 B.接口定义中的变量都必须写明final和static C.如果一个接口由多个类来实现,则这些类在实现该接口中的方法时采用统一的代码 D.如果一个类实现接口,则必须实现该接口中的所有方法,但方法未必申明为public 三、阅读程序题 1、写出运行结果: 。 17 public class Computer{ String mainbord,cpu; public Computer(String s1,String s2){ mainbord=s1; cpu=s2; } public static void main(String[]args){ Computer c=new Computer(\华硕\ System.out.println(\ } } 2、写出运行结果: 。 public class ExamA { private static int arr[] = new int[5]; public static void main(String args[]) { for(int i=arr.length-1;i>=0;i--) arr[i] = 2*i+1; String output = \ int sum = 0; for(int i=0;i output += \ } output += \ System.out.println(output); System.exit(0); } } 3、写出运行结果: 。 public class Person{ String name; int age; public Person(String name,int age){ this.name=name; this.age=age; } public static void main(String[]args){ Person c=new Person(\ System.out.println(c.name+\} } 4、写出运行结果: 。 18 public class abc{ public static void main(String args[ ]) { SubSubClass x = new SubSubClass(10 , 20 , 30); x.show(); } } class SuperClass{ int a,b; SuperClass(int aa , int bb){ a=aa; b=bb; } void show( ){ System.out.println(\ b=\} } class SubClass extends SuperClass{ int c; SubClass(int aa,int bb,int cc){ super(aa,bb); c=cc; } } class SubSubClass extends SubClass{ int a; SubSubClass(int aa,int bb,int cc){ super(aa,bb,cc); a=aa+bb+cc; } void show(){ System.out.println(\ b=\} } 5.下面是一个类的定义,请将其补充完整 class ______{ String name; int age; Student(______ name, int a){ _____.name=name; age=a; } } 6.下面是一个类的定义,请将其补充完整 class ______{ c=\ 19 String s; ______ int a=3; A(String s){ this.s=s; } static int getA(){ return a; } } 四、编程题 1.按要求编写一个Java应用程序: (1)定义一个接口CanCry,描述会吼叫的方法public void cry()。 (2)分别定义狗类(Dog)和猫类(Cat),实现CanCry接口。实现方法的功能分别为:打印输出“我是狗,我的叫声是汪汪汪”、“我是猫,我的叫声是喵喵喵”。 (3)定义一个主类G, ①定义一个void makeCry(CanCry c)方法,其中让会吼叫的事物吼叫。 ②在main方法中创建狗类对象(dog)、猫类对象(cat)、G类对象(g),用 g调用makecry方法,让狗和猫吼叫。 2、编写一个Java程序,并满足如下要求: 1)编写一个Car类,具有: 属性:品牌(mark)——String类型 功能:驾驶(void drive( )) 2)定义Car类的子类SubCar,具有: 属性:价格(price)、速度(speed)——int型 功能:变速(void speedChange(int newSpeed)),把新速度赋给speed 3)定义主类E,在其main方法中创建SubCar类的两个对象:aodi和benchi的对 象并测试其对象的特性。 4)输出效果如下: 20 3.某公司正进行招聘工作,被招聘人员需要填写个人信息,编写“个人简历”的封装类。包括如下属性和对属性进行操作的方法。 String xm;// 姓名 String xb;// 性别 int nl;// 年龄 String jtzz;// 家庭住址 String xl;// 学历 4.编写程序,提供实现各种数学计算的方法。包括如下几项。 (1)两个数的加、减、乘、除。 (2)求某数的相反数、倒数、绝对值。 (3)取两数中较大的和较小的。 (4)对浮点数(double型)的计算功能。如:给定浮点数d,取大于或等于d的最小整数, 取小于或等于d的最大整数,计算最接近d的整数值,计算d的平方根、自然对数log(d)等。 (5)计算以double型数a为底数,b为指数的幂。 5.编写一个抽象类Shape,声明计算图形面积的抽象方法。再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法。 6.定义一个接口,接口中有3个抽象方法如下。 (1)“long fact(int m);”方法的功能为求参数的阶乘。 (2)“long intPower(int m,int n);”方法的功能为求参数m的n次方。 (3)“boolean findFactor(int m,int n);”方法的功能为判断参数m加上参数n的和是否大 于100。 定义类实现该接口,编写应用程序,调用接口中的3个方法,并将调用方法所得的结果输出。 7.创建一个接口IShape,接口中有一个求取面积的抽象方法“public double area()”。定义一个正方形类Square,该类实现了IShape接口。Square类中有一个属性a表示正方形的边长,在构造方法中初始化该边长。定义一个主类,在主类中,创建Square类的实例对象,求该正方形对象的面积。 21 8.定义一个人类,包括属性:姓名、性别、年龄、国籍;包括方法:吃饭、睡觉,工作。 (1)根据人类,派生一个学生类,增加属性:学校、学号;重写工作方法(学生的工作是学 习)。 (2)根据人类,派生一个工人类,增加属性:单位、工龄;重写工作方法(工人的工作是?? 自己想吧)。 (3)根据学生类,派生一个学生干部类,增加属性:职务;增加方法:开会。 (4)编写主函数分别对上述3类具体人物进行测试。 专题6 字符串、日期时间类 一、填空题 1.已知String对象 s=”hello”,运行语句“System.out.println(s.concat(“World!”));”后,s的值为( ) 2.使用+=将字符串s2添加到字符串s1后的语句是( ) 3.比较s1种的字符串和s2种的字符串的内容是否相等的表达式是:( ) 4.已知sb为StringBuffer的一个实例,且sb=”abcde”,则sb.reverse()后sb的值为:( ) 5.获取当前系统时间( ) 6.已知StringBuffer sb=new StringBuffer(\,则sb.reverse()后,sb的值为 。 7、String s1=“China”; int n=s1.length( ); n的值为 (10) 。 二.选择题 1. 已知String对象s=”abcdefg”,则s.substring(2,5)的返回值为( )。 A.”bcde” C.”cdef” 2. 若有下面的代码: String s=”people”; String t=”people”; Char c[]={?p?, ?e?, ?o?, ?p?, ?l?, ?e?}; 下面哪一选项的语句返回值为假( )? B.”cde” D.”def” A.s.equals(t) C.s==t B.t.equals(c) D.t.equals(new String(“people”)) 22 3. 已知s为一个String对象,s=”abcdefg”,则s.charAt(1)的返回值为( )。 A.a B.b C.f D.g 4. 若有下面的代码: String s=”good”; 下面选项语句书写正确的是:( )。 A.s+=”student”; B.char c=s[1]; C.int len=s.length D.String t=s.toLowerCase(); 5、假设String s=\,则下面返回\的语句为 。 A.s.substring(6,8); B.s.substring(5,9); C.s.substring(5,7); D.s.substring(6,7); 6、调用下面哪个方法时会改变原有对象 。 A.String的trim( ) B.String的length( ) C.StringBuffer的reverse( ) D.StringBuffer的length( ) 7、已知int i=123,通过以下哪种方式可以得到字符串\ 。 A.Integer.parseInt(i); B.String.valueOf(i); C.Long.parseLong(i); D.Float.parseFloat(i); 8、由\得到的数值 。 A.>0 B.=0 C.<0 D.不确定 9、已知String s= \,则s.indexOf(\的值为 。 A.1 B.2 C.3 D.4 10、已知int i=123,通过以下哪种方式可以得到字符串\ 。 A.Integer.parseInt(i); B.String.valueOf(i); C.Long.parseLong(i); D.Float.parseFloat(i); 11、以下程序段执行的结果为 。 String str1, str2; str1 = \str2= \ System.out.print(str1.equals(str2)); System.out.println(str1 == str2); A.truefalse B.truetrue C.falsetrue D.falsefalse 23 12、已知StringBuffer sb=new StringBuffer(\,则sb.delete(1,2)后sb的值为 。 A.abc B.abde C.acde D.ade 三、编程题 1.实现把“I Love Java!”的字符全部转换为小写并输出到控制台。 2.使用String类中的split()函数,统计出“this is my homework! I must finish it!”中单词的个数。 (注意:单词之间用一个空格来分隔。) 3.给出两个日期,计算它们之间相隔的天数。 4.实现将当前日期信息以4位年份、月份全称、两位日期形式输出。 24 专题7 异常处理 一. 填空题 1.一个try语句块后必须跟(catch )语句块,( )语句块可以没有 2.自定义异常类必须继承( )类及其子类 3.异常处理机制允许根据具体的情况选择在何处处理异常,可以在( )捕获并处理,也可以用throws子句把他交给( )处理 二.选择题 1. finally语句块中的代码( ) A.总是被执行 B.当try语句块后面没有catch时,finally中的代码才会执行 C.异常发生时才执行 D.异常没有发生时才被执行 2. 抛出异常应该使用的关键字是( ) A.throw B.catch C.finally D.throws 3. 自定义异常类时,可以继承的类是( ) A.Error B.Applet C.Exception及其子类 D.AssertionError 4. 在异常处理中,将可能抛出异常的方法放在( )语句块中 A.throws B.catch C.try D.finally 5. 对于try{??}catch子句的排列方式,下列正确的一项是( ) A.子类异常在前,父类异常在后 B.父类异常在前,子类异常在后 C.只能有子类异常 25 D.父类异常与子类异常不能同时出现 6. 使用catch(Exception e)的好处是( ) A.只会捕获个别类型的异常 B.捕获try语句块中产生的所有类型的异常 C.忽略一些异常 D.执行一些程序 三.简答题 1.try/catch/finally如何使用? try:将可能出现异常的语句放在此处。 catch:当出现异常时在此处捕获异常。 finally:无论是否出现异常都要执行。 2.Throw/throws有什么联系和区别? throw:在语句中抛出异常。 throws:在方法中抛出异常。 联系:都是抛出异常。 3.谈谈final、finally的区别和作用 final:修饰变量是定义常量,修饰类是不允许继承,修饰方法是不允许复写。 finally:使用在异常处理中,无论是否出现异常都要执行。 4.如果try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行? 运行。 5.Error和Exception有什么区别? Error一般是出现的编译器的异常。 Exception:一般是出现的代码异常。 6.什么是RuntimeException?列举至少4个RuntimeException的子类 此异常允许程序不对其进行处理。 ArithmeticException ArrayStoreException ArrayIndexOUtOfBoundsException ClassCastException 四.编程题 1.编写程序,要求输入若干整数,输入的同时计算前面输入各数的乘积,若乘积超过100000,则认为是异常,捕获并处理这个异常,输出信息。 2.编写一个登录界面,要求帐户名只能由1至10位数字组成,密码只能有6位,任何不符合帐户名和密码要求的情况都视为异常,必须捕获并处理异常 3.设计自己的异常类表示对负数求平方根的错误;在类Test的主方法中,从键盘输入一个数,若输入的数不小于0,则输出它的平方根;若小于0,则抛出自定义异常;在程序中处理异常并输出提示信息“输入错误,不能对负数求平方根” 26 专题8 多线程 一、填空题 1.Java语言实现多线程的方法有两种,它们是(自己创建的线程子类)和(实现一个接口Runnable) 2.线程有5种状态,它们是( 新建 )、( 就绪 )、(运行 )、( 阻塞)和( 死亡 ) 3.在java中,线程同步是通过( Thread )关键字实现的 4.新创建的线程默认的优先级是( ) 5.当一个线程睡眠时,sleep()方法不消耗( )时间 二.选择题 1. 一个Java程序运行后,在系统中这个程序便可以作为一个( ) A.线程 B.进程 C.进程或线程 D.不可预知 2. 设已经编好了一个线程类MyThread,要在main()中启动该线程,需使用以下哪个 方法( ) A.new MyThread B.MyThread myThread=new MyThread(); myThread.start(); C.MyThread myThread=new MyThread(); myThread.run(); D.new MyThread.start(); 3. 以下哪个方法不能使线程进入阻塞状态( ) A.sleep() B.wait() C.suspend() D.stop() 4. 可以使用( )方法设置线程的优先级 A.getPriority() B.setPriority() C.yield() D.wait() 5. 线程是Java的( )机制 A.检查 B.解释执行 C.并行 D.并发 6. 以下方法用于定义线程执行体的是( ) A.start() B.init() C.run() D.main() 7. 一个线程如果调用了sleep()方法,能唤醒它的方法是( ) A.notify() B.resume() C.run() D.以上都不是 三、编程题 1.设计四个线程对象对同一个数据进行操作,两个线程执行减操作,两个线程执行加操作 2.制作两个线程对象,要求用同步块的方式使第一个线程运行2次,然后将自己阻 27 塞起来,唤醒第二个线程,第二个线程再运行2次,然后将自己阻塞起来,唤醒第一个线程??两个线程交替执行。 专题9 图形用户界面编程 一.填空题 1. AWT的组件库被更稳定、通用、灵活的库取代,该库称为( ) 2. ( )用于安排容器上的GUI组件 3. 设置容器的布局管理器的方法是( ) 4. 当释放鼠标按键时,将产生( )事件 5. Java为那些声明了多个方法的Listener接口提供了一个对应的( ),在该类中 实现了对应接口的所有方法 6. ActionEvent事件的监听器接口是( ),注册该时间监听器的方法名是( ), 事件处理方法名是( ) 7. 图形用户界面通过( )相应用户和程序的交互,产生事件的组件称为( ) 8. Java的Swing包中定义菜单的类是( ) 9. 向容器内添加组件使用( )方法 10. 对话框有两种类型,分别是( )和( ) 11. 工具栏一般放在窗口的( )位置 12. 若要使表格具有滚动条,需要将表格添加到( )组件中。 13. paint() 方法的参数是( )类的实例 14. drawRect(int x1,int y1,int x2,int y2)中,x2和y2分别代表矩形的( )和( ) 二.选择题 1. 窗口JFrame使用( )方法可以将jMenuBar对象设置为主菜单 A.setHelpMenu(jMenuBar) B.add(jMenuBar) C.setJMenuBar(jMenuBar) 2. 下面属于容器类的是( ) A.Color类 C.JFrame类 3. 使用( )类创建菜单对象 A.Dimension D.setMenu(jMenuBar) B.JMenu类 D.JTextField类 B.JMemu C.JMenuItem D.JTextArea 4. 使用( )方法创建菜单中的分隔条 A.setEditable B.ChangeListener C.add D.addSeparator 28 5. JPanel和JApplet的默认布局管理器是( ) A.CardLayout C.BorderLayout 6. JFrame的默认布局管理器是( ) A.CardLayout B.FlowLayout D.GridLayout B.FlowLayout C.BorderLayout D.GridLayout 7. 按钮可以产生ActionEvent事件,实现哪个接口可以处理此事件( ) A.FocusListener B.ComponentListener C.ActionListener D.WindowListener 8. 容器使用( )方法将组件添加到容器 A.addComponent() B.add() C.setComponent() D.Add() 9. 向JTextArea的( )方法传递false参数可以防止用户修改文本 A.setEditable B.changeListener C.add D.addSeparator 10. 为了能够通过选择输入学生性别,使用组件的最佳选择是( ) A.JCheckBox B.JRadioButton C.JComboBox D.JList 11. 当选中一个复选框,即在前面的方框上打上对勾,引发的事件是( ) A.ActionEvent B.ItemEvent C.SelectEvent D.ChangeEvent 12. 窗口关闭时会触发的事件是( ) A.ContainerEvent B.ItemEvent C.WindowEvent D.MouseEvent 13. 下面哪种对话框可以接受用户输入( ) A.showConfirmDialog B.showInputDialog C.showMessageDialog D.showOptionDialog 14. addActionListener(this)方法中的this参数表示的意思是( ) A.当有事件发生时,应该使用this监听器 B.this对象类会处理此事件 C.this事件优先于其他事件 D.只是一种形式 15. 以下类中,具有绘图能力的类是( ) A.Image B.Graphics C.Font D.Color 16. Graphics类中提供的绘图方法分为两类:一类是绘制图形,另一类是绘制( ) A.屏幕 B.文本 C.颜色 D.图像 29 三、编程题 1.设计一个图形界面的猜数字游戏程序 2.设计一个将华氏温度转换为摄氏温度的程序,按钮完成温度的转换。 公式:摄氏温度= (华氏温度-32) *5/9 3.设计一个C/S考试系统的界面(如下图),单击“确认”按钮后,使“开始考试”按钮可用,并使“学号”、“姓名”后的文本框及“确认”按钮不可用;单击“开始考试”按钮后使“下一题”按钮可用,同时设置“开始考试”按钮不可用。 4.设计一个窗口,里面有两个文本框和一个按钮,在第一个文本框中输入一个数,当单击按钮时,在另一个文本框中显示该数字的平方根,要求能处理异常。 5.下面的程序实现了在窗口中绘制一个以(70,70)为圆心,50为半径,边框是绿色的圆,圆心是红色的。请将程序补充完整: class Exam extends Frame{ public void paint(Graphics g){ g.setColor(Color.green); g.drawOval(20,20,100,100); g.setColor(Color.red); __________________; } } 6.下面的程序实现了在窗体的坐标(50,50)处以红色显示“红色文字”,请将程序补充完整: class Exam extends Frame{ public void paint(Graphics g){ _____________________; g.drawString(“红色文字”,50,50); } } 30 专题10(模块7) 输入输出 一、填空题 1.根据流的方向,流可以分为两类:( 输入流 )和( 输出流 ) 2.根据操作对象的类型,可以将数据流分为( )和( )两种 3.在java.io包中有4个基本类:InputStream、OutputStream、Reader和( )类 4.在Java语言中,实现多线程之间通信的流是( ) 5.( )类是java.io包中一个非常重要的非流类,封装了操作文件系统的功能。 6.( )类用于将Java的基本数据类型转换为字符串,并作为控制台的标准输出 7.Java包括的两个标准输出对象分别是标准输出对象( )和标准错误输出 8.FileInputStream实现对磁盘文件的读取操作,在读取字符的时候,它一般与( )和( )一起使用 二.选择题 1.Java语言提供处理不同类型流的类所在的包是( ) A.java.sql B.java.util C.java.math D.java.io 2.创建一个DataOutputStream的语句是( ) A.new DataOutputStream(“out.txt”) B.new DataOutputStream(new File(“out.txt”)); C.new DataOutputStream(new Writer(“out.txt”)); D.new DataOutputStream(new OutputStream(“out.txt”)); 3.下面语句正确的是( ) A.RandomAccessFile raf=new RandomAccessFile (“myfile.txt”,”rw”); B.RandomAccessFile raf=new RandomAccessFile (new DataInputStream()); C.RandomAccessFile raf=new RandomAccessFile (“myfile.txt”); D.RandomAccessFile raf=new RandomAccessFile (new File(“myfile.txt”)); 4.下面哪个方法返回的是文件的绝对路径( ) A.getCanonicalPath() B.getAbsolutePath() C.getCanonicalFile() D.getAbsoluteFile() 5.在File类提供的方法中,用语创建目录的方法是( ) A.mkdir() B.mkdirs() C.list() D.listRoots() 6.程序如果要按行输入/输出文件中的字符,最合理的方法是采用( ) A.BufferedReader和BufferedWriter类 B.InputStream和OutputStream类 C.FileReader和FileWriter类 31 D.File_Reader和File_Writer类 7.RandomAccessFile类的( )方法可用于设置文件定位指针在文件中的位置。 A.readInt B.readLine C.seek D.close 8.下面哪个流类使用了缓冲区技术( ) A.BufferadOutputStream B.FileInputStream C.DataOutputStream D.FileReader 三、编程题 1.编写一段代码,实现的功能是:统计一个文件中字母“A”和“a”出现的总次数 2.使用随机文件流类RandomAccessFile将一个文本文件倒置读出。 3.编写一个Java应用程序,可以实现Dos中的type命令,并加上行号。即将文本文件在控制台上显示出来,并在每一行的前面加上行号。 专题11(模块8) 数据库JDBC 一.简答题 1.说明ODBC数据源创建的步骤 2.JDBC提供了哪几种连接数据库的方式? 3.SQL语言包括哪几种基本语句来完成数据库的基本操作? 4.写出装载驱动程序的代码 5.说明Statement和PreparedStatement的不同,都用在什么场合? 二.选择题 1.下面方法中,可以用来加载JDBC驱动程序的是( D ) A.类java.sql.DriverManager的getDriver方法 B.类java.sql.DriverManager的getDrivers方法 C.类java.sql.Driver的connect方法 D.类java.lang.Class的forName方法 2.下面方法中,可以用来建立数据库连接的是( A ) A.类java.sql.DriverManager的getConnection方法 B.类javax.sql.DataSource的getConnection方法 C.类javax.sql.DataSource的connection方法 D.类java.sql.Driver的getConnection方法 3.一个(C )对象用于向数据库提交查询 32 A.ResultSet B.Connection C.Statement D.Applet 4.JDBC API主要定义在下面哪个包中( A ) A.java.sql B.java.io C.java.awt D.java.util 5.Statement类的executeQuery()方法返回的数据类型是( D ) A.Statement类的对象 B.Connection类的对象 C.DatabaseMetaData类的对象 D.ResultSet类的对象 三、编程题 1.创建一个图书数据库,包含书号、书名、作者、出版社、出版日期、数量等字段,分别用两种方法连接该数据库。 2.对上题中创建的图书数据库编写一个按照指定关键字查找图书信息的应用程序。 3.使用预编译的SQL语句对图书信息进行查询、插入、修改和删除操作。 专题12(模块) 网络编程 一、填空题 1. 一个URL地址是由(协议名称、主机名称、端口号、文件名)几部分组成的 2. URL类中返回URL端口号的方法是(public getPort() ) 3. 一个Socket由一个(IP )地址和一个(端口号 )唯一确定 4. 目前最广泛使用的网络协议是Internet上使用的(TCP/IP)协议 5. TCP/IP协议的两种通信协议是(TCP )协议和(UDP)协议 6. 常用的变成模式有客户端/(服务器 )模式和B/S模式 7. 套接字是一个特定机器上被编号的( ),用户可用的端口号是( ),系统可用的端口号是 ( ) 8. 服务器端套接字类是(ServerSocket ) 二.选择题 1. 关于协议下面说法正确的是(B) A.TCP/IP协议由TCP协议和IP协议组成 B.TCP和UDP都是 TCP/IP协议传输层的子协议 C.Socket是TCP/IP协议的一部分 D.主机名的解析是TCP/IP的一部分 2. TCP协议栈的4层结构中不包括( ) A.应用层 B.传输层 C.网络层 D.会话层 3. 下面服务中使用TCP协议的是( A ) 33 A.HTTP B.FTP C.SMTP D.NEWS 4. HTTP服务的端口号是( A ) A.80 B.21 C.23 D.120 5. 下面URL合法的是( A ) A.http://92.168.1.59/index.html B.ftp://192,168,1,1/incoming C.ftp:// 192.168.1.1:-1 D.http:// 192.168.1.1.2 6. 下面方法表示本机的是( C ) A.localhost B.255.255.0.0 C.127.0.0.1 D.123.456.789.0 7. 一个Socket由(A )唯一确定 A.一个IP地址和一个端口号 B.一个IP地址和一个主机名 C.一个主机号和一个端口号 D.一个IP地址 8. 获取本机地址可以使用下面哪个方法( B ) A.getHostName() B.getLocalHost() C.getByName() D.getHostAddress() 9. 以下( A )方法可以获取指定URL的协议名 A.public String getProtocol() B.public String getHost() C.public final Object getContent() D.public int getPort() 10. 下面创建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); 三.简答题 1.什么叫套接字?它的作用是什么? 2.建立Socket连接时,客户端和服务器端有什么不同? 3.基于UDP的通信和基于TCP的通信有什么不同? 4.客户端的套接字对象和服务器端的套接字对象是如何进行通信的? 四.编程题 1.编写一个程序,利用URL类来获取某一网站主页的HTML文件 2.编写一对客户机/服务器程序,利用数据报将一个文件从一台机器传到另一台机器上 34