JAVA考核题-面向对象选择题(答案) 下载本文

技术改变世界 创新驱动发展

Overload。

11、是否可以继承String类,并说明理由? String类是一个“不可变类”,请解释“不可变类”的含义。

解答:不可以,因为String类是final类故不可以继承。

解析不可变类:String类是一个不可变类,即immutable类。所谓不可变,意思是当

一个字符串被初始化后,它的值就不会被改变。例如,String s=new String(“hello”)为将初始化一个值为hello的字符串,如果调用 s.toUpperCase()看起来是把hello变为大写的HELLO,然而事实上并不会把已有的hello变为HELLO,而是在新的空间初始化一个HELLO字符串。也正因为有这种不可变性,所以才能支持“字符串实例池”的使用。

参考答案:所谓的不可变类,就是当字符串初始化后,就不能够被改变。

12、请说明Java语言中的值传递规则。

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

第一问解析:值传递时编写应用时不可避免的操作。例如某方法声明形式是public void f(int x){},写方法是,必须为其传递一个int类型的实际参数,如f(10)。又如public void g(Employee)。那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如g(new Employee())。所以,对于初级程序员来说,了解Java语言的值传递规则非常重要。Java语言是本类型传递的值,例如f(10),仅仅把10复制给形式参数x,是值的拷贝。而引用类的传递时引用,即虚地址,例如g(new Employee())是把实际参数的虚地址传递给形式参数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象。

第一问解答:基本数据类型传递的是值,引用类型传递的是引用,即虚地址。 第二问解答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

四、程序题(每题5分,共25分)

1、补足代码

定义一个抽象类AbstractTest,其中有一个公共的抽象方法printMsg()。然后定义此抽象类的一个子类DefaultTest,包括的成员变量有姓名,学号,分数,且此类中包括二个构造方法。

您的未来就是我们的未来

技术改变世界 创新驱动发展

abstract class AbstractTest{

(1) } (2) {

String name; String id; int score;

//接收三个参数的构造方法

(3)

//接收姓名和学号二个参数的构造方法 (4)

//实现抽象方法,方法体为打印出学生的姓名与成绩 (5) } 答案:

abstract class AbstractTest { // 抽象方法定义

public abstract void printMsg(); }

public class DefaultTest extends AbstractTest { String name; String id; int score; /**

* 接收三个参数的构造方法 */

您的未来就是我们的未来

技术改变世界 创新驱动发展

public DefaultTest(String name, String id, int score) { } /**

* 接收姓名和学号两个参数的构造方法 */

public DefaultTest(String name, String id) { } /**

* 实现抽象方法,方法体为打印出学生的姓名与成绩 */

public void printMsg() {

System.out.println(\学生\的成绩为:\ } }

2、补足代码

定义接口Student,该接口中有一个无参、无返回值的方法prtMsg;定义类College,包括的私有属性有id和name,包括一个接收学生学号和姓名的构造方法,并且实现Student接口。

interface Student{

}

(2) //College类的声明,实现Student接口 {

(3) //定义私有成员变量id和name,类型自定 (1)

this.name = name; this.id = id; this.name = name; this.id = id; this.score = score;

您的未来就是我们的未来

技术改变世界 创新驱动发展

(4)//构造方法声明和定义,接收二个参数 (5)//实现prtMsg方法的声明 {

}

//prtMsg的方法体

System.out.println(id + name);

} 答案:

interface Student { }

public class College implements Student {

/**

* 实现prtMsg方法的声明 */

public void prtMst() { /**

* 构造方法声明和定义,接收二个参数 */

public College(String name, String id) { }

this.name = name; this.id = id;

// 定义私有成员变量id和name,类型自定 private String name; private String id; void prtMst();

您的未来就是我们的未来

技术改变世界 创新驱动发展

}

}

// prtMsg的方法体

System.out.println(id + name);

3、改正下面程序段中的错误(共5处)

public class Student{ String id; String name; int salary;

public void Test(String id, String name, int salary){ //1:意图为该方法为构造方法,需去掉返回值,并改正方法名 this.id = id; this.name = name; this.salary = salary; }

public void changeInfo(String id, int salary){ //2:返回值改为boolean boolean result;

if(id == this.id){ //3:==改为equals()方法 this.salary = salary;

result = TRUE; //4:改为true

}else{

result = false;

}

return result;

}

public booleanchangeInfo(String ids, intsalarys){ //5:方法重复定义,并不是重载 ?? } }

4、写一个Singleton出来。

解答:

解析:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。它必须自行创建这个唯一的实例,必须自行向整个系统提供这个实例。使用单例模式的一个必要条件:在一个系统中要求只有一个类的实例时应当使用单例模式,反过来说如果一个类可以有几个实例共存,那么就没有必要使用单例类。

一般Singleton模式通常有以下几种形式。 (1)第一种形式-饿汉式单例类:

定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例化,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

您的未来就是我们的未来