Java面向对象程序设计(第二版)袁绍欣 第四章课后习题答案

1.名词解释:构造方法、抽象。
  1. 构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
  2. 从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃,这种思维过程,称为抽象。
2.对象位于内存何处?声明能引用对象的实质是什么?

例如:Person per = new Person();
per这个引用在栈内存中,而new出来的对象是在堆内存中,栈中的per指向了堆中的新分配的空间。
如果只有Person per;这时的per叫做 声明。

3.对象和基本数据类型作为参数传递时,有什么不同?

基本数据类型作为参数在方法中的传递是值传递,
对象是引用传递,传递的是对象的地址。

4.在自定义对象中写finalize方法,看看什么情况下finalize被调用。
package test;

public class test {
	
	private int a;
	public test(int _a) {a = _a;}
	public void finalize(){
		System.out.println("已释放");
	}

	public static void main(String[] args) {
		test my = new test(12);
		System.out.println(my.a);
		my = new test(14);//my指向了别的对象,原先的变成垃圾了
		System.gc();//调用系统函数,告诉系统该回收垃圾了
	}

}

结果为:12 已释放

5.对象在什么条件下成为垃圾?什么情况下释放垃圾对象,如何证明一个对象被释放了?

对象在没有任何引用时成为垃圾。
系统在内存不足时会释放垃圾,或者手动 System.gc() 释放垃圾。

6.final修饰符都有什么作用?

Java中final修饰符既可以修饰类、方法,也可以修饰变量
用final修饰的类不能被继承
用final修饰的方法不可重写
用final修饰的变量必须初始化,且之后不能赋值

7.static修饰的属性和方法有什么特点?

static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有共享,也可以说是static成员不依赖某个对象,在类加载时就被初始化。static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。

8.Application程序执行时,为什么不能带后缀名?

java命令是执行一个类。
若写 java xxx.yyy
是代表要运行 package xxx 中的class yyy 里面的 main(String[])
所以当你写 java xxx.class 时, 它会以为要找一个叫xxx的package里面的一个叫class的class.

9.下面代码中,Vector是 java.util 包中的一个类,关于此类哪个叙述是正确的?

1)public void create(){
2)vector myvect;
3)myvect=new vector();
4)}
A第二行的声明不会为变量myvect分配内存空间
B第二行的声明分配一个到vector对象的引用的内存空间
C第二行语句创建一个vector类对象
D第三行语句创建一个vector类对象
E第三行语句为一个vector类对象分配内存空间

答案:ADE
解析:java里面的声明都是不分配内存空间的,创建对象时才分配对应的空间。

10.请在 dislpay 函数中用递归方式输出如下图型。

图形:

9 9 9 9 9 9 9 9 9 
8 8 8 8 8 8 8 8 
7 7 7 7 7 7 7 
6 6 6 6 6 6 
5 5 5 5 5 
4 4 4 4 
3 3 3 
2 2 
1 

代码:

public class List {
	
    public static void display(int n){
        if(n <= 0){ return;}
        for(int i = 1 ;i <= n; i++){
            System.out.print(n + " ");
        }
        System.out.println();
        display(n-1);
    }
    public static void main(String[] args) {
        display(9);//这里改变 n 的值
    }
}

11.国际象棋。

水平有限,只能出一种结果,而且由于判断的原因到第37步时产生错误,编程思路大家可以借鉴。

package test;

import java.text.DecimalFormat;
public class test {
	static DecimalFormat df = new DecimalFormat("00");
	void printchess(test my)
	{
		int a,b;
		for(a=2;a<=9;a++)
		{
			for(b=2;b<=9;b++)
			{
				System.out.print( df.format(my.chessboard[a][b])+" ");
			}
			System.out.println();
		}
	}
	void horse(test my,int x,int y)
	{
		int i;
		for(i=0;i<8;i++)
		{
//			int a,b,sign=1;
//			for(a=2;a<=9;a++)
//			{
//				for(b=2;b<=9;b++)
//				{
//					if(my.chessboard[a][b]==0)
//					{
//						sign=0;
//					}
//				}
//
//			}
//			if(sign==0) {
			if(my.chessboard[x+my.move[i][0]][y+my.move[i][1]]==0)
			{
				my.chessboard[x+my.move[i][0]][y+my.move[i][1]]=++my.cnt;
				my.horse(my,x+my.move[i][0],y+my.move[i][1]);
			}
				
//			}
//			else 
//			{
//				sign=1;
//				my.printchess(my);
//				System.out.println();
//				System.out.println();
//				System.out.println();
//				my.chessboard[x][y]=0;
//			}
			
		}
	}
	int[][] chessboard = new int[12][12];
	int cnt = 0;//标记马已走的方格数
	int sum = 0;//标记吗走完全程的具体方案数
	int[][] move = {{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1},};
	//每个马有8个位置可以跳,这是8中情况下x,y的偏移量
	public static void main(String[] args) {
		test my = new test();
		int a,b;
		for(a=0;a<12;a++)
		{
			for(b=0;b<12;b++)
			{
				my.chessboard[a][b]=0;
			}
		}
		for(a=0;a<12;a++)
		{
			for(b=0;b<12;b++)
			{
				if(a==0||a==1||a==10||a==11||b==0||b==1||b==10||b==11)
				{
					my.chessboard[a][b]=-1;
					//在8x8棋盘外面加两层,使得每个位置都有8种跳法,只不过这些多出来的位置标记为已跳
				}
			}
		}
		my.chessboard[2][2]=++my.cnt;//开始位置为第一个已跳位置
		my.horse(my,2, 2);
		my.printchess(my);
	}

}
java 习题集包括有答案 引 言 6 第一章 JAVA基础 7 一、填空题 7 二、判断题 9 三、选择题 9 四、程序阅读题 26 第二章 控制结构 32 一、选择题 32 二、填空题 48 三、判断题 50 四、程序阅读题 51 五、编程题 55 第三章 字符串 59 一、选择题 59 二、填空题 63 三、判断题 64 四、编程题 65 第四章 数组 66 一、选择题 66 二、判断题 69 三、填空题 70 四、编程题 71 第五章 类和对象 73 一、选择题 73 二、填空题 79 三、程序填空 80 四、问答题 93 五、判断题 94 六、编程题 94 第六章 面向对象程序设计 97 一、选择题 97 二、填空题 118 三、判断题 120 四、编程题 123 第七章 数据库的连接 129 一、选择题 129 二、填空题 131 三、判断题 131 四、编程题 131 第八章 多线程 133 一、填空题 133 二、选择题 134 三、多项选择 147 四、判断题 147 五、程序分析题 148 六、程序设计题 149 第九章 异常处理 151 一、选择题 151 二、填空题 155 三、判断题 157 四、程序阅读题 158 五、程序题 163 第十章 文件操作 165 一、选择题 165 二、填空题 170 三、判断题 174 四、读程序题 177 五、问答题 182 六、编程题 183 第十一章GUI界面设计 185 一、选择题 185 二、填空题 194 三、判断题 196 四、程序填空 197 五、简答题 214 六、编程题 214 参考答案 230 第一章 java基础 230 一、填空题 230 二、判断题 232 三、选择题 232 四、程序阅读题 232 第二章 控制结构 233 一、选择题 233 二、填空题 233 三、判断题 235 四、程序阅读题 235 五、编程题 236 第三章 字符串 255 一、选择题 255 二、填空题 255 三、判断题 255 四、编程题 255 第四章 数组 265 一、选择题 265 二、判断题 265 三、填空题 266 四、编程题 266 第五章 类和对象 269 一、选择题 269 二、填空题 270 三、程序填空 271 五、判断题 274 六、编程题 274 第六章 面向对象程序设计 293 一、选择题 293 二、填空题 294 三、判断题 295 四、编程题 296 第七章 数据库的连接 352 一、选择题 352 二、填空题 352 三、判断题 353 四、编程题 353 第八章 多线程 356 一、填空题 356 二、选择题 357 三、多项选择 357 四、判断题 357 五、程序分析题 357 六、程序设计题 357 第九章 异常处理 391 一、选择题 391 二、填空题 391 三、判断题 392 四、程序阅读题 392 五、程序题 393 第十章 文件操作 396 一、选择题 396 二、填空题 397 三、判断题 398 四、读程序题 398 五、问答题 399 六、编程题 401 第十一章 GUI界面设计 417 一、选择题 417 二、填空题 417 三、判断题 419 四、程序填空 419 五、简答题 420 六、编程题 422
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值