自考Java语言程序设计(一)课后习题及答案_第1页
自考Java语言程序设计(一)课后习题及答案_第2页
自考Java语言程序设计(一)课后习题及答案_第3页
自考Java语言程序设计(一)课后习题及答案_第4页
自考Java语言程序设计(一)课后习题及答案_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自考Java语言程序设计(一)课后习题及答案

自考Java语言程序设计(一)第一章Java语言概述课后习题

一、Java语言概述

1.Java语言有哪些特点?

2.什么叫做类?什么叫做对象?

3.简述Java的运行机制。

4.简述Java应用程序的开发流程。

5.当初Sun公司发展Java的原因是

(a)要发展航空仿真软件

(b)要发展人工智能软件

(c)要发展消费性电子产品

6.Java是从哪种语言改进并重新设计?

(a)Ade

(b)C++

(c)Pascal

7.Java因为什么快速发展而走红?

(a)个人计算机与网络

(b)游戏软件

(c)系统软件

8.Java程序的种类有:

(a)内嵌于Web文件中,由浏览器来观看的

(b)可独立运行的

(c)服务器端的

9.Java是面向对象语言,对象是客观事物的,对象与之是--对

应的,它是很具体的概念。

10.判断:用Javac编译Java源文件后得到代码叫字节码。()

参考答案

1.答:面向对象、简单、平台无关性、安全性、内存管理、分

布式应用、多线程、动态、解释运行,高效能

2.答:在面向对象编程中,具体的客观实体称为对象,对象就

是数据加方法。对象在程序中是通过一种抽象数据类型来描述的,这

种抽象数据类型称为类。类是对具有相同属性和方法的一组相似对象

的抽象,或者说类是对象的模板

3.答:Java程序的运行必须经过编写、编译、运行三个步骤。

编写是指在Java开发环境中进行程序代码的输入过程,最终形成后

缀名为Java源文件。编译是指使用Java编译器对源文件进行错误排

查的过程,编译后将生成后缀名为.class的字节码文件。运行是指使

用Java解释器将字节码文件翻译成机器代码,在cpu上运行并显示

结果的过程。这一过程如图所示。

4.Java应用程序的运行经过编写、编译、运行三个步骤。

第1步,编写程序。使用记事本或其他软件编写程序的源代码,

将源代码保存为文件filename.]ava文件。

第2步,编译程序。在MS-DOS命令窗口,将当前目录转换到

Java源程序所在的保存目录;输入“javame.java”形式的命令进行程

序编译。

第3步,执行程序。在同样的命令窗口中输入“javame”形式的

命令执行程序。

完成了程序的开发,查看相应t目录,其中应该具有两个文件,

分别是XXXX.java和XXXX.clasSo

5.c

6.b

7.a

8.AppletApplicationServlets

9.软件模型

10.true

自考Java语言程序设计(一)第二章数据类型和流程控制课后习

二、数据类型和流程控制

1.现有语句:Strings="Example";则下面哪些语句是合法语

句?

A.s»>=3;B.s[3]="x";

C.inti=s.length();D.Stringt="For"+s;

E.s=s+10;

2.下面哪些是保留字?

A.runB.defaultC.implementD.import

3.下面声明float变量的语句合法的有:

A.floatfoo=-1;B.floatfoo=1.0;

C.floatfoo=42el;D.floatfoo=2.02f;

E.floatfoo=3.03d;F.floatfoo=0x0123;

4.下面方法中的“返回类型无效”应该是什么?

publicclassRetumlt

return无效methodA(bytex,doubley){

return(short)x/y*2;

)

)

5.以下哪两个表达式是等价的:

A.3/2B.3<2C.3*4

D.3«2E.3*2A2F.3«<2

6.指出正确的表达式

A、byte=128

B、Boolean=null;

C、longl=0xfffL;

D、double=0.9239d;

7.分析下列程序的执行结果:

(1)publicclassTest{

publicstaticvoidmain(Stringargs[]){

inti=oxFFFFFFFl;

intj=-i;

System.out.println("j="+j);

)

)

(2)publicclassTest{

publicstaticvoidmain(String[]args){

System.out.println(6A3);

)

)

(3)publicclassFooBar{

publicstaticvoidmain(String[]args){

inti=0,j=5;

tp:

for(;;i++){

for(;;-j)

if(i>j)

breaktp;

System.out.println("i="+i+",j="+j);

)

(4)publicclassTest{

publicstaticvoidmain(){

inti=1,j=10;

do{

if(i++>-j)

continue;

}while(i<5);

System.out.println("i="+i+"j="+j);

)

)

(5)classValue{

publicinti=15;

)

publicclassTest{

publicstaticvoidmain(Stringargv[]){

Testt=newTest();

t.first();

)

publicvoidfirst(){

inti=5;

Valuev=newValue();

v.i=25;

second(v,i);

System.out.println(v.i);

)

publicvoidsecond(Valuev,inti){

i=0;

v.i=20;

Valueval=newValue();

v=val;

System.out.println(v.i+""+i);

)

)

8.选出合理的标识符

A、_sysl_lll

B、2mail

C、$change

D^class

9.判断:一个方法最多能有一个return语句()

10.Java语言中一个Char类型的数据占用2个字节大小的内

存空间0

参考答案

1.cde

2.b,d

3.a,d,f

4.double

5.c,d

6.d

7.(1)c(2)5(3)i=0,j=-l

(4)i=5j=6(5)15020

8.ac

9.true

lO.ture

自考Java语言程序设计(一)第三章类与对象课后习题

三、类与对象

1.什么叫引用类型,对象是引用类型吗?

2.什么是类成员,什么是实例成员?他们之间有什么区别?

3.判断:数组、类和接口都是引用数据类型()

4.判断:类A和类B位于同一个包中,则除了私有成员,类

A可以访问类B的所有其他成员0

5.下面哪个修饰符修饰的变量是所有同一个类生成的对象共

享的()

A^publicB>privateC>staticD、final采集者退散

6.下面关于java中类的说法哪个是不正确的()

A、类体中只能有变量定义和成员方法的定义,不能有其他

语句。

B、构造函数是类中的特殊方法。

C、类一定要声明为public的,才可以执行。采集者退散

D、一个java文件中可以有多个class定义。

7.下列哪个类声明是正确的0

AabstractfinalclassHl{…}

Babstractprivatemove(){…}

Cprotectedprivatenumber;

DpublicabstractclassCar{…}

8.下述哪些说法是正确的?(多选)

A、实例变量是类的成员变量

B、实例变量是用static关键字声明的

C、方法变量在方法执行时创建

D、方法变量在使用之前必须初始化

9.设计一个动物类,它包含动物的基本属性。例如名称、大

小、重量等,并设计相应的动作,例如跑、跳、走等。

10.设计一个长方形类,成员变量包括长和宽。类中有计算

面积和周长的方法,并有相应的set方法和get方法设置和获得长和

宽。编写测试类测试是否达到预定功能。要求使用自定义的包。

参考答案

1.答:引用类型是指该类型的标识符表示的是一片内存连续

地址的首地址。对象是引用类型。

2.答:Java中使用static修饰的变量和方法称为类变量(或

称静态变量)和类方法(或称静态方法),没用static修饰符的变量和

方法称为实例变量和实例方法。

类成员是指该成员属于这个类,由这个类所创建的所有对象

共同拥有,该成员仅在类的存储单元中存在,这个类所创建的所有对

象中仅存储一个指向该成员的引用。任何一个该类的对象改变了类

成员,其他对象同样会发生改变。对于类成员既可以使用对象访问,

也可以使用类名直接进行访问,并且在类方法中只能访问类变量,

而不能访问实例变量。

实例成员是指该成员由每一个对象个体独有,对象的存储空

间中的确有一块空间用来存储该成员,不同对象的实例成员不同,任

何一个对象改变了实例成员,只会影响这个对象本身,其他对象中

的实例成员不会发生改变。对于实例成员只能通过对象来访问,不能

通过类名进行访问,在实例方法中既可以访问实例变量,也可以访

问类变量

3.true

4.true

5.C

6.C

7.D

8.ACD

9.答:

publicclassAnimal{

privateStringname;

privatedoubleweight;

privateintlength;

privateStringsex;

publicvoidrun(){

System.out.println("theanimalisrunning!");

)

publicvoidjump(){

System.out.println("theanimalisjumping!");

)

publicvoidwalk(){

System.out.println("theanimaliswalking!");

)

)

10.答:

packagemypackage.math;

classRectangle{

privateintlength;

privateintwidth;

publicRectangle(intlength,intwidth){

this.length=length;

this.width=width;

)

publicvoidset(intlength,intwidth){

this.length=length;

this.width=width;

)

publicvoidget(){

System.out.println("此长方形的长为"+length+"宽为"+width);

)

publicintgetLength(){

returnlength;

)

publicintgetWidth(){

returnwidth;

)

publicintcalculatePerimeter(){

return2*(length+width);

publicintcalculateArea(){

return(length*width);

)

publicvoidprint(){

System.out.println("此长方形的周长为

"+calculatePerimeter()+"面积为"+calculateArea());

)

)

classTest{

publicstaticvoidmain(String[]args){

Rectanglemyrectangle=newRectangle(15,10);

myrectangle.get();

myrectangle.print();

myrectangle.set(20,15);

System.out.println("长方形的长是"+myrectangle.getLength()+”

宽是"+myrectangle.getWidth());

myrectangle.print();

)

)

自考Java语言程序设计(一)第四章方法与构造函数课后习题

四、方法与构造函数

1.Java的访问限定修饰符有几种,各自的访问权限是什么?

2.如何创建自己的包,如何引入包?

3.下面哪一个是类Myclass的构造函数?

classMyclass

publicvoidMyclassQ{}

publicstaticMyclass(){}

publicMyclass(){}

publicstaticvoidMyclassQ{}

)

4.判断:类体中private修饰的变量在本类中能访问,类生成

的对象也能访问。()

5.判断:一个类中,只能拥有一个构造器方法。()

6.Java中类成员的限定词有以下几种:private,public,

,O其中,的限定的范围最大。

7、被关键字修饰的方法是不能被当前类的子类重

新定义的方法

8.设计Point类用来定义平面上的一个点,用构造函数传递

坐标位置。编写测试类,在该类中实现Point类的对象。

9.编写程序说明静态成员和实例成员的区别。

10.设计雇员Employee类,记录雇员的情况,包括姓名、年

薪、受雇时间,要求定义MyDate类作为受雇时间,其中包括工作的

年、月、日,并用相应的方法对Employee类进行设置。编写测试类

测试Employee类。要求使用自己的包。

参考答案

1.答:Java的访问限定修饰符有4种,分别使public>protected>

private和默认修饰符。用public修饰的类或成员拥有公共作用域,

表明此类或类的成员可以被任何Java中的类所访问,是最广泛的作

用范围。用protected修饰的变量或方法拥有受保护作用域,可以被同

一个包中所有的类及其他包中该类的子类所访问。用private修饰的

变量或方法拥有私有作用域,只能在此类中访问,在其他类中,包括

该类的子类也是不允许访问的,private是最保守的作用范围。没有

任何修饰符拥有默认访问权限(友好访问权限),表明此类或类的成

员可以被同一个包中的其它类访问本文

2.答:创建自己的包只要将package语句作为Java源文件的

第一句就可以了。例

packagemyPackage;声明创建了一个名为myPackage的包。

Java使用import语句来引入包及其中的类。例如import

myPackage.*;就引入了myPackage包中所有的类。

3.答:publicMyclass(){}是类Myclass的构造函数。

4.false

5.false

6.friendly>protected>public

7.Private

8.答:

classPoint

{intx,y;

Point(inta,intb)

{x=a;

y=b;

)

)

publicclassA

{publicstaticvoidmain(String[]args)

{Pointpl,p2;

pl=newPoint(10,10);

p2=newPoint(23,35);

)

)

9.答:

classStaticTest{

inti=5;

staticintj=5;

voidprint(){

System.out.println("i="+i);

System.out.println("j="+j);

)

staticvoidclassprint(){

//System.out.println("i="+i);

System.out.println("j="+j);

)

)

classTest{

publicstaticvoidmain(String[]args){

//System.out.println(StaticTest.i);

System.out.println(StaticTest.j);

//StaticTest.print();

Staticlest.classprint();

Staticlestst=newStaticlest();

System.out.println(st.j);

System.out.println(st.j);

st.print();

st.classprint();

)

)

10.答:

packagemypackage.employee;

classMyDate{

privateintyear;

privateintmonth;

privateintday;

publicMyDate(intyear,intmonth,intday){

this.year=year;

this.month=month;

this.day=day;

)

publicintgetYear(){

returnyear;

)

)

publicclassEmployee{

privateStringname;

privatedoublesalary;

privateMyDatehireDay;

publicEmployee(Stringname,doublesalary,MyDateday){

=name;

this.salary=salary;

hireDay=day;

publicvoidprint(){

System.out.println(name+""+salary+""+hireYear());

)

publicinthireYear(){

returnhireDay.getYear();

)

)

classTestEmployee{

publicstaticvoidmain(String[]args){

Employeea=newEmployee("李明",20000,new

MyDate(2000,10,l));

Employeeb=newEmployee("王强",24000,new

MyDate(1995,8,12));

a.print();

b.print();

)

)

自考Java语言程序设计(一)第五章类的继承课后习题

五、类的继承

1.什么是继承?什么是父类?什么是子类?继承的特性可给面向

对象编程带来什么好处?什么是单重继承?什么是多重继承?

2.观察下面的程序片断,指出其中的父类和子类,以及父类

和子类的各个域和方法。

classSuperClass

(

intdata;

voidsetData(intnewData)

(

data=newData-

)

intgetData()

(

returndata-

)

)

classSubClassextendsSuperClass

(

intsuhData;

voidsetSubData(intnewData)

suhData=newData;

intgetData()

(

returnsubData;

)

)

3.“子类的域和方法的数目一定大于等于父类的域和方法的

数目”,这种说法是否正确?为什么?

4.在Java程序中,通过类的定义只能实现单重继承0

5.下列哪些说法是正确的?

A、Java语言只允许单一继承

B、Java语言只允许实现一个接口

C、Java语言不允许同时继承一个类并实现一个接口

D、Java语言的单一继承使得代码更加可靠

6.Java中所有类都是类的子类。

7.请写出下面程序的运行结果。

publicclassTestextendsTT{

publicvoidmain(Stringargs[]){

Testt=newTest("Tom");

)

publicTest(Strings){

super(s);

System.out.println("Howdoyoudo?");

)

publicTest(){

this("IamTom");

)

}

classTT{

publicTT(){

System.out.println("Whatapleasure!");

)

publicTT(Strings){

this();

System.out.println("Iam"+s);

)

)

结果:________

8.父类的成员在子类中的访问权限由决定。

9.对象的使用包括引用对象的成员变量和方法。通过运算符

就能实现对对象成员变量的访问和对象

10.Java是面向对象语言,对象是客观事物的,对象与之是一

一对应的,它是很具体的概念。

参考答案:

1.答:继承是面向对象程序设计中两个类之间的一种关系。

当一个类获取另一个类中所有非私有的数据和操作的定义作为它自

己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的

类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子

类。

面向对象程序设计中的继承,可使得程序结构更加清晰,降

低了编码和维护的工作量。如果一个类只能有一个父类,则这种继承

关系称为单重继承;如果一个类可以有多个父类,则这种继承关系称

为多重继承。

2.答:

父类SuperClass

父类的域data

父类的方法setData(),getData()

子类SubClass

子类的域data,subData

子类的方法setSubData。,setData(),getData()采集者退散

3.答:这种说法是错误的,因为子类不一定能继承父类的所

有域和方法,它只能继承所有非私有的域和方法。如果子类在继承之

外自己定义的域和方法数目小于父类中私有成员的数目,则子类的域

和方法的数目小于父类的域和方法的数目I

4.true

5.AD

6.Object

7.答:

Whatapleasure!

IamTom

Howdoyoudo?

8.访问权限修饰符

9.

10.软件模型

自考Java语言程序设计(一)第六章重载与多态课后习题

六、重载与多态

1.判断:接口中的所有方法都没有被实现。0

2.方法重载是指()

A.两个或两个以上的方法取相同的方法名,但形参的个数或

类型不同

B.两个以上的方法取相同的名字和具有相同的参数个数,但

形参的类型可以不同

C.两个以上的方法名字不同,但形参的个数或类型相同

D.两个以上的方法取相同的方法名,并且方法的返回类型相

3.什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方

法的重载有何不同?

4.解释this和super的意义和作用。

5.什么是多态?面向对象程序设计为什么要引人多态的特性?

使用多态有什么优点?

6.Java程序如何实现多态?有哪些方式?

7.根据下面的要求编程实现复数类ComplexNumbero

(1)复数类ComplexNumber的属性

,m_dRealPart实部,代表复数的实数部分。

•m_dlmaginPart虚部,代表复数的虚数部分。

(2)复数类ComplexNumber的方法

•ComplexNumber()构造方法,将实部、虚部都置为0。

,ComplexNumber(doubler,doublei)构造方法,创建复数对象

的同时完成复数的实部、虚部的初始化;r为实部的初值,i为虚部的

初值。

•getRealPart()获得复数对象的实部。

,getlmaginaryPart。获得复数对象的虚部。

,setRealPart(doubled)把当前复数对象的实部设置为给定的形

参的数字。

setlmaginaryPart(doubled)把当前复数对象的虚部设置为给定

形参的数字。

•complexAdd(ComplexNumberc)当前复数对象与形参复数对

象相加,所得的结果也是复数值,返回给此方法的调用者。

,complexAdd(doublec)当前复数对象与形参实数对象相加,

所得的结果仍是复数值,返回给此方法的调用者。

,complexMinus(ComplexNumberc)当前复数对象与形参复数

对象相减,所得的结果也是复数值,返回给此方法的调用者。

8.什么是接口?为什么要定义接口?接口与类有何异同

9.一个类如何实现接口?实现某接口的类是否一定要重载该

接口中的所有抽象方法?

10.接口是否可以被继承?阅读下面的代码,试写出

Subinterface中的抽象方法。

interfaceSupinterface

(

publicabstractintsupMethod();

)

interfaceSubinterfaceextendsSupinterface

(

publicabstractstringsubMethod();

)

参考答案:

1.true

2.A

3.答:子类重新定义父类中已经存在的方法,称为方法的覆

盖。注意:方法覆盖与域的隐藏不同。子类重新定义父类已有的域,

并不能完全取代它从父类那里继承的同名的域,这个域仍然占用子

类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方

法时,从父类那里继承来的方法将被新方法完全取代,不再在子类

的内存空间中占一席之地。与方法的覆盖不同,重载不是子类对父类

同名方法的重新定义,而是在一个类中定义了同名的不同方法。

4.答:关键字this指代当前类的当前对象,关键字s叩ei•指

代当前类的直接父类对象。

5.答:一个类中存在多个同名的方法,称为多态。把抽象功

能和目的相同,而具体实现因不同情况而异的方法命名为同名方法,

符合面向对象程序设计中抽象、提升概念,封装、隐藏细节的特点,

从而提高了程序的简洁性和可读性,降低了类和程序模块直接的相互

耦合和依赖。

6.答:Java程序通过覆盖和重载两种方式来实现多态。覆盖

是子类重新定义父类中已有的方法,重载是在一个类内部定义与已存

在的方法同名但是参数列表不同的方法。

7.答:

publicclassch5_e5_12

publicstaticvoidmain(StringargslJ)

ComplexNumbercNumber_l=

newComplexNumber(3,-5);

ComplexNumbercNumber_2=

newComplexNumber(2,2);

doubled=10.0;

System.out.println(cNumber_l.toString()+"加"

+cNumber_2.toString()+"等于"

+cNumber_plexAdd(cNumber_2).toString());

System.out.println(cNumber_l.toString()+"力口"

+d+"等于"

+cNumber_plexAdd(d).toStringO);

System.out.println(cNumber_l.toString()+"减"

+cNumber_2.toString()+"等于"

+cNumber_plexMinus(cNumber_2).toString());

System.out.println(cNumber_l.toString()+"减"

+d+"等于"

+cNumber_plexMinus(d).toString());

System.out.println(cNumber_l.toString()+"乘"

+cNumber_2.toString()+"等于"

+cNumber_plexMulti(cNumber_2).toString());

System.out.println(cNumber_l.toString()+”乘

+d+"等于"

+cNumber_plexMulti(d).toString());

)

)

classComplexNumber

(

〃域

privatedoublem_dRealPart;

privatedoublem_dImaginPart;

〃构造方法

ComplexNumber()

(

m_dRealPart=0.0;

m_dImaginPart=0.0;

)

ComplexNumber(doubler,doublei)

(

m_dRealPart=r;

m_dImaginPart=i;

)

ComplexNumber(ComplexNumberc)

m_dRealPart=c.getRealPart();

m_dImaginPart=c.getImaginaryPart();

)

//get,set方法

doublegetRealPart()

(

returnm_dRealPart;

)

doublegetImaginaryPart()

(

returnm_dImaginPart;

)

voidsetRealPart(doubled)

(

m_dRealPart=d;

)

voidsetImaginaryPart(doubled)

(

m_dImaginPart=d;

)

〃复数运算方法

ComplexNumbercomplexAdd(ComplexNumberc)

returnnewComplexNumber(

this.m_dRealPart+c.getRealPart(),

this.m_dImaginPart+c.getImaginaryPart());

)

ComplexNumbercomplexAdd(doublec)

(

returnnewComplexNumber(

this.m_dRealPart+c,this.m_dImaginPart);

)

ComplexNumbercomplexMinus(ComplexNumberc)

(

returnnewComplexNumber(

this.m_dRealPart-c.getReaIPart(),

this.m_dImaginPart-c.getImaginaryPart());

)

ComplexNumbercomplexMinus(doublec)

returnnewComplexNumber(

this.m_dRealPart-c,this.m_dImaginPart);

ComplexNumbercomplexMulti(ComplexNumberc)

returnnewComplexNumber(

this.m_dRealPart*c.getRealPart()

-this.m_dImaginPart*c.getImaginaryPart(),

this.m_dRealPart*c.getImaginaryPart()

+this.m_dImaginPart*c.getRealPart());

)

ComplexNumbercomplexMulti(doublec)

(

returnnewComplexNumber(

this.m_dRealPart*c,this.m_dImaginPart*c);

)

//toStringO

publicStringtoStringO

(

return"("+m_dRealPart+"+"

+m_dImaginPart+"i"+

)

)

8.答:接口是用来实现类间多重继承功能的结构。接口与类

相似,但是接口中只能包括常量和抽象方法。定义接口相当于定义了

一组抽象的功能、属性集合,可以使了ava程序的类层次结构更加合

理,并实现多重继承。

9.答:使用关键字implements可以定义类实现某接口。实

现某接口的类如果不是抽象类,则需要通过重载来实现该接口中的所

有抽象方法;如果这个类是抽象类,则它可以不必实现该接口中的所

有抽象方法。

10.答:接口可以被继承。

Subinterface中的抽象方法有:publicabstractintsupMethod();

和publicabstractstringsubMethodQ;两个。

自考Java语言程序设计(一)第七章Java常用类库介绍课后习

七、Java常用类库介绍

1.指出下列陈述是对还是错,并做出解释。

(1)当String对象用==比较时一,如果String包括相同的值

则结果为true。

(2)一个String类的对象在其创建后可被修改。

2.对于下列描述,各写出一条语句完成要求的任务

(1)比较si中的串和s2中的串的内容的相等性;

(2)用+=向串si附加串;

(3)判断si中串的长度;

3.说明capacity。与length。用法上的差异?

4.如果ch为StringBuffer对象,ch="JavaApple",下列结果

为何?

(1)ch.insert(3/p')(2)ch.append("Basic")

(3)ch.setlength(5)(4)ch.reverse()

5.Math类中提供用来常数n和e的静态属性分别是什么?

6.下面关于Vector类的说法正确的是()

(1)类Vector在java.util包中。

(2)一个向量(Vector)对象存放的是一组有序的对象。

(3)一个向量(Vector)对象大小可以根据存放的元素个数

的增加而自动增加。

(4)一个向量(Vector)对象中每个元素可以是不同类型的

对象。

7.有三个字符串,编写程序找出其中最大者。

8.编写一个程序,设定一个有大小写字母的字符串,先将字

符串的大写字符输出,再将字符串中的小写字符输出。

9.设定5个字符串,要求只打印那些以字母“b”开头的串,

编写程序完成。

10.设定一个有大小写字母的字符串和一个查找字符,使用

类String方法IndexOf。来判断在该字符串中该字符出现的次数。

参考答案

1.答:

(1)错。用==操作符比较String对象实际上是判断它们在

内存中是否为同一对象,并不是判断它们的值是否相同。

(2)错。String类的对象是常量。它们被创建后不可被修改。

2.答:

(1)sl.equals(sl,s2);

(2)sl+=s2;

(3)sl.length();

3.答:capacity()返回字符串对象的当前缓冲区的长度,length()

返回字符串对象字符的长度。

4.答:

(1)结果:JavpaApplet

(2)结果:JavpaAppletBasic

(3)结果:ch长度变为5

(4)结果:apvaJ

5.答:PLE

6.答:⑶

7.

publicclassmaxi

publicstaticvoidmain(Stringargs[])

Stringsl="HelloJava";

Strings2="JavaApplet";

Strings3="Java";

Strings;

if(sl.compareTo(s2)<0)

s=s2;

elses=sl;

if(pareTo(s3)<0)

s=s3;

Systrm.out.println("big="+s);

)

)

8.

publicclassout

(

publicstaticvoidmain(StringargslJ)

(

Stringsl="HelloJava";

StringBufferbufup=newStringBuffer();

StringBufferbuflow=newStringBuffer();

for(int1=0;I

{if(s1.charAt(i)<97)

{bufup.append(sl.charAt(i));

bufup.append('');

)

else{

buflow.append(sl.charAt(i));

buflow.append(");

)

)

System.out.println("s1="+sl);

System.out.println("uppercase="+bufup);

System.out.println("lowercase="+buflow);

)

)

9.

publicclassprin_b

{publicstaticvoidmain(Stringargs[J)

(

Stringsl="hello";

Strings2="bee";

Strings3="java";

Strings4="brove";

Strings5="bag";

if(sl.indexOf("b')==0)

System.out.println(s1);

if(s2.indexOf('b')==0)

System.out.println(s2);

if(s3.indexOf('b')==0)

System.out.println(s3);

if(s4.indexOf("b')==0)

System.out.println(s4);

if(s5.indexOf('b')==0)

System.out.println(s5);

)

)

10.

publicclassppp

(

publicstaticvoidmain(StringargslJ)

(

Stringsl="abcdefghi";

intnum=0;

for(inti=0;i

{i=sl.indexof('e',i);

num++;

System.out.print("sl="+sl+"e=");

if(num==0)

System.out.println("nofound");

elseSystem.out.println(num);

)

自考Java语言程序设计(一)第八章Java异常处理及输入输出

流简介课后习题

八、Java异常处理及输入输出流简介

1.列出5个常见的异常。

2.写出Java语言的异常处理机制的优点。

3.为什么异常处理技术不应该用于常规的程序控制?

4.引起异常产生的条件是什么?

5.异常没有被捕获将会发生什么?

6.编写一个程序,以说明catch(Exceptione)如何捕获各种

异常。

7.下面的代码段中finally语句块会被执行吗?

publicclassExceptionExam3

publicstaticvoidmain(String[]args)

(

try

(

int[]a=newint[3];

System.exit(O);

)

catch(ArrayIndexOutOfBoundsExceptione)

{System.out.println("发生了异常");}

finally

{System.out.println("Finally");}

)

)

8.throws的作用是什么?

9.应在程序的什么地方使用异常处理?

10.下面的代码有什么错误吗?

classExceptionExam{,,,}

thrownewExceptionExam();

11.异常类型匹配的处理方式。程序功能:首先输出“这是

一个异常处理的例子”,然后在你程序中主动地产生一个

ArithmeticException类型被0除而产生的异常,并用catch语句捕获

这个异常。最后通过ArithmeticException类的对象e的方法

getMessage给出异常的具体类型并显示出来。

12.根据所给创建自定义异常类的使用格式,编写一个自定

义异常的小程序。

13.什么叫流?流式输入输出有什么特点?

14.Java流被分为字节流、字符流两大流类,两者有什么区

别?

15.File类有哪些构造函数和常用方法?

16.利用文件输入输出流编写一个实现文件拷贝的程序,源

文件名和目标文件名通过命令行参数传入。

17.编写一个程序,在当前目录下创建一个子目录test,在这

个新创建的子目录下创建一个文件,并把这个文件设置成只读。

18.位置指针的作用是什么?RandomAccessFile类提供了哪

些方法实现对指针的控制?

19.编写一个程序,从键盘输入一串字符,统计这串字符中

英文字母、数字、其他符号的字符数。

20.编写一个程序,从键盘输入一串字符,从屏幕输出并将

其存入a.txt文件中。采集者退散

21.编写一个程序,从键盘输入10个整数,并将这些数据排

序后在标准输出上输出。

参考答案

I.答:内存耗尽、数组下标超出边界、被0除、非法的方法

参数、算法溢出处。

2.答(1)Java通过面向对象的方法进行异常处理,把各种

异常事件进行分类,体现了良好的层次性,提供了良好的接口,这种

机制对于具有动态特性的复杂提供了强有力的控制方式。(2)Java

的异常处理机制使得处理异常的代码和“常规”代码分开,减少了代

码的数量,增强了程序的可读性。(3)Java的异常处理机制使得异

常事件可以沿调用栈自动向上传播,而不是C语言中通过函数的返

回值来传播,这样可以传递更多的信息,并且简化了代码的编写。(4)

由于把事件当成事件处理,利用类的层次性我们可以把多个具有相同

父类的异常统一处理,也可以区分不同的异常分别处理,使用非常灵

活。

3.答:a.异常处理用于不经常发生但通常导致程序终止的

情况,因此要求编程人员为编译器的优化执行实现异常处理。b.常

规控制结构的控制流程通常比异常的更为清晰、交流更高。c.在发

生异常,并且没有释放异常发生之前分配的资源时,堆栈是展开的,

所以会出现一些问题。d.“额外的”异常会妨碍真正错误类型的异常。

这种使程序员更难以跟踪大量的异常。

4.答:异常产生的方式有3种。第一种是在某些内部错误时,

Java虚拟机可以产生异常,该异常不在你的程序控制范围内,通常不

作处理。第二种是由程序代码中的错误引起,这种异常需要你的程序

处理。第三种是通过使用throw语句手动生成的异常。

5.答:未捕获的异常最终会导致程序非正常终止。

6.publicclassExceptionExam

publicstaticvoidmain(String[]args)

inti=0;

i=3/i;〃将产生算术异常。

)

catch(ArithmeticExceptione)〃找到了匹配的异常,执行该catch

块。

System.out.println("发生了ArithmeticException异常)

)

catch(AarryIndexOutOfBoundsExceptione)〃不是匹配的异常,

且不会再捕获

//异常,如果发生数组索引超出范围所产生的异常,将执行该

catch块。

System.out.println("发生了AarrylndexOutOfBoundsException

异常)

catch(Exceptione)

〃前两个catch块均无法捕获try块中发生的异常时,才会执

行该catch块。

(

System.out.println("发生了异常");

)

finally

{System.out.println("执行dFinally");}

)

)

7.答:无论是出于何种原因,只要执行离开try/catch代码块,

就会执行finally代码块。即无论try是否正常结束,都会执行finally

定义的最后的代码。如果try代码块中的任何代码或它的任何catch

语句从方法返回,也会执行finally代码块。但本题中在try代码块

中执行了“System.exit(O);”语句,执行了这一语句后,Java虚拟机

(JVM)将被终止。那么finally语句块一定不会被执行。

8.答:在某些情况下,如果一个方法产生自己不处理或无法

处理的异常,它就必须在throws子句中声明该异常。

9.答:通常,可以采用两种方式来报告错误:返回值和异常。

在Java中异常处理很常用,虽然返回错误代码在某些情况下是一种

有效的方式,但是异常处理可以提供强大的结构化方法来处理异常。

所以需要处理代码中的错误时就可以采用异常的方法进行处理。

10.答:ExceptionExam不是继承(扩展)Throwable的子类,

只有Throwable的子类可以由throw抛出。所以,这一段代码会出错。

11.

publicclassExceptionExam1

(

publicstaticvoidmain(String[]args)

(

try

{inti=0;

i=3/i;

)

catch(ArithmeticExceptione)

(

System.out.println("异常是:"+e.getMessage());

)

finally

(

System.out.println("finally语句被执行");

)

}

注意:如果在catch语句中声明的异常类是Exception,catch

语句也能正确地捕获,这是因为Exception是ArithmeticException的

父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的

参数为Exception,即说明异常的类型为Exception0

12.

classExcplextendsException

()

classExcp2extendsExcpl

()

publicclassExceptionExam7

(

publicstaticvoidmain(String[]args)throwsException

(

try

(

thrownewExcp2();

)

catch(Excp2e)

System.out.println("catchl");

thrownewExcpl();

catch(Excp1e)

System.out.println("catch2");

thrownewException();

)

catch(Exceptione)

(

System.out.println("catch3");

)

finally

(

System.out.println("finally");

)

)

)

说明:自定义异常类,关键是选择继承的超类一一必须是

Exception或者其子类。用异常代表错误,而不要再使用方法返回值。

13.答:所谓流是指同一台计算机或网络中不同计算机之间

有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽

象为数据流。数据流可分为输入流和输出流,输入流代表从其他设备

流入计算机的数据序列,输出流代表从计算机流向外部设备的数据序

列。

流式输入输出的特点是数据的获取和发送沿数据序列的顺序

进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读

入或送出之后才能被读写。所以流和队列一样,只能以“先进先出”

的方式对其中的数据进行读写,而不能随意选择读写的位置。

14.答:两者都作为Object类的直接子类,基本输入流(无

效Stream)和基本输出流(Outputstream)是处理以8位字节为基本

单位的字节流类;Reader和Writer类是专门处理16位字符流的类。

15.答:构造函数有:

(1)publicFile(Stringpathname):创建一个对应于参数

pathname的File类对象。参数pathname是包含目录和文件名的字符

串。如果没有文件名,则代表目录。

(2)publicFile(Stringparent,Stringchild):该构造函数将

pathname分成两部分parent和child,参数parent表示目录或文件所

在路径,参数child表示目录或文件名称。

(3)publicFile(Fileparent,Stringchild):该构造函数与上面

一个不同在于将parent的参数类型由String变为File,代表parent是

一个已经创建的File类文件对象(指向目录)。

常用方法有:

(1)publicbooleancanWrite():返回文件是否可写。

(2)publicbooleancanRead():返回文件是否可读。

(3)publicbooleancreateNewFile():当文件不存在时创建文

件。

16.

importjava.io.*;

classCopyFile{

publicstaticvoidmain(String[]args){

Stringfilel,file2;

intch=0;

try

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论