考试酷java第四章
- 格式:doc
- 大小:323.50 KB
- 文档页数:20
第4章面向对象(下)一、填空题1. 12.重写3. final4. instanceof5. Implements6.编译时异常7. RuntimeException8.逗号二、判断题1.对2.对3.错4.对5.错6.对7.对8.错9.对10.错三、选择题1. B2. D3. D4. D5. B6. D7. C8. B9. B10.D11.C四、简答题1.抽象类和接口有如下区别:1)抽象类可以有构造方法,接口中不能有构造方法。
2)抽象类中可以有普通成员变量,接口中没有普通成员变量。
3)抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4)抽象类中的抽象方法的访问类型可以是public, protected和(默认类型),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5)抽象类中可以包含静态方法,接口中不能包含静态方法。
6)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认为public static final类型。
7) 一个类可以实现多个接口,但只能继承一个抽象类。
2.在类的继承中需要注意的问题:1).在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类;2).多个类可以继承一个父类;3).在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类;4).在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。
五、编程题1.Employee.java139//定义一个测试类140 public class Test{141public static void main(String[] args){142//声明一个Employee类型的数组,并创立不同子类型的对象143Employee [ ] employee = {new SalariedEmployee (“张三”,1,6000), newHourlyEmployee (“李四”,2,50,180) , new SalesEmployee (“王五” ,3, 6500,0・15),new BasePlusSalesEmployee(, 4,5000,0.15,2000)}; 144//打印每个员工的工资145for (int i = 0; i < employee.length ;i + + )146System.out.printin(Math.round(employee[i].getSalary(10)));147)148)。
第4章数组和字符串操作 (63)4.1 数组 (63)4.1.1 为什么使用数组 (63)4.1.2 数组的基本概念 (64)●什么是数组?答案:数组是编程语言中非常常见的一种数据结构,它用来存储一组相同数据类型数据。
4.1.3 一维数组的创建和使用 (64)●下面哪一项是正确的定义一维数组的方式?答案:两种方式都正确。
4.1.4 一维数组的应用 (70)4.1.5 多维数组 (76)●什么是多维数组?答案:Java中支持多维数组,也就是“数组的数组”。
多维数组的声明是通过每一维一组方括号的方式来实现的。
●如何把一段逗号分割的字符串转换成一个数组?答案:如果不查jdk api,我很难写出来!我可以说说我的思路:用正则表达式,代码大概为:String [] result = orgStr.split(“,”);用StingTokenizer ,代码为:StringTokenizer tokener = StringTokenizer(orgStr,”,”);String [] result = new String[tokener .countTokens()];Int i=0;while(tokener.hasNext(){result[i++]=toker.nextToken();}●数组有没有length()这个方法?答案:数组没有length()这个方法,有length的属性。
String有有length()这个方法。
4.2 String字符串 (77)●请问数组和String有没有length()这个方法或length的属性。
·VI · 答案:数组没有length()这个方法,但有length 的属性。
String 有length()这个方法。
● 什么是字符串?答案:字符串是一系列字符组成的序列。
4.2.2 如何使用String 字符串....................................................................................77 ● String 字符串对象建立后,还能修改吗,为什么?答案:不能,因为String 类是字符串常量类,该类对象建立后不能修改。
第四章 类和对象1第四章 类和对象 [习题]1.类及类成员的访问控制符有哪些?2.为什么说构造函数是一种特殊的方法?特殊在哪里?构造函数什么时候执行?被谁调用?3.关键字static 可以修饰哪些类的组成部分?4.静态属性有什么特点?类对象可以访问或修改静态属性吗?5.同名的不同方法共存的情况称为什么?如何区分这些同名方法?6.什么是包?如何创建包?为什么要使用包?包物理地对应什么?7.试写出一个语句创建一个名为MyPackage 的包,这个语句应该放在程序的什么位置?8.如何引用整个包?如何引用包中的一个类?试写出引用MyPackage 中所有类的语句和引用MyPackage 包中的一个类MyClass1。
9.阅读下面的程序,说明它们的输出。
public class UseRef{public static void main(String args[]){MyClass1 myobj,myref;myobj=new MyClass1(-1);myref=myobj;System.out.println("the original data is:"+myobj.getData());myref.setData(10);System.out.println("now the data is:"+myobj.getData());}}class MyClass1{int data;MyClass1(int d){data=d;}int getData(){return data;2 }void setData(int d){data=d;}}10.编写一个类实现秒表的功能。
要求至少实现开始计时、停止计时、分针秒针归零、获得分针示数、获得秒针示数、获得总时间的毫秒数等功能。
11.编写一个类实现复数的运算。
要求至少实现复数相加、复数相减、复数相乘等功能。
12.编程创建一个Box类,在其中定义三个变量表示一个立方体的长、宽和高,定义一个构造方法对这三个变量进行初始化,然后定义一个方法求立方体的体积。
1.分别编写两个方法,一个方法的功能是求一个double型数值的向右取整,另一个方法求double型数值的向左取整。
数d的向右取整是大于等于d的最小整数,d的向左取整是小于等于d的最大整数。
例如:5.3的向右取整是6而向左取整是5.答:public class One{static int right(double x){if(x!=5)x=x+1;return (int)x;}static int left(double x){return (int)x;}public static void main(String args[]){System.out.println("5.3向左取整为:"+left(5.3));System.out.println("5.3向右取整为:"+right(5.3));}}程序运行结果为:2.写一个方法计算一个整数各位数字的和。
使用下述的方法说明:public static int sumDigits(long n)例如:sumDigits(276)返回2+7+6=15 。
提示:用求余运算符%分解数字,用除号/分离位数。
例如334%10=4而334/10=33.用循环反复分解和分离每位数字,直到所有的位数都被分解。
答:public class Two{public static int sumDigits(long n){long sum=0,t;while(n!=0)47{t=n%10;n=n/10;sum+=t;}return (int)sum;}public static void main(String args[]){System.out.println("334各个位数字之和为:"+sumDigits(334));}}程序运行结果为:3. 编写程序,用Math类中的sqrt方法打印下表:Number SquareRoot ....................................0 0.00002 1.41424 2.00006 2.44958 2.828410 3.162312 3.464114 3.741716 4.000018 4.242620 4.4721答:public class Three{public static void main(String args[]){System.out.println("Number SquareRoot");System.out.println("..................");for(int i=0;i<=20;)4748{System.out.printf("%d\t%.4f\n",i,Math.sqrt(i));i=i+2;}}}程序运行结果为:4. 请定义一个名为Rectangle的矩形类。
java试卷(第四章)(⼀)选择题1.假设⽅法没有任何返回值,下⾯哪个关键字可以⽤作此函数的返回类型?()A.v oidB.i ntC.d oubleD.p ublic2.⽅法包含哪些特征?()A.⽅法名B.⽅法名和参数列表C.返回类型、⽅法名和参数列表D.参数列表3.所⽤的java应⽤程序都要有⼀个()⽅法?A.p ublic static Main(String[] args)B.p ublic static Main(String args[])C.p ublic static void main(String[] args)D.p ublic void main(String[] args)4.⽅法的参数总是出现在()A.⼤括号B.圆括号C.花括号D.引号5.每当调⽤⼀个⽅法时,系统将参数、局部变量和系统寄存器存储在⼀个内存区域中,这个内存区域称为()A.堆B.存储器C.栈D.数组6.在调⽤参数⽅法时,实参的值赋给形参,这被称为()A.⽅法调⽤B.值传递C.参数传递D.参数名传递7.下⾯⽅法打印message:System.out.print(message);n--;}}那么nPrint(”a”,4)会输出什么()A.a aaaaB.a aaaC.a aD.调⽤⽆效8.下⾯⽅法打印messagestatic void nPrint(String message, int n) { while (n > 0) {System.out.print(message);n--;}}如果int k = 2;nPrint(“A message”,k);程序运⾏后k的结果是()A.0B.1C.2D.39.分析下⾯代码public class Test {public static void main(String[] args) { System.out.println(xMethod(5, 500L));}public static int xMethod(int n, long l) { System.out.println("int, long");return n;}public static long xMethod(long n, long l) { System.out.println("long, long");}运⾏结果是()A.程序显⽰的是int,long下⼀⾏5B.程序显⽰的是long,long下⼀⾏5C.程序正常运⾏,但是运⾏结果不是A和B中的结果D.程序不能正常运⾏,因为没有匹配的参数列表10.分析下⾯代码:class Test {public static void main(String[] args) {System.out.println(xmethod(5));}public static int xmethod(int n, long t) {System.out.println("int");return n;}public static long xmethod(long n) {System.out.println("long");return n;}}运⾏结果是()A.i nt 下⼀⾏5B.l ong下⼀⾏5C.程序正常运⾏,但是运⾏结果不是A和B中的结果D.程序不能正常运⾏,因为没有匹配的参数列表11.分析下⾯代码:public class Test {public static void main(String[] args) {System.out.println(max(1, 2));}public static double max(int num1, double num2) {System.out.println("max(int, double) is invoked");if (num1 > num2)return num1;elsepublic static double max(double num1, int num2) {System.out.println("max(double, int) is invoked");if (num1 > num2)return num1;elsereturn num2;}}运⾏结果是:()A.程序不能编译,因为不能在返回类型为⾮void的⽅法中有输出语句。
第四章编程题1. 按要求完成以下题目(1)Circle( ) // 将半径设为0Circle(double r ) // 创建 Circle 对象时将半径初始化为r③三个成员方法double getArea( ) //获取圆的面积double getPerimeter( ) // 获取圆的周长void show( ) //将圆的半径、周长、面积输出到屏幕(2)编写一个圆柱体类Cylinder ,它继承于上面的Circle 类。
还拥有:①一个成员变量double hight(私有,浮点型);// 圆柱体的高;②构造方法Cylinder (double r, double h )//创建Circle对象时将半径初始化为r③成员方法double getVolume( ) // 获取圆柱体的体积void showVolume( ) // 将圆柱体的体积输出到屏幕编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
【参考答案】import java.math.*;class Circle{private double radius;public Circle() {radius=0;}public Circle(double r) {radius=r;}void setRadius(double r) {this.radius=r;}double getRadius(){return this.radius;}double getArea() {return Math.PI*radius*radius;}double getPerimeter() {return Math.PI*2*radius;}void show() {System.out.println("圆的半径为"+radius+"\n圆的周长为"+this.getPerimeter()+"\n圆的面积为"+this.getArea());}}class Cylinder extends Circle{double hight;public Cylinder(double r,double h) {super.setRadius(r);this.hight=h;}double getVolume(){double volume=super.getArea()*hight;return volume;}void showVolume() {System.out.println("圆柱的面积为"+this.getVolume());}}public class Example01 {public static void main(String[] args) {Circle circle=new Circle(5);circle.show();Cylinder cylinder=new Cylinder(2,5);cylinder.showVolume();}}2.按要求编写一个Java应用程序:(l)定义一个接口CanCry,描述会吼叫的方法public void cry()(2)分别定义狗类(Dog)和猫类(Cat),实现CanCry接口。
1、已知类的定义如下public class test_3{int x ;int y ;test_3(int a,int b){x=a;y=b;}test_3(){x=-1;y=-1;}int get_x(){return x++;}int get_y(){return y--;}如果用下面三种不同的方法加载类,写出要求的结果:(1)用test_3 a1=new test_3()后;a1.x的内容为_____ ,a1.y的内容为______。
(2)用test_3 a1=new test_3(-2,5)后;a1.x的内容为_____ ,a1.y的内容为______。
(3)用test_3 a1=new test_3(10)后;其结果是__________。
2、设int x=1,float y=2,则表达式x / y的值是( )A、0B、1C、2D、以上都不是3、以下语句有语法错的是( )A、int x=1;y=2;z=3B、for (int x=10,y=0;x>0;x++);C、while (x>5);D、for(;;);4、void 的含义( )A、方法体为空B、定义的方法没有形参C、定义的方法没有返回值D、方法的返回值不能参加算术运算5、以下有关类定义的说法正确的是( )A、一个类可以有成员,也可以没有成员B、类的成员至少有一个属性和一个方法C、类的静态属性同全局变量的概念完全一样,只是表达形式不同D、类的方法在实例化时不占用内存6、以下有关构造函数的说法,正确的是( )A、一个类的构造函数可以有多个B、构造函数在类定义时被调用C、构造函数只能由对象中的其它方法调用。
D、构造函数可以和类同名,也可以和类名不同7、以下有关类的继承的说明中,正确的是( )A、子类能直接继承父类所有的非私有属性,也可通过接口继承父类的私有属性B、子类只能继承父类的方法,不能继承父类的属性C、子类只能继承父类的非私有属性,不能继承父类的方法D、子类不能继承父类的私有属性8、以下有关类的构造函数继承的说明,正确的是( )A、子类继承父类的构造函数,但不能自己定义B、子类可定义自己的构造函数,但受父类定义的构造函数的限制C、子类和父类均可独自定义自己的构造函数,但执行时的顺序有规定D、如父类定义了构造函数,则子类只能继承父类的构造函数,不能自己定义9、this 和super的使用中,正确的是( )A、都是指一个内存地址B、可以在同一个方法定义中出现C、意义相同D、以上都不10、分析以下程序,下面(AC)方法是对setVar方法的重载。
第四章1、关于内部类,下列说法不正确的就是( )。
内部类不能有自己的成员方法与成员变量2、有一个类B,下面为其构造方法的声明,正确的就是( )。
B(int x) {}3、为AB类定义一个无返回值的方法f,使得使用类名就可以访问该方法,该方法头的形式为( )static void f()4、在Java语言中,哪一个包中的类就是自动导入的?( )java、lang5、定义外部类时不能用到的关键字就是( )。
protected6、下列哪种类成员修饰符修饰的变量只能在本类中被访问?( )private7、定义一个公有double型常量PI,哪一条语句最好?( )public final static double PI=3、14;8、下面关于方法的说法,不正确的就是( )。
如果一个类定义了构造方法,也可以用该类的默认构造方法9、下面关于类的说法,不正确的就是( )。
类就就是对象10、给出下面的程序代码:public class X4_1_3 {private float a;public static void m ( ){ }}如何使成员变量a被方法m( )访问( )将private float a改为static float a11、给出下面程序代码:byte[] a1, a2[];byte a3[][];byte[][] a4;下列数组操作语句中哪一个就是不正确的?( )a2 = a112、下面代码运行后的输出结果为( )。
public class X6_1_5 {public static void main(String[] args) {AB aa = new AB();AB bb;bb = aa;System、out、println(bb、equals(aa));}}class AB{ int x = 100; }true13、设有下列数组定义语句:int a[] = {1, 2, 3};则对此语句的叙述错误的就是( )。
第四章1. 关于部类,下列说法不正确的是()。
部类不能有自己的成员方法和成员变量2. 有一个类B,下面为其构造方法的声明,正确的是()。
B(int x) {}3. 为AB类定义一个无返回值的方法f,使得使用类名就可以访问该方法,该方法头的形式为()static void f()4. 在Java语言中,哪一个包中的类是自动导入的?()ng5. 定义外部类时不能用到的关键字是()。
protected6. 下列哪种类成员修饰符修饰的变量只能在本类中被访问?()private7. 定义一个公有double型常量PI,哪一条语句最好?()public final static double PI=3.14;8. 下面关于方法的说法,不正确的是()。
如果一个类定义了构造方法,也可以用该类的默认构造方法9. 下面关于类的说法,不正确的是()。
类就是对象10. 给出下面的程序代码:public class X4_1_3 {private float a;public static void m ( ){ }}如何使成员变量a被方法m( )访问()将private float a改为static float a11. 给出下面程序代码:byte[] a1, a2[];byte a3[][];byte[][] a4;下列数组操作语句中哪一个是不正确的?()a2 = a112. 下面代码运行后的输出结果为()。
public class X6_1_5 {public static void main(String[] args) {AB aa = new AB();AB bb;bb = aa;System.out.println(bb.equals(aa));}}class AB{ int x = 100; }true13. 设有下列数组定义语句:int a[] = {1, 2, 3};则对此语句的叙述错误的是()。
a数组元素的下标为1~314. 已知有定义:String s="I love",下面哪个表达式正确?()s += "you";15. 关于数组,下列说法中不正确的是()。
定义数组时必须分配存16. 执行语句:int[] x = new int[20];后,下面哪个说法是正确的?()x[19]为01. Applet由浏览器自动调用的主要方法,,和分别对应了Applet从初始化、启动、暂停到消亡的生命周期的各个阶段。
Init start stop destroy2. 数组是一种数据类型,在Java中,数组是作为来处理的。
数组是有限元素的有序集合,数组中的元素具有相同的,并可用统一的和来唯一确定其元素。
复合对象数据类型数组名下标3. 在数组定义语句中,如果[]在数据类型和变量名之间时,[]之后定义的所有变量都是类型,当[]在变量名之后时,只有[]之前的变量是类型,之后没有[]的则不是数组类型。
数组数组4. 利用类中的方法可以实现数组元素的复制;利用类中的和方法可以实现对数组元素的排序、查找等操作。
System arraycopy() Arrays sort() binarySearch()5. Java语言提供了两种具有不同操作方式的字符串类:类和类。
它们都是的子类。
String StringBuffer ng.Object6. System类是一个功能强大、非常有用的特殊的类,它提供了、系统信息等重要工具。
这个类不能,即不能创建System类的对象,所以它所有的属性和方法都是类型,引用时以类名System为前缀即可。
标准输入/输出运行时实例化static7. 方法体定义变量时,变量前不能加;局部变量在使用前必须,否则编译时会出错;而类变量在使用前可以不用赋值,它们都有一个的值。
修饰符明确赋值默认8. 创建包时需要使用关键字。
package9. 定义类时需要关键字,继承类时需要关键字,实现接口时需要关键字。
class extends implements10. 引用static类型的方法时,可以使用做前缀,也可以使用做前缀。
类名对象名11. 静态数据成员既可以通过来访问,也可以通过直接访问它。
对象名类名12. 从用户的角度看,Java源程序中的类分为两种:和。
系统定义的类用户自己定义的类13. static方法中只能引用类型的数据成员和类型的成员方法;而非static类型的方法中既可以引用类型的数据成员和成员方法,也可以引用类型的数据成员和成员方法。
static static 非static14. 如果用户在一个自定义类中未定义该类的构造方法,系统将为这个类定义一个默认构造方法。
这个方法没有,也没有任何</FILL.TAG>具体语句</FILL.TAG>,不能完成任何操作。
形式参数15.是所有类的直接或间接父类,它在包中。
Object类ng16. 数组初始化包括初始化和初始化两种方式。
静态动态17. 静态数据成员被保存在类的存区的单元中,而不是保存在某个对象的存区中。
因此,一个类的任何对象访问它时,存取到的都是(相同/不同)的数值。
公共存储相同18. 类中的方法是一个特殊的方法,该方法的方法名和类名相同。
[构造19. 当程序中需要引用java.awt.event包中的类时,导入该包中类的语句为。
import java.awt.event.*20. 一个类主要包含两个要素:和</FILL.TAG>成员方法<FILL.TAG>数据成员24. public class X6_3_1 {public static void main(String[] args) { int a[]={12,39,26,41,55,63,72,40,83,95}; int i1=0,i2=0;for(int i=0;i<a.length;i++)if(a[i] %2 == 1) i1++;else i2++;System.out.println(i1+"\t"+i2);}6 425.public class X6_3_2 {public static void main(String[] args) { int a[]={36,25,48,14,55,40,32,66};int b1,b2;b1=b2=a[0];for(int i=1;i<a.length;i++)if ( a[i] >b1 ){if ( b1 >b2 ) b2=b1;b1=a[i];}System.out.println(b1+"\t"+b2);}}66 5526. public class X6_3_3 {public static void main(String[] args) { int a[]={36,25,48,14,55,40,32,66 };int b1,b2;b1=b2=a[0];for (int i=1;i<a.length;i++)if ( a[i]<b1 ) {if ( b1<b2 ) b2=b1;b1=a[i];}System.out.println(b1+"\t"+b2);}}14 2527. public class X6_3_4 {public static void main(String[] args) { String str = "abcdabcabfgacd";char[] a =str.toCharArray();int i1 =0, i2=0, i;for(i=0;i<a.length;i++) {if(a[i] == 'a' ) i1++;if(a[i] == 'b' ) i2++;}System.out.println(i1+"\t"+i2);}}4 328. public class X6_3_5 {public static void main(String[] args) { String str ="abcdabcabdaeff";char[] a = str.toCharArray();int b[] = new int[5],i;for(i=0;i<a.length;i++) {switch (a[i]) {case 'a': b[0] ++; break;case 'b': b[1] ++; break;case 'c': b[2] ++; break;case 'd': b[3] ++; break;default : b[4] ++;}}for(i =0; i<5; i++)System.out.print(b[i]+"\t");System.out.println();}}4 3 2 2 329. public class X6_3_6 {public static void main(String[] args) {int a[] = {76,83,54,62,40,75,90,92,77,84};int b[] = {60,70,90,101};int c[]=new int[4],i;for (i=0; i<a.length; i++) {int j =0;while (a[i] >= b[j] ) j ++;c[j] ++;}for (i=0; i<4; i++)System.out.print(c[i]+"\t");System.out.println();}}2 1 5 230. public class X6_3_7 {public static void main(String[] args) {int a[][] = {{1,2,7,8},{5,6,11,12},{9,10,3,4}}; int m = a[0][0];int ii = 0, jj = 0;for (int i=0;i<a.length;i++)for(int j=0;j<a[i].length;j++)if ( a[i][j]>m ){m =a[i][j];ii =i;jj =j;}System.out.println(ii+"\t"+jj+"\t"+a[ii][jj]);}}1 3 1231.public class X6_3_8 {public static void main(String[] args) {String[] a = {"student" ,"worker" ,"cadre" ,"soldier" ,"peasant" }; String s1,s2;s1 = s2 = a[0];for( int i = 1; i<a.length;i ++) {if (a[i].compareTo(s1)>0) s1=a[i];if (a[i].compareTo(s2)<0) s2=a[i];}System.out.println(s1+"\t"+s2);}}worker cadre1.已知一个数值矩阵A为,另一个矩阵B为,求出A与B的乘积矩阵C[3][4]并输出出来,其中C中的每个元素C[i][j]等于。