面向对象技术
![面向对象技术](https://img.360docs.net/img59/02oxj6ubnawfxpck6rtq-91.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象技术(本)》课程第一阶段练习题
一.填充题
1.Java源程序文件的扩展名是java;Java源程序经编译后生成Java字节码文件,其扩展名是class。
2.Java程序可分为Application和Applet两大种类。
3.开发与运行Java程序需要经过的三个主要步骤为编写源程序、
编译源程序和解释运行字节码文件。
4.在Java程序中定义的类有两种成员:成员变量、成员方法。
5.一个Application源程序文件名为MyPro.java,如果使用Sun公司的Java开发工具SDK编译该源程序文件并使用其虚拟机运行这个程序的字节码文件,应该顺序执行如下两个命令:
javac MyPro.java 、
java MyPro 。
6.定义初值为123456789的长整型变量 var 的语句是__long var=123456789L;__。
7.在Java语言中,逻辑常量值除了true之外另一个是false。
8.表达式15+4*5-12的运算结果是23。
二.选择题
1.编译Java源程序文件后所产生的字节码文件的扩展名为: C
A.java B. html C.class D. exe
2. main方法是Java Application程序执行的入口点,以下main方法头部合法的是:B
A. public static void main()
B. public static void main(String args[])
C. public static int main(String[] arg)
D. public void main(String arg[])
3.下面的Java源文件代码片断是不正确的定义次序的是: D
A.package mypack;
public class Demo{//do something…
}
B.import java.io.*;
importjava.awt.*;
public class Demo{//do something…
}
C.import java.io.*;
class Demo{//do something…
}
public class Demo1{//do something…
}
D.import java.io.*;
package mypack;
public class Demo{//do something…
}
4. 下面选项能正确表示Java语言中的一个整型常量的是: C
A.9.0 B.1 000 000 C. -40 D.1 2 3
5. 下列变量定义错误的是: A
A.float x; y; B. float x, y=1.3f;
C. public inti=10,j=3, k;
D. char ch1=’m’,ch2=’/’;
6.找出下列错误的变量定义:C
A) long a=987654321L;B) int _b=123;
C) static e=32761; D) intc,d;
7. Java语言具有许多优点和特点,下列选项中哪个反映了Java程序并行机制的特点?B
A) 安全性 B)多线性 C)跨平台 D)可移植
8. 下列叙述中,正确的是A
A)Java语言的标识符是区分大小写的
B)源文件名与public类名可以不相同
C)源文件扩展名为.jar
D)源文件中public类的数目不限
9. 下列属于合法的Java标识符是A
A)_cat B)5books C)+static D)-3.14159
10. 在Java中,表示换行符的转义字符是A
A)\n B)\f C)'n' D)\dd
三.简答题
1.Java有哪些特点?
答案:
1.Java程序设计语言是新一代语言的代表,它强调了面向对象的特性,可以被用来开发范围广泛的软件,它具有支持图形化的用户界面、网络以及数据库连接等复杂的功能,Java 语言的主要的特点有:
(1)易于学习
Java语言很简单,它的语法非常类似于C++,但是它摒弃了C++许多低级、困难、容易混淆、容易出错或不经常被使用的功能。
(2)高效率的执行方式
用Java语言编辑的源程序的执行方法是采用先经过编译器编译、再利用解释器解释的方式来运行的。它综合了解释性语言与编译语言的众多优点,使其执行效率较以往的程序设计语言有了大幅度的提高。
(3)与平台无关性
Java源程序经过编译器编译,会被转换成一种我们将它称之为“字节码(byte_codes)”
的目标程序,可以跨平台运行。
(4)分布式
分布式主要是指数据分布和操作分布两层意思,数据分布是指数据可以分散在网络中不同的主机上,操作分布是指把一个任务分散在不同的主机上进行处理。Java从诞生起就与网络联系在一起,它强调网络特性,内置TCP/IP,HTTP,FTP协议类库,便于开发网上应用系统。
(5)安全性
Java2平台采用了域管理方式的安全模型,无论是本地代码还是远程代码都可以通过配置的策略,设定可访问的资源域,使得Java成为安全的编程语言。
(6)多线程
Java的多线程机制使应用程序中的线程能够并发执行,保证了对共享数据的正确操作,可以分别用不同的线程完成特定的行为,很容易在网络上实现实时交互行为。
(7)丰富的API(Application Program Interface)类库
Java开发工具包中的类库包罗万象,应有尽有,程序员的开发工作可以在一个更高的层次上展开,这也正是Java受欢迎的重要原因之一。Java同时为用户提供了详尽的API 文档说明。
2.Java的虚拟机是什么?
我们可以直观地理解:任何一种可以运行Java程序(即可以担任Java解释器)的软件都可以被称为Java虚拟机(Java virtual machine, JVM),因此诸如浏览器与Java的一部份开发工具等皆可看作一部JVM。当然我们可以把Java的字节码(byte_codes)看成是JVM所运行的机器码。
3.画出Java程序从源程序到编译、解释、运行的过程图?
Java语言编辑的源程序的执行方法是先经过编译器编译、再利用解释器解释的方式来运行的。其从源程序到编译解释运行的过程图如下:
4.简述Java家族的J2SE、J2ME与J2EE。
Java的大家族中有三个主要成员:
(1)J2ME——Java 2 Micro Edition用语嵌入式Java消费电子平台。不论是无线通讯、手机、PDA等小型电子装置都可采用其作为开发工具及应用平台。
(2)J2SE——Java 2 (Software Development Kit)Standard Edition是Java最通行的版本,是用于工作站、PC机的Java标准平台。
(3)J2EE——Java 2 Enterprise Edition可扩展的企业应用Java 2平台,它提供了企业e-Business架构及Web Services服务,除深受广大企业用户的欢迎之处是其开放
的标准和优越的跨平台能力。
5.Java的字节码是什么?
Java源程序经过编译器编译,会被转换成一种我们将它称之为“字节码(byte_codes)”的目标程序。“字节码”的最大特点便是可以跨平台运行,即程序设计人员们常说的“编写一次,到处运行”,正是这一特性成为Java得到迅速普及的重要原因。
《面向对象技术(本)》课程第二阶段练习题
一、填空题
1.表达式(18-4)/6+6的运算结果是8。
2.表达式2>=5的运算结果是False。
3.表达式5>2 && 8<8 &&23<36的运算结果是False。
4.表达式56/9+3.6的运算结果是9.6。
5.表达式48%9+5*5-4的运算结果是24。
6.表达式:9-7<0 || 11>8的运算结果是True。
7.表达式:(3>2) ? 8 : 9的运算结果是8。
8.表达式: 9==8 && 3<7的运算结果是False。
9.假设int m=2,float n=0.1f,经过下列表达式的连续运算后,m、n的值分别为0, -15.4。
m*=5/m-1;
n-=5*3.1;
10.设x,y,max,min均为int型变量,x、y已赋值。用三目条件运算符将x、y的较大值赋给变量max、较小值赋给变量min的语句分别是___max=(x>y)?x:y___和___min=(x 11.当整型变量n的值不能被7除尽时,其值为false的Java语言表达式是__n%7==0__。 12.执行以下程序段后,x = __6___,y =___30___。 int x = 5, y=5; y = ++x * y--; 二、选择题 1. 找出下列中正确的变量定义 A A) double d; B) float f=6.6; C) byte b=130; D) booleant="true"; 2.找出以下字符常量中不正确的表示 D A) '数' B) '#' C) '*' D) "a" 3.找出下面double型常量的正确表示 A A) -8.0 B) 1.5e-4F C)abcf D) Float.MIN_VALUE 4.定义a为int类型的变量。找出下列中正确的赋值语句选项 A A) int a=6 ; B) a ==3; C) a=3.2f; D) a=”83”; 5.假设以下选项中的变量都已正确定义,找出不合法的表达式 C A) a >= 4 == b<1 B) 'n'-3 C) 'a'=8 D) 'A'%6 6. 在Java中,由Java编译器自动导入,而无需在程序中用import导入的包是 D A)java.applet B)java.awt C)java.util D)ng 7. 在Java中,所有类的根类是 A A)ng.Object B)ng.Class C)java.applet.Applet D)java.awt.Frame 8. 在Java中,用Package语句说明一个包时,该包的层次结构必须是 B A)与文件的结构相同 B)与文件目录的层次相同 C)与文件类型相同 D)与文件大小相同 三、问答题 1.Java是什么?Java平台由那几部分组成? Java是一种面向对象的程序设计语言,Java是健壮和安全的语言,Java是平台无 关的语言。Java平台由Java应用编程接口(API)和Java虚拟机(JVM)组成,这 个平台构成了Java在不同计算机系统中编译和运行的环境。 2.Java数据类型可分为几大类?Java基本数据类型包括哪些? Java中的数据类型可以分为基本类型和对象类型两大类。其中基本数据类型包括:整数类型、实数类型、字符类型、布尔类型。 3.在程序设计的流控制中,有哪些基本结构?在Java语言中是如何实现的? 在程序设计的流控制中,有如下3种基本结构:顺序结构、选择结构、循环结构。 在Java语言种顺序结构由顺序执行的各条语句实现;选择结构由if语句、switch 语句实现;循环结构由while语句、do-while语句和for语句实现。 四、编写程序,利用System.out.println( ) 方法分别输出下列语句 的执行结果: a)将变量m的初值赋值为10,变量n的初值赋值为5。 b)变量m的值加3,n的值加5。 c)求m和n的平均值,并将该值赋予变量p。 d)将m的平方乘以n的平方并赋值给变量q。 请注意各变量定义时所应该使用的数据类型。 a)int m=10; int n=5; System.out.println(m); System.out.println(n); b)m+=3; n+=5; System.out.println(m); System.out.println(n); c)double p; p=(m+n)/2.0; System.out.println(p); d)double q; q=m*m*n*n; System.out.println(q); 《面向对象技术(本)》课程第三阶段练习题 一.填充题 1.下面的程序经运行后,其输出结果是y=1 x=0。 public class Yuedu1{ public static void main(String args[]){ intx,y; x=y=0; do{ y++; x*=x; } while((x>0)&&(y>5)); System.out.println("y="+y+" x="+x); } } 2.下面的程序经运行后,其输出结果是* # * # *。public class Yuedu2{ public static void main(String args[]){ inti; for (i=1;i<6;i++){ if (i%2) { System.out.print("#"); continue; } System.out.print("*"); } System.out.println(); } } 3.下面的程序经运行后,其输出结果是x1=10 x2=6。public class Yuedu3{ public static void main(String args[]){ intx,i; System.out.println("x1="+add(4,6)); System.out.println("x2="+add(3,add(1,2))); } static int add(int x , int y) { return x+y; } } 4.下面的程序经运行后,其输出结果是72。 public class Yuedu3{ public static void main(String args[]){ System.out.println(fun(4)); } static int fun(int n) { int t; if((n==0)||n==1) t=3; else t=n*fun(n-1); return t; } } 5.下面的程序经运行后,其输出结果是* * * * * * * * * * * * * * * * * * * *。 public class Shape{ public static void main(String args[]){ int n=6,i,j; for(i=0;i<=n-2;i++) System.out.print(" "); System.out.println("*"); for(i=1;i<=n-1;i++){ for(j=0;j<=n-i-2;j++) System.out.print(" "); System.out.print("*"); for(j=0;j<=2*i-2;j++) System.out.print(" "); System.out.println("*"); } for(i=n-2;i>=1;i--){ for(j=0;j<=n-i-2;j++) System.out.print(" "); System.out.print("*"); for(j=0;j<=2*i-2;j++) System.out.print(" "); System.out.println("*"); } for(i=0;i<=n-2;i++) System.out.print(" "); System.out.println("*"); } } 二.程序改错 1.下面程序实现对自然数1到10的求和计算,编译时程序出错,请改正。 #1 public class Add_Sum{ #2 public static void main(String args[]){ #3int sum=0; #4 for ( inti=1;i<=10;i++) #5 sum=sum+i; #6 System.out.println("i="+i+", sum="+sum); #7 } #8 } #6改为:System.out.println(“sum=”+sum); 2.下例程序实现对一个16位的长整数,统计0~9这十个数字每一个出现的次数。程序有错,请改正之。 #1 public class StatNum{ #2 public static void main(String args[]){ #3int m; #4int a[]=new int[10]; #5 long aa=1586488654895649; #6 for (inti=0;i<=15;i++){ #7 m=aa %10; #8 a[m]=a[m]+1; #9aa=aa/10; #10 } #11 for (m=0;m<10;m++) #12System.out.println(m+": "+a[m]); #13 } #14 } #5改为:long aa=1586488654895649L; #7改为:m=(int)aa%10; 3.下例程序实现将两个各有6个整数的数组,合并成一个由小至大排列的数组(该数组的长度为12)。程序有错,请改正之。 #1 import java.io.*; #2 public class SortArray{ #3 public static void main(String args[]) throws IOException{ #4intm,n,k; #5intaa[]=new int[6]; #6int bb[]=new int[6]; #7int cc[]=new int[12]; #8 for (inti=0;i<=6;i++){ //利用产生随机数的方式为数组赋值。 #9 m=100*Math.random(); #10aa[i]=m; #11 n=100*Math.random(); #12 bb[i]=n; #13 System.out.println(aa[i]+" "+bb[i]); #14 } #15 for (inti=0;i<6;i++) //先将两个数组进行排序 #16 for (int j=i;j<6;j++){ #17 if (aa[i]>aa[j]) #18 {int t=aa[i];aa[i]=aa[j];aa[j]=t;} #19 if (bb[i]>bb[j]) #20 {int t=bb[i];bb[i]=bb[j];bb[j]=t;} #21 } #22 m=0; //用合并法将两个有序数组排序并合并 #23 n=0; #24 k=0; #25while (m==6 &&n==6) { #26 if (aa[m]<=bb[n]) #27 cc[k]=aa[m];m++; #28 else #29 cc[k]=bb[n];n++; #30 k++; #31} #32while (m==6) #33{ cc[k]=aa[m];m++;k++;} #34while (n==6) #35{ cc[k]=bb[n];n++;k++;} #36for (inti=0;i<12;i++) #37System.out.print(cc[i]+" "); #38 } #39 } #8改为:for(inti=0; i<6; i++) #9改为:m=(int)100*Math.random(); #11改为:n=(int)100*Math.random(); #25改为:while (m<6 &&n<6) #32改为:while(m<6) #34改为:while(n<6) 4.下例程序以递归的方式实现1+2+3+……+n(n = 200)的计算。程序有错,请改正之。#1 class RecuSum{ #2 long Sum1(int n){ #3if (n==1) #4Sum1= 1; #5 else #6Sum1= n+Sum1(n-1); #7 } #8 public static void main(String args[]) { #9int n=200; #10System.out.println("Sum="+Sum1(n)); #11 } #12 } #2改为:static long Sum1(int n){; #4改为:return 1; #6改为:return n+Sum1(n-1); 三.编程题 1.试编写一个程序,将1~500间能同时被2,5,7整除的数打印出来。 1.public class Program{ public static void main( String[] args) { for (inti=1; i<=500; i++) { if ((i%2==0) && (i%5==0) && (i%7==0)) { System.out.println(i); } } } } 2.如果我国的经济增长以每年8%的速度保持稳定不变,试编写一个程序,计算经过多少年可以实现总量翻两番? public class DoubleTimes { public static void main(String[] args) { int n=0; double inc=0.08, sum=1; while (sum<=4) { sum=(1+inc)*sum; n++; System.out.println(“第”+ n + “年达到” + sum); } System.out.println(“一共”+ n + “年实现翻两番。”); } } 《面向对象技术(本)》课程第四阶段练习题 一、填充题 1.超类的private成员不能被子类继承。 2.在声明一个类变量时,前面必须要加上static修饰符。3.import java.util.*;语句可导入Java的实用包中所有的类。 4.方法的覆盖是后期绑定,方法的重载是前期绑定。 5.写出一个表达式:输出角度300的余弦值Math.cos(30*3.14/180)。 二、选择题 B1. 找出有关类的正确说法。 a.类具有封装性,所以类的数据是不能被访问的。 b.类具有封装性,但可以通过类的公共接口访问类中的数据。 c.声明一个类时,必须用public修饰符。 d.每个类中,必须有main方法,否则程序无法运行。 e. A2. 将类的成员的访问权限设置为默认的,则该成员能被 a.同一包中的类访问 b.其它包中的类访问 c.所有的类访问 d.所有的类的子类访问 C 3.下面哪一种是正确的方法重栽 a. int fun(inta,float b){} float fun(inta,float b){} b. float fun(inta,float b){} float fun(intx,float y){} c. float fun(float a){} float fun(float a,float b){} d. flaot fun1(inta,float b){} float fun2(inta,float b){} D 4.下面关于继承的说法那个是正确的 a. 超类的对象就是子类的对象。 b. 一个类可以有几个超类。 c. 一个类只能有一个子类。 d. 一个类只能有一个超类。 C 5.下面关于多态性的说法那个是正确的 a. 一个类中,不能有同名的方法。 b. 子类中不能有和父类中同名的方法。 c. 子类中可以有和父类中同名且参数相同的方法。 d. 多态性就是方法的名字可以一样,但返回的类型必须不一样。 三、简答题 1.什么是类,什么是对象? 在面向对象的程序设计语言中,类是一种特殊属性类型,类可以看作具有共同属性和行为的事物的抽象。在类中包含了变量和与变量有关的操作(方法)。对象是类的实例。类和对象的关系就如同属性类型和变量的关系。例如,“电话”类代表电话这一类事物,而电话的对象代表一个具体的电话。 2.类的封装的目的是什么? 当外部的类可以没有限制地直接访问、修改类中变量时,是非常危险的。因此必须限制类的外部程序对类内部成员的访问,这就是类的封装目的。类把属性和方法封装起来,同时创建一些允许外部访问的方法,通过这样的方法来访问类的成员变量。封装的另一目的是细节屏蔽,便于程序功能的扩展和程序的维护。 3.Java中有几种访问权限,各种访问权限的级别是什么? Java中有四种访问权限:公有的(public)、保护的(protected)、默认的、私有的(private)。各种权限的访问级别如下表: 4.null、this、super对象运算符分别表示什么? null表示空对象,即没有创建类的任何实例。当我们声明对象时,如果没有用new实例化时,此时它就被初始化为一个特殊的值“null”。而当我们在类的方法定义中需要引用正在使用该方法的对象时,可以用“this”表示。uper表示对某个类的超类的引用,用super来引用被子类屏蔽的超类的成员。 5.什么是最终类和抽象类? 不能被继承的类称为最终类。在声明类时,用final将类声明为最终类,这样此方法不会在子类中被覆盖(即子类中不能有和此方法同名的方法)。抽象类则是必须被子类覆盖的类。在声明类或方法时,用关键字abstract可以将类或方法声明为抽象类或方法。抽象方法没有方法体,含有抽象方法的类即为抽象类,它是不能实例化的类。 6.什么是多态性,什么重载和覆盖? 多态性是面向对象程序设计的重要特征,是指同一个名字的若干个方法,有不同的实现(即方法体中的代码不一样)。多态性是通过方法的重载(overloading)和覆盖(override)来实现。方法的重载是指在一个类中,有若干个方法名字相同,但方法的参数不同,在调用时,根据参数的不同来决定执行那个方法。重载的关键是参数必须不同,即参数的类型或个数必须不同。如果在子类和超类中有同名的方法(参数也相同),子类中的方法将覆盖超类的方法,这就是覆盖。通过覆盖可以使同名的方法在不同层次的类中有不同的实现。 四、编程题 1.声明一个类Person,成员变量有姓名、年龄、性别。有成员方法以显示姓名、年龄和性别。 class Person { String name; int age; String sex; public String showName() { return name; } public intshowAge() { return age; } public String showSex;() { return sex; } } 2.声明一个矩形类Rectangle,提供2个方法计算矩形的周长和面积。并用main方法来测试。 public class Retangle { private double length; private double width; public Retangle(double l, double w) { length=l; width=w; } public double calcPerimeter() { return 2*(length + width); } public double calcAera() { return length * widthv; } public static woid main( String[] args) { Retanglearetangle = Retangle(640m480); System.out.println(“面积是:” + aretangle.calcArea() + “周长是:” + aretangle. calcPerimeter () ); } }