我的JAVA习题集2 下载本文

习题2

一、判断题

1.一个类定义了一个或多个构造方法,则Java不提供默认的构造方法。( ) 2.如果定义的类中没有给出构造方法,系统也不会提供构造方法。( ) 3.可以通过类名直接访问类变量。( )

4.非static修饰的方法既能被对象调用,又能用类名直接调用。( ) 5.static修饰的类方法既能被对象调用,又能用类名直接调用。( ) 6.一个类的所有对象共享static修饰的类变量。( )

7.类由两部分组成,一部分是变量的定义,一部分是方法的定义。( ) 8.方法的定义由方法的声明和方法体等两部分组成。( ) 9.方法中的形参可以和方法所属类的属性(域)同名。( )

10.package语句只能放到Java源程序除注释之外的第一行位置。( ) 11.Java应用程序的人口main方法只有一种定义。( ) 12.静态成员域具有全局作用域范围。( )

13.类成员变量可无须初始化,由系统自动进行初始化。( ) 14.在类体部分定义时,类的构造方法、成员域和成员方法的出现顺序在语法上有严格限制。 ( )

15.类的实例对象的生命周期包括实例对象的创建、使用、废弃、垃圾的回收。( )

二、选择题

1.下述哪个说法是不正确的?( )

A.局部变量在使用之前无须初始化,因为有该变量类型的默认值 B.类成员变量由系统自动进行初始化 C.参数的作用域就是所在的方法

D.for语句中定义的变量,当for语句执行完时,该变量就消亡了 2.下述哪一个关键字不是类及类成员的访问控制符?( ) A.public B.private C.static D.protected 3.考虑以下的方法头声明:

public void myMethod(int num,char letter) 下列哪个描述是正确的?( )

A. 这个方法有个int型的参数,它的形式参数是letter B.这个方法有个int型的参数,它的形式参数是num

C.这个方法有个char型的参数,它的实际参数是myMethod D.这个方法是一个构造方法

4.假设有个类已经定义了下述的变量:

int num1=10; int num2二20;

String word=new String(\; double answer=25.5; 另外定义了下列方法头:

public int stuff(String s,int x,int y) 以下哪个是正确的方法调用?( )

1

A.num1=stuff (”hello”,num1,num1); B,answer=stuff (word,answer,num2); C.num2=stuff(”hello”,num1,answer); D.num1=stuff(num1,num2,word); 5.下面哪一项不是构造方法的特点?( ) A.构造方法名必须与类名相同 B.构造方法不具有任何返回类型 C.任何一个类都含有构造方法 D.构造方法修饰词只能是public

6.假设已声明了一个类A的两个对象a1、a2,为了初始化a1和a2,下面语句正确的是 ( )。

A. a1,a2=new A() B. a1=A.new();a2=A.new() C. a1=new();a2=new() D. a1=new A();a2=new A() 7.以下程序的运行结果为( )。 public class Test ( int value;

public static void main (String args [] ) { Test t=new Test(); if (t==null) (

System.out .println (\ } else{

System.out .println (t.value); } } }

A. 0 B. null C. NoObject D. 编译出错

10.给定如下代码: class Circle{

String name, radius; int r;

public Circle (String n) name=n; }

public Circle (String n,int a){ name=n; r=a; )

public Circle (String n,String d, int a){ radius=d; }

2

}

要在第三个构造方法的空白处填上一行代码使之能够调用第二个构造方法,这行代码应该是( )。

A. Circle(n,a); B. this(Circle(n,a)); C. this(n,a); D. this(name,a);

11.下面哪个代码片段是错误的?( ) A. package mypackage;

public class Rectangle {//doing something'..} B. import java.io.*; package mypackage;

public class Rectangle {//doing something'\C. import java.io.*;

class Circle{//doing something\

public class Rectangle {//doing something...} D. import java.io.*; import java.awt.*;

public class Rectangle {//doing something...}

12.下列选项中,用于声明包名的关键字是( )。

A. import B. package C. interface D

13.下列各种Java类的定义,哪些是错误的?( ) A. class MyClass{

private int Val; public int getVal(){ return Val; } }

B. class MyClass{

private static int Val; public int getVal(){ return val; } }

C. class MyClass{

private int Va!;

public static iht getVal(){ return Val; } }

D. class MyClass{

3

. protected private static int Val; public static int getVal(){ return Val; } }

14.某类的成员方法只能被自己调用,修饰该方法的是( )。

A. public B. protected C. private D. 无修饰符 15.另外的类要获取以下MyClass类中的member的值,采用的语句是( )。 public class MyClass{

private static int member=l; public static int getMember(){ return member; } };

A. myClass.member B. new myClass().member C. myClass.getMember() D. myClass().getMember()

16.下面关于变量的说法,哪个是不正确的?( ) A.实例变量是类的成员变量

B.实例变量用关键字static声明

C.在方法中定义的局部变量在该方法被执行时创建 D.局部变量在使用前必须被初始化

17.在Java中,以下哪一个关键字使类不能派生出子类?( ) A.final B.public C.private D.volatile

18.关于public static void main方法的参数描述不正确的是( )。

A.String args[] B.String[] args C.String a[] D.String args

19.下列整型的最终属性i的定义中,正确的是( )。 A.final B.static int i;

C.static final int i=234; D.final float i=3.14f; 20.类方法的修饰符是( )。

A.static B.class C.public D.void

22.类Line的定义如下:

class Line{

private int a,b;

public Line(int x,int y){ this.x=x; this.y=y; }

其中的this代表( )。

A.类名Line B.父类的对象 C. Line类实例的当前对象引用 D.this指针

4

23.以下程序片段,下列哪个选项插入到第2行将引起编译错误?( ) 1. package mypackage; 2.

3. class MyClass{

4. //do something 5. }

A. public class MainClass{ } B. package mypackage1; C. class B{ } D. import java. util.*;

24.以下程序代码,无法通过编译的是( )。 A. class A{

int i=O;

public void method(){

System.out.println (i); } }

B. class A{

int i=0; }

class B{

public void method(){

System.out.println (A.i); } }

C. class A{

public int i=0;

public static void method(){

System. out.println (newA() .i); } }

D. class A{

public static int i=0;

public static void method(){ System.out.println (i); ) }

25.下列代码在编译时会发生错误,下面哪种修改可以更正错误?( ) class Test {

private int m;

public static void fun(){ System.out.println(m); }

5

}

A.将private int m改为protected int m B.将private int m改为public int m C.将phvate int m改为static int m D.将private int m改为int m

三、程序阅读题

1.阅读下面的程序,程序保存为Test.java:

1. public class Test{ 2. short mValue;

3. public static void main(String[] args){ 4. int a=32; 5. int b=56;

6. Test os=new Test (a+b); 7. os.Show (); 8. }

9. protected Test (short aValue) { 10. mValue= aValue; 11. }

12. public void Show() {

13. System. out .println (mValue); 14. } 15. }

上面的程序编译是否成功?如果编译出错,指出哪行出错,并说明理由;如果编译正确,运行结果是什么?

2.阅读下面的程序:

1 public class Test{

2 public static void main (String argv [ ] ) { 3 Bird b=new Bird(); 4 b. fly (3); 5 } 6 }

7 class Bird{

8. static int Type=2;

9. private void fly(int an_Type) { 10. Type= an_Type;

11. System. out .println (\12. } 13. }

6

上面的程序编译是否成功?如果编译出错,指出哪行出错,并说明理由;如果编译正确, 运行结果是什么?

3.仔细阅读下面的程序代码,若经编译和运行后,请写出打印结果。 class StaticTest { static int x=l; int y;

StaticTest () { y++; }

public static void main (String args [] ) { StaticTest st=new StaticTest (); System.out.println (\

System. out.println (\ st=new StaticTest ();

System.out.println (\ System. out.println (\}

static { x++; }

4.写出下列程序代码的运行结果。

public class PassTest{ float ptValue;

public void changeInt(int value){ value=il; }

public void changeStr(String value){ value=new String(\ }

public void changeObjValue( PassTest ref){ ref.ptValue=22; }

public static void main(String args[ ] ){ String str; int val;

PassTest pt=new PassTest(); val=33;

pt.changeInt (val);

System.out.println(\ str=new String (\ pt.changeStr (str);

System. out.println(\ pt.ptValue=44;

7

pt.changeObjValue(pt);

System.out.println(\;

} }

5.写出下列程序代码的运行结果:

class Test {

public static String ss=\杭州电子科技大\ public String ms= \计算机学院\ public void printInfo () {

System. out.println (\ }

public static void main (String [] args) { Test obj1, obj2; obj1=new Test(); obj2=new Test();

obj1.ss=\浙江工业大学\obj1.ms= \软件学院\obj1.printInfo(); obj2.printInfo(); } }

6.阅读以下程序,回答问题。 package packagel; class ClassA{

public void printInfo(){

System.out.println (\ } }

package package2;

import packagel.ClassA; public class ClassB{

public static voidmain(String [] args){ new ClassA().printInfo(); } }

(1)上面两个类是在同一个源程序文件中吗?

(2)以上程序编译是否正常?若编译正常则运行结果是什么?

8

7.阅读下面程序,修改程序中错误的地方(提示:共三处)。 1. class Person{ 2. String name; 3. int age; 4. String sex;

5. public Person(String name,int age,String sex){ 6. this.name=name; 7. this.age=age; 8. this.sex=sex; 9. }

10. public void toString(){

11. return \12. } 13. }

14. public class TestPerson{

15. public static void main(String args[]){ 16. Person p=new Person(); 17. p.name=\张三\18. p.age=20; 19. p.sex=\男\

20. System. out.println (Person.tostring ()); 21. } 22. }

8.写出下列程序代码的运行结果。 public class Test( int x=4;

public static void main (String argv [ ] ) { Test t=new Test (); t.x++;

change (t);

System.out.println (t.x); }

static void change (Test m) { m.x+=2; } }

四、编程题.

1.编写一个Java程序Suansu.java,定义两个整型变量a和b,使用构造方法初始化a为10,b为5,并定义求出a与b的和(方法名为AddAB)、差(方法名为SubAB)、积(方法名为MultiAB)、商(方法名为DivAB)的方法。用另一个Java程序TestSuansu.java测词Suansu.java定义的方法,并在屏幕上输出结果。

9

2.创建一个名为Rectangle的类来表示一个使用宽度和高度来改变量的矩形,矩形的宽度和高度由构造方法来确定。为Rectangle类创建下列方法:

getArea返回矩形的面积,要求长和高的范围为0-50; getPerimeter返回矩形的周长;

draw使用星号(*)作为描绘字符画出该矩形(假设宽度和高度为整数); 在另一个类TestRectangle中编写main方法来测试Rectangle类。 3.根据以下的设计要求编写Java源代码。

类名:Student

变量(访问权限均为private):

name,//表示为姓名,类型为String age,//表示年龄,类型为int 方法如下。

(1)构造方法(没有参数,设置姓名为“无名氏”,年龄为20)。

(2)setName(有一个名为name的String型参数,将name的值设为这个新值)。 (3)getName(没有参数,返回姓名);

(4)setAge(有一个名为age的int型参数,将age的值设为这个新值)。 (5)getAge(没有参数,返回年龄)。

(6)isSameAge(有一个参数s,是另一个Student对象的引用,如果两个Student对象的age相同,则返回true,否则返回false)。

4.编写一个复数类Complex验证两个复数1+2i和3+4i相加产生一个新的复数4+6i。复数类Complex必须满足如下要求。 (1)复数类Complex的属性如下。

realPart是int型,代表复数的实数部分。 imaginPart是int型,代表复数的虚数部分。 (2)复数类Complex的方法如下。

Complex()构造方法,将复数的实部和虚数都置0。

Complex(int r,int i)构造方法,形参r为实部的初值,i为虚部的初值。

ComplexcomplexADD(Complexa)将当前复数对象与形参复数对象相加,所得的结果 仍是一个复数值,将其返回给此方法的调用者。

StringtoString()把当前复数对象的实部、虚部组合成a+bi的字符串形式,其中,a和b分别为实部和虚部的数据。

5.编写一个表示二维平面上的点的类MyPoint,满足以下条件。

(1)定义private的成员变量x和y,表示点的x和y坐标,类型为整数。

(2)定义两个MyPoint的构造方法,一个构造方法不带参数,且x和y的初始值为0,另一个构造方法有两个参数,参数名为x和y,类型为整数,用这两个参数分别作为初始x和y的坐标。

(3)定义一个getD方法,功能为返回两个坐标点(由MyPoint定义)距离,值为float类型。

(4)编写main方法,打印坐标点(2,3)到点(4,5)的距离。

6。编写一个公共(public)类,类名为AccountUtil,该类属于account包,类中包含一个公用静态方法toSeparateNumber,该方法以一个十进制字符串为参数,返回用逗号隔开的

10

数字字符串,分隔从右边开始,每三个数字用一个逗号隔开。例如,若参数为2367548,则返回2,367,548。若参数为小数,则分隔从小数点开始,例如,若参数为2367548.85,则返回2,367,548.85。

根据以下说明,编写一个银行账户类Account,并编写一个main方法,对Account类进行测试,在main方法中要调用Account的所有方法,发生异常时,要打印异常信息。该类的成员变量如下表所示(访问权限均为private)。

7.编写两个类,classA属于包package1,classA中有一个方法methodA();classB属于包package2,在classB的方法methodB()中调用classA的methodA()方法。每个方法简单地输出方法名即可。

8.编写一个三角形类,能根据3个实数构造三角形对象,如果3个实数不满足三角形的条件,则自动构造以最小值为边的等边三角形。输入任意3个数,输出构造的三角形面积。

11