文档库 最新最全的文档下载
当前位置:文档库 › java程序设计实用教程 (第3版) 叶核亚 习题答案 所有答案1—12章

java程序设计实用教程 (第3版) 叶核亚 习题答案 所有答案1—12章

java程序设计实用教程 (第3版)  叶核亚 习题答案  所有答案1—12章
java程序设计实用教程 (第3版)  叶核亚 习题答案  所有答案1—12章

第1章

1.Java具有那些适合在Internet环境中的特点?

【答】简单性和完全面向对象,平台无关性,安全性和可靠性,多线程,高效的网络编程。

2.Java保留、放弃了C/C++语言中哪些语法和面向对象机制?为什么需要这样做?【答】在语法规则方面,Java语言放弃了全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型,使Java语言更简单、更精练。

在面向对象概念方面,Java语言放弃了多元继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式,使Java语言更健壮、更安全、更高效。

3.Java对原程序文件的命名规则有什么要求?源程序文件编译后生成什么文件?

【答】要求:源程序文件与类同名,文件扩展名为.java;编译后生成字节码文件(*.class)。

4.Java程序的运行机制是怎样的?与C++或其他语言有什么不同?

【答】Java的每一个类都有一个class文件和它对应,Java在程序的启动的时候将程序运行需要用到的类加载到虚拟机中,根据Java的虚拟机规范进行连接(动态连接),程序的组装是在运行的时候完成的

C++和其他的编译型的语言一样,它的程序的组装方式是一种传统的组装方式。C++在编译的时候生成适用于某一平台的二进制代码,在连接的时候找到需要调用的库,然后将这些库中的代码连接进可执行程序之中,生成的可执行程序运行速度非常的快,但是可执行代码已经变成了一个整体,不可能再分开

5.什么是平台无关性?Java是怎样实现平台无关性的?

【答】平台无关性即Java程序的运行不依赖于操作系统。Java采用虚拟机技术实现平台无关性。程序由虚拟机解释执行,不同的操作系统上运行不同版本的Java虚拟机。

6.Java应用程序由哪两种形式?他们的运行方式有什么不同?

【答】Application和applet两种形式,其中application是能够独立运行的应用程序,既可以以DOS的命令方式运行,也可以以图形用户界面方式运行。Applet是可以嵌入页面的最小应用程序,不能独立运行,必须嵌入超文本中,由浏览器显示运行。

7.什么是解释执行?Java怎样解释执行两种应用程序?

【答】解释执行即将字节码解释成本地机器码并执行。

Java源程序文件经编译后生成字节码文件,若是application应用程序,则将字节码文件交由Java解释器解释执行,最后在windows操作系统上运行。若是applet应用程序,则将字节码文件嵌入超文本文件并下载到web浏览器上,最后由windows操作系统中的Java虚拟机运行。

8.作为一个软件开发人员,应该具备那些基础知识用以开发windows应用程序?

【答】略

第2章

1.标示符和关键字在定义和使用方面有何区别?

【答】定义方面:标示符是用户定义的、以字母开头的字母数字序列,关键字是由Java语言定义的、具有特定含义的英文单词。

使用方面:标示符用于命名变量、常量、类、对象等元素,每一个关键字都有特定的含义,不能被赋予别的含义。

2.Java语言的基本数据类型有哪些?引用数据类型有哪些?

【答】基本数据类型有:整数类型byte、short、int、long,浮点数类型float、double,字符类型char,布尔类型boolean;引用数据类型包括数组(array)、类(class)和接口(interface)

3.试分析基本数据类型与引用数据类型的主要特点,并说明使用这两种变量有哪些差别?【答】基本数据类型的变量保存数据值,而引用数据类型的变量保存地址。

4.算术运算、关系运算、逻辑运算和位运算各有哪些运算符?

【答】算术运算:单目运算符有+(正)、—(负)、++(自增)、——(自减),双目运算符有+(加)、—(减)、*(乘)、/(除)、%(取余)

关系运算:=(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)都是双目运算

逻辑运算:&(与)、|(或)、!(非)、^(异或)、&&(条件与)、||(条件或),其中!是单目运算,其它都是双目运算

位运算:~(非)、&(与)、|(或)、^(异或)、<<(左移位)、>>(右移位)、>>>(无符号移位)

5.程序中为什么需要常量和变量?声明常量或变量时,为什么必须给出其所属的数据类型?【答】在程序中使用的数据大多需要经常变化,用常量值表示显然不够,因此每一种算法语言都提供常量和变量来存储数据。

为了确定常量或变量的数据性质、取值范围、以及它们占用的内存单元的字节数和它们参加的合法运算和操作。

6.什么是变量的作用域,声明变量时,如何确定变量的作用域?

【答】变量的作用域是指其作用范围。变量声明的位置决定了它的作用域

7.设i是一个整数类型变量,写出下列问题对应的表达式?

(1)判断i为奇数或偶数;

【答】i%2==0 //取值为true时是偶数,否则是奇数

(2)判断i的值是否在0~9之间;

【答】(i>0)&&(i<9)

8.设ch是一个字符变量,写出下列问题对应的表达式

(1)判断ch是一个十进制的数字字符

(2)判断ch是一个十六进制的数字字符

(3)判断ch是一个大写字母

(4)判断ch是一个英文字母,不论大写和小写

(5)如何将一个十进制的数字字符ch转换成对应的整数类型值

(6)如何将一个十六进制的数字字符ch转换成对应的整数类型值

9.说明for、while、和do-while三种循环语句的特点和区别?

While语句的特点:“先判断后执行”,当条件满足时执行循环体

Do-while语句的特点:“先执行后判断”,先执行循环体,再判断条件是否满足

For语句的特点:“先判断后执行”,但for语句将循环控制变量初始值、循环条件和变量的变化规律都以表达式形式写在循环体之前。

10.分别用for,while,do-while三种循环语句计算一个正数的阶乘

(1)for(i=1,i<=10,i++){

int Sum=1;

Sum=Sum*i;} \\等价于Sum*=i;

(2)int i=1;

while(i<=10){

int Sum=1;

Sum=Sum*i;

i++;}

int i=Sum=1;

do{

Sum=Sum*i;

i++;}while(i<=10);

11.输出以下数字的形式;

(1)0 0 0 0

0 1 1 1

0 1 2 2

0 1 2 3

〖解答〗采用二重循环的程序如下。

public class Phalanx

{

public static void main(String args[])

{

int n=4; //阶数

for (int i=0;i

{

for (int j=0;j

System.out.print(" "+((i

System.out.println();

}

}

}

(2)输出下列形式的数字三角阵(当n=4时)。

1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

〖解答〗采用二重循环的程序如下。

public class Tower

{

public static void main(String args[])

{

int n=4; //行数

for (int i=1;i<=n;i++)

{

for (int j=1;j<=n-i;j++) //前导空格

System.out.print(" ");

for (int j=1;j<=i;j++)

System.out.print(" "+j);

for (int j=i-1;j>0;j--)

System.out.print(" "+j);

System.out.println();

}

}

}

12.下列程序希望用for语句求出1~n累加和并显示,请问程序有错误吗?错在哪里?输出结果i和s的值分别是多少?

int i=1,n=10,s=0;

for(i=1,i<=n,i++);

s+=i;

System.out.pointln(“Sum=1+……+”+n+”=”+s);

有错误,正确的如下

int i=1,n=10,s=0;

for(i=1,i<=n,i++)

s+=i;

System.out.pointln(“Sum=1+……+”+n+”=”+s);

13.编程验证哥德巴赫猜想。哥德巴赫猜想:

(1)任何大于2的偶数都可以表示为2个素数之和,如16=3+13,16=5+11

(2)任何大于5的奇数都可以表示为3个素数之和,如11=2+2+7,11=3+3+5

〖解答〗程序如下。

public class Goldbach

{

static final int MAX=30; //数据范围

static int[] prime=null; //存放素数的一维数组

static int number; //素数个数,即数组的实际元素个数

public Goldbach(int n) //输出n的哥德巴赫算式

{

if (prime==null)

init();

if (n%2==0) //偶数

{

int i=0;

while (i

{

if (isPrime(n-prime[i]))

System.out.print(n+"="+prime[i]+"+"+(n-prime[i])+" ");

i++;

}

}

else //奇数

{

int i=0;

while (i

{

int j=i; //如果j=0,则会出现重复的算式

while (j

{

if (isPrime(n-prime[i]-prime[j]))

System.out.print(n+"="+prime[i]+"+"+prime[j]+"+"

+(n-prime[i]-prime[j])+" ");

j++;

}

i++;

}

}

System.out.println();

}

public static void init() //初始化数组,筛选法求素数

{

prime = new int[30];

prime[0]=2; //已知的最小素数

number=1; //素数个数

int i=1; //下一个素数应存放的数组下标位置

int k=3; //从最小奇数开始测试,所有偶数不需测试

do

{

int j=0;

while ((j

if (j==number) //k是素数

{

prime[i]=k; //将k添加到数组prime中

i++;

number++;

}

k+=2; //测试下一个奇数是否是素数} while(k

output();

}

public static void output() //输出素数

{

System.out.println("All primes in 2~"+MAX+" are: ");

for (int i=0;i

{

System.out.print(" "+prime[i]);

if ((i+1)%10==0)

System.out.println(); //每行写10个数}

System.out.println("\nnumber="+number);

}

public static boolean isPrime(int k) //判断k是否为素数,即在prime中查找k值{

boolean yes=false;

int i=0;

while (!yes && i<=number && prime[i]<=k)

if (prime[i]==k)

yes=true;

else i++;

return yes;

}

public static void main(String args[])

{

for(int i=4;i

new Goldbach(i);

for(int i=7;i

new Goldbach(i);

}

}

程序运行结果如下:

All primes in 2~30 are:

2 3 5 7 11 13 17 19 23 29

number=10

偶数

4=2+2

6=3+3

8=3+5

10=3+7 10=5+5

12=5+7

14=3+11 14=7+7

16=3+13 16=5+11

18=5+13 18=7+11

20=3+17 20=7+13

22=3+19 22=5+17 22=11+11

24=5+19 24=7+17 24=11+13

26=3+23 26=7+19 26=13+13

28=5+23 28=11+17

奇数

7=2+2+3

9=2+2+5 9=3+3+3

11=2+2+7 11=3+3+5

13=3+3+7

15=2+2+11 15=3+5+7 15=5+5+5

17=2+2+13 17=3+3+11 17=5+5+7

19=3+3+13 19=3+5+11

21=2+2+17 21=3+5+13 21=3+7+11 21=5+5+11 21=7+7+7

23=2+2+19 23=3+3+17 23=3+7+13 23=5+5+13 23=5+7+11

25=3+3+19 25=3+5+17 25=5+7+13 25=7+7+11

27=2+2+23 27=3+5+19 27=3+7+17 27=5+5+17 27=7+7+13

29=3+3+23 29=3+7+19 29=5+5+19 29=5+7+17

不能有重复表达式,例如

19=3+3+13 19=3+5+11 19=5+3+11

21=2+2+17 21=3+5+13 21=3+7+11 21=5+3+13 21=5+5+11 21=7+3+11 21=7+7+7

14.Java的数组比C++的数组有哪些优越之处?

【答】Java语言不支持C++的指针类型,对数组的操作只能按照数组方式,不能使用指针。Java的数组都是动态数组,并且是引用数据类型,提高了安全性和简单性。另外,Java语言具有资源回收机制,能够自动收回不再使用的资源,一般情况下程序不需要归还数组所占

的内存空间。

15.作为引用数据类型,数组变量与基本数据类型的变量使用时有哪些区别?

【答】数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。两个变量之间的赋值是值本身。

数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。当声明一个数字变量而未申请空间时,变量是未初始化的,没有地址及特性值。只有申请了存储空间,才能以下标表示数组元素。

16.求一组数中的最大值和最小值。

【答】程序如下:

public class Zuizhi {

public static void main(String[] args)

{

// TODO 自动生成方法存根

int array[]=new int[100];

for(int i=1;i<=30;++i)//初始化数组

array[i]=i;

int max=array[1];//保存最大值

int min=array[1];//保存最小值

for(int j=2;j<=30;++j)

{

max=Math.max(max, array[j]);

min=Math.min(min, array[j]);

}

System.out.println("该数组最大值为:"+max);

System.out.println("该数组最小值为:"+min);

}

}

运行结果如下:

该数组最大值为:30

该数组最小值为:1

17.采用一维数组输出杨辉三角形。

程序如下:

public class Yanghui1

{

public static void main(String args[])

{

int n=10; //n表示行数

int[] table = new int[n+1];

table[0]=1; //每行第1个数都为1

for (int i=1;i<=n;i++) //控制输出n行

for (int j=0;j

System.out.print(" "+table[j]);

System.out.println();

for (int j=i;j>0;j--) //生成下一行数据

table[j]=table[j-1]+table[j]; //通式

}

}

}

18.输出下列方阵:

(1) 输出如下形式的数字方阵(当n=4时):

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

程序如下:

Public class Jmat

{

Public static void main(String args[]){

}

}

(2)输出如下形式的数字方阵(当n=4时):

1 2 5 10

4 3 6 11

9 8 7 12

16 15 14 13

〖解答〗采用二维数组的程序如下。

public class Jmat

{

public static void main(String args[])

{

int n=4; //阶数

int[][] mat = new int[n][n];

int k=1; //k是自然数,递增变化

for (int i=0;i

{

for (int j=0;j<=i;j++)

mat[j][i] = k++; //k先赋值后自加

for (int j=i-1;j>=0;j--)

mat[i][j] = k++;

}

for (int i=0;i

{

for (int j=0;j

System.out.print(" "+mat[i][j]);

System.out.println();

}

}

}

19.找出一个二维数组的鞍点,即该位置的元素在该行上最大,在列上最小。也可能没有暗点。

〖命题〗一个二维数组如果有鞍点,那么它只有一个鞍点。

〖证明〗反证法。

设该二维数组已有一个鞍点,为M[i,j],则有

M[i,*] <= M[i,j] <= M[*,j] (1)

即i行上的所有元素均小于j列上的所有元素。

假设有另一个鞍点M[x,y],由(1)式知

M[i,y] <= M[x,j] (2)

而M[x,y]应在该行上最大,有

M[x,y] >= M[x,j] (3)

M[x,y]应在该列上最小,有

M[x,y] <= M[i,y] (4)

根据(2)式,显然(3)和(4)式是不可能同时成立的。

因而假设有另一个鞍点M[x,y]是不成立的。由此证明。

〖解答〗采用二维数组的程序如下。

public class Dort

{

public static void main(String args[])

{

int[][] mat = {{1,2,3},{4,5,6},{7,8,9}};

for (int i=0;i

{

for (int j=0;j

System.out.print(" "+mat[i][j]);

System.out.println();

}

boolean find = false; //找到鞍点标记

int row=0; //第1行下标

int max=0; //记录当前行最大值的列下标

while (!find && row

{

max=0; //初始设每行第1列值最大

for (int j=1;j

if (mat[row][j]>mat[row][max]) //mat[row][max]为该行最大值

max = j;

boolean yes = true; //再判断mat[row][max]是否在列上最小

int j=0;

while (yes && j

{

if (j!=row && mat[j][max]

yes = false;

j++;

}

if (yes)

find = true;

else

row++;

}

if (find)

System.out.println("The dort: "+mat[row][max]);

else

System.out.println("The dort: null");

}

20.设一个一维数组的元素值为:7,4,8,9,1和5,请输出具有以下内容的方阵:

7 4 8 9 1 5

57 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1

5 7

【答】程序如下:

public class Shift

{

public static void main(String args[])

{

int table[] = {7,4,8,9,1,5};

System.out.println("左移:");

for (int i=0;i

{

for (int j=0;j

System.out.print(table[(i+j)%table.length]+" ");

System.out.println();

}

System.out.println("\n左移:");

for (int i=0;i

{

int j=i;

do

{

System.out.print(table[j]+" ");

j=(j+1)%table.length;

}while (j!=i);

System.out.println();

}

}

}

第3章面向对象的核心特征

3-1 什么是类?什么是对象?他们之间的关系是怎样的?

【答】在面向对象的概念中,类是既包括数据又包括作用于数据的一组操作的封装体。类中的数据称为成员变量,类中的数据操作称为成员方法。类中的成员变量和成员方法统称为类的成员。

对象是类的实例。对象与类的关系就像变量与数据类型的关系一样。是抽象与具体,模板与实例的关系,类是抽象的、是模板,对象是具体的、是实例。

3-2 作为引用数据类型,对象在赋值和方法的参数传递方面与基本数据类型的变量有什么不同?

【答】作为引用数据类型,两个对象之间的赋值是引用赋值,对象可被赋值为null。具体可参见课本第三章图3.1的(d)。方法声明中形式参数的数据类型,既可以是基本数据类型,也可以是引用数据类型。如果形式参数的数据类型是基本数据类型,则实际参数向形式参数传递的是值;如果形参的数据类型是引用数据类型,则实参向形参传递的是引用。

同样,方法返回值的数据类型,既可以是基本数据类型,也可以是引用数据类型,两者分别传递值和引用。

3-3 面向对象技术的三个核心特性是什么?

【答】类的封装、继承和多态。

3-4 什么是封装?为什么要将类封装起来?封装的原则是什么?

【答】封装性是面向对象的核心特征之一,它提供一种信息隐藏技术。

类的封装包含两层含义:一是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位;二是类中既要提供与外部联系的方法,同时又要尽可能隐藏类的实现细节。软件扩充和维护的需要需对类进行封装。封装原则:隐藏内部实现细节。

3-5 类中的方法与C++中的函数有什么差别?

【答】Java类中的成员方法与C语言中的函数很像,但在声明、调用等方面存在很大差别。具体方法可参考课本P66~P67。

3-6 类的构造方法和析构方法有什么作用?它们分别被谁调用?它们的访问权限范围应该是怎样的?是否每个类都必须设计构造方法和析构方法?没有设计构造方法和析构方法的类执行什么构造方法和析构方法?

【答】类的构造方法和析构方法是类特殊的成员方法,构造方法用于在创建实例时进行初始化;析构方法用于在释放实例时执行特定操作。构造方法由new运算符调用;析构方法可由对象调用,或被虚拟机自动执行。它们的访问权限范围通常都是public。

构造方法不能继承,析构方法能够继承。一个类可以不声明构造方法和析构方法。当一个类没有声明构造方法时,Java为它提供一个无参数的默认构造方法,约定自动调用父类的默认构造方法(无参数);当一个类没有声明析构方法时,它执行继承来的父类的析构方法。

3-7 Java定义了几个关键字用于表示几种访问权限?各表示什么含义?类有几种访问权限?

类中成员有几种访问权限?分别使用什么关键字?

【答】Java定义了三个表示权限的关键字(public、protected、private)。类有2种访问权限分别是:公有public,缺省。类中成员有4种访问权限分别是:公有public,可被所有类访问;保护protected,可被同一包及包外所有子类访问;缺省,可被当前包中所有类访问;私有private,只能被当前类访问。

3-8 this引用有什么作用?this引用有几种使用方法?

【答】Java类中成员方法与C语言中函数还有一个重要差别就是,Java类中每个成员方法都可以使用代词this引用调用该方法的当前对象自己,this引用有以下3种用法:(1)this用于指代调用成员方法的当前对象自身,语法格式如下:

this

(2)通过this可以调用当前对象的成员变量,调用当前对象的成员方法。语法格式如下:this.成员变量

this.成员方法([参数列表])注意:Java中的this是引用方式,不是C++中的指针方式。

(3)this引用还可以用在重载的构造方法中,调用本类已定义好的构造方法。语法格式如下:

this([参数列表])注意:在构造方法中,this()引用必须是第一行语句。

3-9 说明类成员与实例成员的区别。

【答】Java的类中可以包括两种成员:实例成员和类成员。

实例成员是属于对象的,实例成员包括实例成员变量和实例成员方法。类成员是属于类的,需要用关键字static标识,也称为静态成员。具体区别如下:

1.实例成员变量与类成员变量

(1) 两者声明时的差别。当一个类声明成员变量时,没有使用关键字static声明的为实例成员变量,使用关键字static声明的为类成员变量。

(2) 两者存储结构的差别。当创建一个对象时,系统会为每一个对象的每一个实例成员变量分配一个存储单元,使得属于不同对象的实例成员变量有不同的值;而为每一个类成员变量只分配一个存储单元,使得所有对象公用一个类成员变量。

(3) 两者引用方式的差别。实例成员变量属于对象,必须通过对象访问;类成员变量属于类,既可以通过对象,也可以通过类访问。

2.实例成员方法与类成员方法

(1) 两者声明时的差别。当一个类声明成员方法时,没有使用关键字static声明的为实例成员方法,使用关键字static声明的为类成员方法。

(2) 两者方法体中语句的差别。类成员方法只能访问类成员变量;实例成员方法既可以访问类成员变量,也可以访问实例成员变量。在实例成员方法体中,可以使用this引用指代当前对象;而在类成员方法体中,则不能使用this引用。

(3) 两者引用方式的差别。实例成员方法必须通过对象访问;类成员方法既可以通过对象,也可以通过类访问。

3-10 什么是继承?继承机制的作用是什么?子类继承了父类中的什么?子类不需要父类中的成员时怎么办?能够删除它们吗?Java允许一个类有多个父类吗?

【答】继承性是面向对象的核心特征之一,是一种由已有的类创建新类的机制。被继承的类称为父类或超类,通过继承产生的新类称为子类或派生类。继承机制是面向对象程序设计中实现软件可重用性的最重要手段。

通过继承,子类自动拥有父类的所有成员,包括成员变量和成员方法(不包括构造方法)。子类可以更改父类成员,还可以增加自己的成员,但是,不能删除父类的成员。

在Java中以“单重继承+接口”的方式代替多重继承,不允许一个类有多个父类。

3-11 子类能够访问父类中什么样权限的成员?

【答】虽然子类继承了父类的成员变量和成员方法,但并不是对所有的成员都有访问权限。访问权限说明如下:

(1)子类对父类的私有成员(private)没有访问权限。

(2)子类对父类的公有成员(public)和保护成员(protected)具有访问权限。

(3)子类对父类中缺省权限成员访问权限分为两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父类的缺省权限成员没有访问权限。

3-12 如果子类声明的成员与父类成员同名会怎么样?

【答】如果子类重定义父类的同名成员变量,则子类隐藏了父类成员变量。如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表完全相同时,则称子类成员方法覆盖了成员方法。如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表不同时,子类继承了父类的成员方法,并重载了继承来的该成员方法。

3-13 super引用有什么作用?super引用有几种使用方法?

【答】当子类重定义了父类成员时,则存在同名成员问题。此时,在子类方法体中,成员均默认为子类成员。如果需要引用父类同名成员,则需要使用supper引用。在以下两种同名成员情况下,需要使用supper引用。

(1)子类隐藏父类成员时,如需要访问父类同名成员变量时,需要使用supper指代父类的同名成员变量。语法如下:

super.成员变量

(2)子类覆盖父类成员时,如需要访问父类同名成员方法时,需要使用supper指代父类的同名成员方法。语法如下:

super.成员方法([参数列表])

注意:super引用不能像this引用一样单独使用。

3-14 什么是多态性?什么是方法的重载?方法的重载和覆盖有何区别?

【答】在面向对象语言中,多态是指一个方法可以有多种实现版本,类的多态性表现为方法的多态性。重载是指同一个类中的多个方法可以同名但参数列表必须不同。重载表现为同一个类中方法的多态性。覆盖是指子类重定义了父类中的同名方法。覆盖表现为父类与子类之间方法的多态性。

3-15 什么是运行时多态?方法的重载和覆盖分别是什么时的多态性?

【答】如果在编译时不能确定、只有在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态。方法的重载都是编译时多态。方法的覆盖变现出两种多态性,当对象获得本类的实例时,为编译时多态,否则为运行时多态。

3-16 什么是抽象类?在什么情况下需要设计抽象类?抽象类中是否必须有抽象方法?【答】使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法为抽象方法。抽象类中可以不包含抽象方法,但包含抽象方法的类必须被声明为抽象类。

3-17 什么是最终类?在什么情况下需要设计最终类?最终类中是否必须有最终方法?【答】使用关键字final声明的类称为最终类,最终类不能被继承。使用final声明的成员方法称为最终方法,最终方法不能被子类覆盖。最终类中包含的都是最终方法,非最终类也可以包含最终方法。

3-18 将辗转相除法求两个整数的最大公因数gcd(a,b)用递归方法实现,辗转相除法题意见例2.11,再设计下列方法:

(1)求两个整数a﹑b的最小公倍数;

(2)求三个整数a﹑b﹑c的最大公约数。

〖解答〗程序如下。

public class GCD_recursion

{

public static int gcd(int a,int b) //返回a,b的最大公因数

{

if (b==0)

return a;

if (a<0)

return gcd(-a,b);

if (b<0)

return gcd(a,-b);

return gcd(b, a%b);

}

public static int gcd(int a,int b,int c) //返回a,b,c的最大公因数

{

return gcd(gcd(a,b),c);

}

public static int multiple(int a,int b) //返回a,b的最小公倍数

{

return a*b/gcd(a,b);

}

public static void main(String args[])

{

int a=12,b=18,c=27;

System.out.println("gcd("+a+","+b+")="+gcd(a,b));

System.out.println("gcd("+(-a)+","+b+")="+gcd(-a,b));

System.out.println("gcd("+a+","+b+","+c+")="+gcd(a,b,c));

System.out.println("multiple("+a+","+b+")="+multiple(a,b));

}

}

程序运行结果如下:

gcd(12,18)=6

gcd(-12,18)=6

gcd(12,18,27)=3

multiple(12,18)=36

3-19 用递归方法求n个数的无重复全排列。

〖解答〗程序如下。

public class Permutation

{

private int[] table;

public Permutation(int n) //构造方法

{

if (n>0)

{

table = new int[n];

for (int i=0;i

table[i] = i+1;

permute(n);

}

else

table = null;

}

private void output() //输出数组元素

{

for (int i=0;i

System.out.print(" "+table[i]);

System.out.println();

}

private void swap(int i,int j) //交换数组两个元素值

{

if (table!=null && i>=0 && i=0 && j

{

int temp = table[i];

table[i] = table[j];

table[j] = temp;

}

}

private void permute(int n) //用递归方法求n个数的无重复全排列

{

if (n==1)

this.output();

else

{

permute(n-1);

for (int j=0;j

{

swap(n-1,j);

permute(n-1);

swap(n-1,j);

}

}

}

public static void main(String args[])

{

new Permutation(3);

}

}

程序运行结果如下:

1 2 3

2 1 3

3 2 1

2 3 1

1 3 2

3 1 2

3-20 Java为什么不支持指针?C++的指针类型存在哪些潜在的错误?没有指针,Java如何实现在C++中用指针实现的功能?例如,通过访问指针访问数组元素,通过指针使用字符串,方法参数传递地址,方法参数用于输出,方法返回非基本数据类型等。

【答】由于指针往往在带来方便的同时也导致代码不安全的根源,如内存泄露等,同时也会使程序变得非常复杂难以理解,Java语言明确说明取消了指针。Java使用引用代替了指针。

3-21 Java为什么不支持C++的运算符重载特性?

【答】这是为了防止运算符重载使得代码的功能变的不清晰。

第4章接口﹑内部类和包

4-1 什么是接口?接口和抽象类有哪些相同之处和不同之处?

【答】接口是一组常量和抽象方法的集合。在Java中,接口是一种引用数据类型,用关键字implements声明。接口与抽象类的区别为:

相同点:1.两者都包含抽象方法,约定多个类共用方法的参数列表和返回值。2.两者都不能被实例化。3.两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。

不同点:1.抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。2.抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能。3.抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限由public 和缺省两种,接口中成员的访问权限均是public。4.抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法必须全部是抽象方法,不能声明构造方法。5.抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。

4-2 为什么能够声明接口变量?接口变量能够获得什么样的值?

【答】接口是引用数据类型可以声明接口变量。接口变量能够获得实现接口的类的对象,也称为接口对象。

4-3 接口有哪些特点?为什么需要声明借口?接口是否具有继承性?接口中能否写构造方法?

【答】接口特点:

(1)接口及接口中成员的访问权限都是public

(2)接口中的成员方法都是公有的、抽象的实例成员方法,即默认修饰符为public abstract。

(3)接口中的所有抽象方法必须全部被实现接口的类覆盖。

(4)接口中的成员变量都是常量

(5)接口不能被实例化。接口中的方法都是抽象的,构造方法不是抽象的所有不能写构造方法

(6)接口是引用数据类型。

Java只支持单重继承,以“单重继承+接口”的方式代替多继承。接口可以继承一个已经存在的父接口。

4-4 什么是单重继承?什么是多重继承?类的层次体系为什么需要多重继承?单重继承有什么缺点?既然有缺点,为什么Java仍然采用单重继承?Java怎样实现多重继承?

【答】单重继承就是一个类只能有一个父类。多继承就是可以有多个父类。现实中的对象往往表现出多种特性,用单重继承无法客观描绘,因此需要多重继承。但是C++的多重继承过于复杂,因此Java用“单重继承+接口”代替了多重继承,以提高运行效率,增加安全性,降低复杂性。

4-5 类与类之间存在哪几种关系?

【答】类与类之间有继承关系,还存在嵌套关系。

4-6 在什么情况下需要声明内部类?内部类有哪些特性?

【答】Java不支持C++的结构(struct)类型,当实际中需要使用一个结构时,可以声明一个类;但当结构作为数组的元素类型时,或当一个类中需要使用结构时,可以将结构声明为内部类。内部类特性可参看课本P123。

4-7 为什么是包?为什么需要包机制?Java有哪些包?各有什么功能?

【答】从逻辑概念看,包是类的集合,一个包中包含多个类;从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;包与类的关系,就像文件夹与文件的关系一样。为解决字节码文件存放和类命名的问题,Java提供了包机制。Java 的常用包及其作用可查看P130表4-1 。

4-8 Java的API采用什么组织方式?怎样使用Java定义好的类?

【答】Java语言的API按照功能划分成若干包,每个包都有许多公有的类和接口。如果需要使用已定义好的一个包中的类或接口,可以使用import语句声明。

4-9 Java声明Object类的作用是什么?Object类中声明了哪些方法?Object类在Java类层次体系中的地位是怎样的?

【答】Object是Java中所有类的父类或祖先类,它定义了一个Java对象所需要的基本操作和属性。定义的方法有:1.getClass()获得当前对象所在的类是什么、equals()比较两个对象是否相等、toString()将当前对象的信息用字符串描述、finalize()析构方法。

4-10 Java为什么需要声明基本数据类型的包装类?基本数据类型的包装类有哪些?

【答】为实现完全面向对象的特性,Java为每个基本数据类型都声明有对应的一个类。公有8个基本数据类型的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean

4-11 怎样将数值类型的数据转换成字符串?怎样将字符串转换成数值类型的数据?

【答】Integer类的静态方法parseInt()和实例方法intValue()都可以将一个字符串转换成int 值。Integer类的静态方法toBinaryString(int i)、toOctalString(int i)、Integer.toHexString(int i)可以将十进制i转化为二进制、八进制、十六进制、字符串。

4-12 Java为什么要将Math类声明为最终类?Math类中有哪些常用方法?

【答】Math类提供提供E、PI常量和一组固定数学函数。都是静态可以直接通过类名引用,不需要继承。常用方法有:(1)求绝对值abs(double a)(2)求最大值max(double a,double b)(3)求最小值min(double a,double b)(3)返回一个0.0~1.0之间的随机数random()

4-13 对数值﹑变量或对象进行比较操作,到底应该采用6个关系运算符还是调用equals()、compareTo()方法?是否每个对象都可以调用equals()和compareTo()方法?为什么?这两个方法在进行比较操作时有什么差别?它们在每个类中的含义都相同吗?

【答】对数值、变量可以采用6个关系运算符,对象可以用后两者,但是并不是每个对象都可以调用这两个方法。具体用法及区别请看课本P133和P136.

4-14 System类、Class类和Runtime类各有哪些功能?在之前的程序中已用到这些类的哪些常量或方法?

【答】System类提供访问系统资源和标准输入/输出流的方法,之前用到了in和out常量。

Java程序设计实例教程考试题

Java程序设计练习题 一、选择题 1、为使Java程序独立于平台,Java虚拟机把字节码与各个操作系统及硬件( A ) A)分开B)结合 C)联系D)融合 2、Java语言与C++语言相比,最突出的特点是( C ) A)面向对象B)高性能 C)跨平台D)有类库 3、下列Java源程序结构中前三种语句的次序,正确的是(D) A)import,package,public class B)import必为首,其他不限 C)public class,package,import D),import,public class 4、在JDK目录中,Java程序运行环境的根目录是( A ) A)bin B)demo C)lib D)jre 5、下列运算符中属于关系运算符的是(A ) A)== B).= C)+= D)-= 6、下列布尔变量定义中,正确并且规范的是( B ) A)BOOLEAN canceled=false; B)boolean canceled=false; C)boolean CANCELED=false; D)boolean canceled=FALSE; 7、下列关键字中可以表示常量的是( A ) A)final B)default C)private D)transient 8、下列运算符中,优先级最高的是( A ) A)++ B)+ C)* D)> 9、Java中的基本数据类型int在不同的操作系统平台的字长是( B ) A)不同的B)32位 C)64位D)16位

10、给一个short类型变量赋值的范围是( C ) A)-128 至 +127 B)-2147483648至 +2147483647 C)-32768至 +32767 D)-1000至 +1000 11、下列运算中属于跳转语句的是( D ) A)try B)catch C)finally D)break 12、switch语句中表达式(expression)的值不允许用的类型是( C ) A)byte B)int C)boolean D)char 13、下列语句中,可以作为无限循环语句的是( A ) A)for(;;) {} B)for(int i=0; i<10000;i++) {} C)while(false) {} D)do {} while(false) 14、下列语句中执行跳转功能的语句是( C ) A)for语句B)while语句 C)continue语句D)switch语句 15、下列表达式中,类型可以作为int型的是( C ) A)“abc”+”efg”B)“abc”+’efg’ C)‘a’+’b’D)3+”4” 17、数组中各个元素的数据类型是( A ) A)相同的B)不同的 C)部分相同的D)任意的 18、在Java语言中,被成为内存分配的运算符是( A ) A)new B)instance of C)[] D)() 19、接口中,除了抽象方法之外,还可以含有( B ) A)变量B)常量 C)成员方法D)构造方法 20、下列能表示字符串s1长度的是( A ) A)s1.length()B)s1.length C)s1.size D)s1.size() 21、StringBuffer类字符串对象的长度是( C ) A)固定B)必须小于16个字符 C)可变D)必须大于16个字符 22、构造方法名必须与______相同,它没有返回值,用户不能直接调用它,只能通过new调用。( A ) A)类名B)对象名 C)包名D)变量名 23、子类继承了父类的方法和状态,在子类中可以进行的操作是( D ) A)更换父类方法B)减少父类方法 C)减少父类变量D)添加方法 24、String、StingBuffer都是______类,都不能被继承。( C )

Java语言程序设计基础教程习题解答

《Java语言程序设计基础教程》练习思考题参考答案

第1章 Java程序设计概述 练习思考题 1、 Java运行平台包括三个版本,请选择正确的三项:() A. J2EE B. J2ME C. J2SE D. J2E 解答:A,B,C 2、 Java JDK中反编译工具是:() A. javac B. java C. jdb D. javap 解答:D 3、 public static void main方法的参数描述是:() A. String args[] B. String[] args C. Strings args[] D. String args 解答:A,B 4、在Java中,关于CLASSPATH环境变量的说法不正确的是:() A. CLASSPATH一旦设置之后不可修改,但可以将目录添加到该环境变量中。 B. 编译器用它来搜索各自的类文件。 C. CLASSPATH是一个目录列表。 D. 解释器用它来搜索各自的类文件。 解答:A 5、编译Java Application源文件将产生相应的字节码文件,扩展名为() A. .java B. .class C. .html D. .exe 解答:B 6、开发与运行Java程序需要经过的三个主要步骤为____________、____________和____________。 7、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是______类的子类并且存储该源程序文件的文件名为______。 8、如果一个Java Applet程序文件中定义有3个类,则使用Sun公司的JDK编译器编译该源程序文件将产生______个文件名与类名相同而扩展名为______的字节码文件。 9、开发与运行Java程序需要经过哪些主要步骤和过程? 10、Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎么样的? 11、编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。

完成Java面向对象程序设计实验课的心得体会范文

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

Java程序设计实用教程_习题解答

习题 1 1.James Gosling 2.需3个步骤: 1)用文本编辑器编写源文件 2)使用Java编译器(javac.exe)编译源文件,得到字节码文件。 3)使用java解释器(java.exe)来解释执行字节码文件。 3.D:\JDK 1) 设置path 对于Windows 2000/2003/XP,右键单击“我的电脑”,在弹出的快捷菜单中选择“属性”,弹出“系统特性”对话框,再单击该对话框中的“高级选项”,然后单击“环境变量”按钮,添加系统环境变量path。如果曾经设置过环境变量path,可单击该变量进行编辑操作,将需要的值d:\jdk\bin加入即可(注意:修改系统环境变量path后要重新打开DOS窗口编译)。或在DOS窗口输入命令行: set path=d:\jdk\bin(注意:用此方法修改环境变量每次打开DOS窗口都需要输入该命令行重新进行设置)。 2) 设置classpath 对于Windows 2000/2003/XP,右键单击“我的电脑”,在弹出的快捷菜单中选择“属性”,弹出“系统特性”对话框,再单击该对话框中的“高级选项”,然后单击“环境变量”按钮,添加系统环境变量classpath。如果曾经设置过环境变量classpath,可单击该变量进行编辑操作,将需要的值d:\jdk\jre\lib\rt.jar;.;加入即可。或在DOS窗口输入命令行: set classpath= d:\jdk\jre\lib\rt.jar;.;。 4.(B)javac 5.Java源文件的扩展名是”.java”,Java字节码的扩展名是”.class” 6.Java应用程序主类的main申明(D)public static void main(String args[])

JAVA设计培训心得体会两篇

JAVA设计培训心得体会两篇 篇一 此次只实训了短短的三周。虽说时间很短,但其中的每一 天都使我收获很大、受益匪浅,它不但极大地加深了我对一些 理论知识的理解,不仅使我在理论上对java有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,更学到 了很多做人的道理,对我来说受益非浅。除此以外,我知道了 什么叫团队,怎样和团队分工合作;同时我还学会了如何更好地 与别人沟通,如何更好地去陈述自己的观点,如何说服别人认 同自己的观点。这也是第一次让我亲身感受到理论与实际的相 结合,让我大开眼界。也是对以前所学知识的一个初审吧!这 次实训对于我以后学习、找工作也是受益菲浅的,在短短的三 周中相信这些宝贵的经验会成为我今后成功的重要的基石;这 对于我的学业,乃至我以后人生的影响无疑是极其深远的。 这次实训虽然是我们的第一次,不过同学们表现不错,由 此看来,我们在进入大学的这几个月里学到了不少的专业知识,只是自己感觉不到而已。对于所学专业,我们不能过于自卑和 担忧,否则会妨碍自己学习。实训是学习java的重要环节,有利于我们巩固专业知识、掌握工作技能,提高就业筹码。 我把本次为期三周的实训看作是“理论与实践相结合的桥梁”。通过这周的实训和学习,我知道了此次实训的目的,也

清楚目前自己的不足,那就是缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作。正所谓“百闻不如一见”,经过这次自身的切身实践,我才深切地理会到了“走出课堂,投身实践”的必要性。平时,我们只能在课堂上与老师一起纸上谈兵,思维的认识基本上只是局限于课本的范围之内,也许就是这个原因就导致我们对专业知识认识的片面性,使得我们只知所以然,而不知其之所以然!限制了我们网络知识水平的提高。但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的。而针对实际操作中遇到的一些特殊的问题,我们不能拘泥于课本,不可纯粹地“以本为本”。 在这次实训中我得到了许多收获,我第一次体会到java工程师的工作是什么样子的,也发现了很多不曾注意到的细节,在实训的演示过程中,我对作为一名java工程师注意的事项应该从小事做起、从基本做起。把职业能力训练与职业素质有机的结合起来。相信这对我接下来学习专业知识会起到很有效的帮助,在接下来的几个月里,我会以作为一名职业人的身份在这几个方面要求自己,严格自我,向java工程师靠近。 而经过这次实训,让我明白如果是一个完整项目的开发,必须由团队来分工合作,否则,即费力又费时还做不好这个项目。因此不管在工作中还是在生活中要和老师、同学保持良好

JSP程序设计与项目实训教程_第2版_课后习题和参考答案

第1章Web技术简介 1.7 习题 1.7.1 选择题 1. Web技术的设想于哪一年提出()。 A.1954年 B.1969年 C.1989年 D.1990年 2. JSP页面在第一次运行时被JSP引擎转化为()。 A.HTML文件 B.CGI文件 C.CSS文件 D.Servlet文件 3. JavaEE体系中Web层技术是()。 A.HTML B.JavaBean C.EJB D.JSP 参考答案:1.C 2.D 3.D 1.7.2 填空题 1.当前主流的三大动态Web开发技术是:PHP、ASP/https://www.wendangku.net/doc/0b10661830.html,和______________。 2. JSP的两种体系结构是:______________和______________。 3. JSP开发Web站点的主要方式有:直接JSP、JSP+JavaBean、______________、______________和SSH。 参考答案: 1.JSP 2.JSP Model1和JSP Model2 3.JSP+JavaBean+Servlet、J2EE/JavaEE 1.7.3 简答题 1. 简述JSP的工作原理。 答:所有的JSP应用程序在首次载入时都被翻译成Servlet文件,然后再运行,这个工作主要是由JSP引擎来完成。当第一次运行一个JSP页面时,JSP引擎要完成以下操作: ●将JSP文件翻译成Servlet文件,Servlet文件是Java应用程序。 ●JSP引擎调用Java编译器,编译Servlet文件得到可执行的代码文件(.class文件)。 ●JSP引擎调用Java虚拟机解释执行.class文件,并将运行结果返回给服务器。 ●服务器将运行结果以HTML形式作为响应返回给客户端的浏览器。 由于一个JSP页面在第一次被访问时要经过翻译、编译和执行这几个步骤,所以客户端得到响应所需要的时间比较长。当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP引擎可以直接执行.class文件,因此JSP页面的访问速度会大为提高。 2. 简述JSP两种体系结构。

java认知实习心得体会_心得体会

java认知实习心得体会 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。下面是带来的java认知实习心得体会,欢迎查看。 java认知实习心得体会一: 在本学期的最后一周,我们在学校机房进行了为期一周的JAVA 实训。现在即将结束了,回首本学期的java学习,重点还是在学习概念等一些常识性的东西,Application应用程序和Applet小程序,它的开发工具,数据类型,变量,接口,输入输出流,学会分析异常,抛出异常,后期主要是小程序运用,Gui界面设计和事件。我觉得这两种程序结构有很大的不同,不管是体系结构还是运行方式,都有很大的区别,我主要偏向于小程序的学习,呵呵,因为感觉它用处比较大,可以做出好多好多好玩的游戏,运用程序等,且它灵活。呵呵,当然学知识可不能凭自己的爱好和一时兴趣,要一步一个脚印,认认真真,踏踏实实,理论与实践相结合,在扎实掌握课本实例和内容之后,有一定的扩展阅读和课外学习,充分全面的了解JAVA的应用和扩展运用。 在我所学的语言当中,我自认为JAVA是一门比较强大的面向对1 / 7

象的编程语言,不仅仅因为它的跨平台性,更多的是因为它的灵活多变和实用性较强,可以说比较的经典和强悍。 所以学好java语言有很大的用处,这次实训,面对一道陌生的题目和要求时,不应慌张和无措,首先应该想到这和课本上的哪些知识具有结合点,回忆和分析这种结构的算法和具体实施方法,综合考虑其他的方面,例如:该题的易写性和易懂性及其他的问题的可利用性。在编写时,一个小小的符号,一个常量变量的设定,这都无不考量着我们的细心和严谨,所以学习JAVA,不仅对我们以后学习其他语言有很大的好处,而且也让我们知道了和理解了作为一个编程人员首先应具有的良好心理素质,那就是冷静思考和专心致志。对待学术知识应该是严谨和认真。 这次实训,我们更多学到的是不懂就问和自己应该尽自己的全力去尝试,哪怕失败,只要自己尽自己的全力,和身边同学一起探讨而不是抄袭,团结合作,发挥团队意识,最后在自己的努力下,终于运行成功,这种成就感美不可言,心情愉悦至极。 最后终于要结束了,大家都有种释怀的感觉,当然我想我更多的是兴奋和自己掌握了知识之后的饱满感,学知识就像吃东西一样,吃饱了就应该好好的消化。要不断的温习和运用,做到举一反三,将所学知识充分融入到平时的学习生活中去,为以后的工作做好坚实的基础。感谢学校和老师能够为我们提供这次机会,让我们更好的掌握和了解JAVA这门语言。谢谢! 2 / 7

学java编程的学习心得

经常在头条上看到很多朋友想学编程,却不知道从何学起,道哥跟大家分享下当时学习的方法,当然每个人的学习方法都不一样,无固定模板可套用,以下几条仅供参考 1:首先千万不要一开始去学理论。枯燥的理论会让一个初学者崩溃,那些理论知识很多东西是需要记住的,而且这种记忆是死记硬背,一个你理解不了的理论你去死记硬背,就像你去跟一个和你没有共同语言的姑娘谈对象一样,你老想着和她做点羞羞的事,而人姑娘只想着你是否有房有钱有车,不在一个频道上,你在用下半身思考,人家用下半生来思考。 2:千万不要去学那些虚头巴脑的特效。经常看到一些人发的视频,十几秒能写出几百行代码这种,那是把剪辑视频的效果,打字机都打不了那么快,更何况敲代码。再者一些特效看着很炫,可以这么说,这种特效你除了拿着哄小女朋友开心,没别的用处。 3:千万不要听人说很简单。简单这个词用在多年一线程序员的身上,对初学者来说,不简单,首先你不知道学什么,你知道了学什么,却不知道用什么工具来开发,知道了用什么工具来开发,你不知道工具怎么用,你知道了工具怎么用,不知道从哪下手。。。。所以针对初学者来说还是很有难度的,可以在战略上藐视它,但是战术上不能轻视。 4:千万不要头脑一冲动就开始学。现在的编程语言太多了,C,C++,C#,F#,DELPHI, JAVA, PHP, PYTHON ,还有什么大数据、云计算、区块链什么的概念,

每隔一两年都有新的技术或新的概念出来,不能什么热就学什么,很多东西你还没学会就已过气。 5:千万不要一把抓都想学。永远记住一点,只要学精了一门,在软件开发领域都会有你一碗饭吃,这个话虽糙,但是理不糙,我现在还看到有人用powerbuilder和visualfoxpro来开发程序,而且在这个技术领域中人家很厉害。 6:千万要有耐心。你谈个对象也得要好几个月才能拉拉手之类的吧,所以只要下定决心学习了,就得有耐心,少看会手机,少看会那些无聊的电影和电视剧,你身后有家人需要你在精神上,行动上给他们做一个榜样,需要你的收入给他们一份安全感。很多的人半途而废,学不下去,各种理由,各种原因,女朋友的一句唠叨,妻子一句责骂,就开始自怨自艾,而中途停止脚步了。 7:找到合适的人来指导,你面临问题的时候,可能会查资料查好久都找不到答案,一上午的时间过去了,你的一个bug仍然没解决,可能一个老程序员指点两下你就能解决了。

JAVA实践心得体会

心得体会 此次只实训了短短的三周。虽说时间很短,但其中的每一天都使我收获很大、受益匪浅, 它不但极大地加深了我对一些理论知识的理解,不仅使我在理论上对java有了全新的认识, 在实践能力上也得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对我来说 受益非浅。除此以外,我知道了什么叫团队,怎样和团队分工合作;同时我还学会了如何更好 地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。这也是第一 次让我亲身感受到理论与实际的相结合,让我大开眼界。也是对以前所学知识的一个初审吧! 这次实训对于我以后学习、找工作也是受益菲浅的,在短短的三周中相信这些宝贵的经验会 成为我今后成功的重要的基石;这对于我的学业,乃至我以后人生的影响无疑是极其深远的。 这次实训虽然是我们的第一次,不过同学们表现不错,由此看来,我们在进入大学的这 几个月里学到了不少的专业知识,只是自己感觉不到而已。对于所学专业,我们不能过于自 卑和担忧,否则会妨碍自己学习。实训是学习java的重要环节,有利于我们巩固专业知识、 掌握工作技能,提高就业筹码。 我把本次为期三周的实训看作是“理论与实践相结合的桥梁”。通过这周的实训和学习, 我知道了此次实训的目的,也清楚目前自己的不足,那就是缺乏相应的知识与经验,对所学 的专业知识不能够很好地运用于实践操作。正所谓“百闻不如一见”,经过这次自身的切身实 践,我才深切地理会到了“走出课堂,投身实践”的必要性。平时,我们只能在课堂上与老 师一起纸上谈兵,思维的认识基本上只是局限于课本的范围之内,也许就是这个原因就导致 我们对专业知识认识的片面性,使得我们只知所以然,而不知其之所以然!限制了我们网络 知识水平的提高。但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应 的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的。而针对实际操作中遇到 的一些特殊的问题,我们不能拘泥于课本,不可纯粹地“以本为本”。 在这次实训中我得到了许多收获,我第一次体会到java工程师的工作是什么样子的,也 发现了很多不曾注意到的细节,在实训的演示过程中,我对作为一名java工程师注意的事项 应该从小事做起、从基本做起。把职业能力训练与职业素质有机的结合起来。相信这对我接 下来学习专业知识会起到很有效的帮助,在接下来的几个月里,我会以作为一名职业人的身 份在这几个方面要求自己,严格自我,向java工程师靠近。 而经过这次实训,让我明白如果是一个完整项目的开发,必须由团队来分工合作,否则, 即费力又费时还做不好这个项目。因此不管在工作中还是在生活中要和老师、同学保持良好 的关系是很重要的。做事首先要学做人,要明白做人的道理,如何与人相处是现代社会的做 人的一个最基本的问题。对于自己这样一个即将步入社会的人来说,需要学习的东西很多, 他们就是最好的老师,正所谓“三人行,必有我师”,我们可以向他们学习很多知识、道理。 实训结束了感觉虽然辛苦,但很充实。我想这就是java工程师的工作。我也体会到java 工程师成功地完成一个任务的那种兴奋,那种小有成就的感觉是只有置身其中的人才能 体会的。 总之,这次实训为我提供了与众不同的学习方法和学习体会,从书本中面对现实,为我 将来走上社会打下了扎实的基础。作为在校计算机专业的学生,现在我能做的就是吸取知识, 提高自身的综合素质,提高自己的职业技能,自己有了能力,到时候才会是“车到山前必有 路”。我相信在不久的未来,会有属于我自己的一片天空。 我希望计算机专业的同学在以后的学习或工作中以务实的态度给提供更多的机会锻炼自 己,为大家的成才与就业奠定坚实的基础;并希望同学们要做好角色定位,将自己所学的知识, 学熟、学精。 多学习和收集与项目有关的资料,来提高自己的业务水平,同时多请教经验丰富的老师, 使他们好的经验能够对自己起到借鉴作用,在他们的帮助下,能够很快的培养自己的管理技

JavaWeb程序设计教程课后练习答案

第1章 Web应用开发简介 习题答案 1.Web在组成上包括______和______两部分。 答案: 服务器 客户端 2.谈谈对面向对象的认识。 答案: 面向对象将将要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙解决问题中的各个步骤中的行为。面向对象编程方式是建立在面向过程编程方式基础上,其最重要的改变在于面向对象编程中,程序将围绕被操作的对象来设计,而不是操作本身。面向对象编程方式以类作为构造程序的基本单位,具有封装、抽象、继承、多态性等特点。 3.介绍几种常用的框架技术。 答案: Java中常用的框架。 1.Struts Struts是Apache 基金会Jakarta 项目组的一个开源项目,是一个基于Sun J2EE平台的MVC框架,它将Servlet和JSP标签作为实现自身功能的一部分。 2.WebWork WebWork是由OpenSymphony组织开发的,是一个基于Web的MVC框架。它在运行时通过Interceptor(拦截器)自动应用,因此脱离了Action类。 3.Struts 2 Struts 2是Apache基金会的一个开源项目,它建立在Struts框架与WebWork框架基础之上,继承了二者的优点,是目前非常流行的一个Web框架。 4.Spring Spring是一个以IoC和AOP为核心的轻量级容器框架。它提供了一系列的Java EE开发解决方案,包括表示层的Spring MVC、持久层的Spring JDBC以及业务层事务管理等众

多的企业级应用技术。 5.Hibernate Hibernate是一个ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装。通过使用Hibernate框架,开发人员能够以面向对象的思维方式来操作数据库。 6.Ibatis 相对于Hibernate而言,Ibatis是一个“半自动化”的ORM实现框架,它主要致力于POJO与SQL之间的映射关系,是对“全自动化”ORM框架的一种有益补充。 7.EasyJWeb EasyJWeb是一个核心基于模板技术实现的MVC框架,主要致力于Java Web应用程序的快速开发。 4.IDE的用途是什么? 答案: IDE是一种用于辅助开发人员开发应用程序的应用软件,它一般包括代码编辑器、编译器、调试器和图形用户界面工具,有的还包括版本控制系统、性能分析器等更多工具,因此IDE也就具有了编写、编译、调试等多种功能。正是基于这些功能,使用IDE能够减少项目的开发周期,减轻程序员的工作量,提高应用程序的开发效率等。 5.Web应用服务器的用途是什么? Web应用服务器是为创建、部署、运行以及管理Web应用提供多种运行时服务(如事务、安全等等)的分布式系统,它是应用程序运行的一个基本环境。

《Java程序设计实用教程(第4版)习题解答与实验指导》第1~8章

Java程序设计实用教程 (第4版) 习题解答与实验指导 叶核亚编著 2013年11月

目录 “Java程序设计”课程教学要求 (1) 第1章Java概述 (3) 第2章Java语言基础···········································································错误!未定义书签。第3章类的封装、继承和多态······························································错误!未定义书签。第4章接口、内部类和Java API基础·················································错误!未定义书签。第5章异常处理····················································································错误!未定义书签。第6章图形用户界面·············································································错误!未定义书签。第7章多线程························································································错误!未定义书签。第8章输入/输出流和文件操作·····························································错误!未定义书签。

JAVA程序设计实用教程课后习题简答(第3版)

第1章Java 概述 1.Java具有那些适合在Internet环境中的特点? 【答】简单性和完全面向对象,平台无关性,安全性和可靠性,多线程,高效的网络编程。 2.Java保留、放弃了C/C++语言中哪些语法和面向对象机制?为什么需要这样做?【答】在语法规则方面,Java语言放弃了全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型,使Java语言更简单、更精练。 在面向对象概念方面,Java语言放弃了多元继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式,使Java语言更健壮、更安全、更高效。 3.Java对原程序文件的命名规则有什么要求?源程序文件编译后生成什么文件? 【答】要求:源程序文件与类同名,文件扩展名为.java;编译后生成字节码文件(*.class)。 4.Java程序的运行机制是怎样的?与C++或其他语言有什么不同? 【答】Java的每一个类都有一个class文件和它对应,Java在程序的启动的时候将程序运行需要用到的类加载到虚拟机中,根据Java的虚拟机规范进行连接(动态连接),程序的组装是在运行的时候完成的 C++和其他的编译型的语言一样,它的程序的组装方式是一种传统的组装方式。C++在编译的时候生成适用于某一平台的二进制代码,在连接的时候找到需要调用的库,然后将这些库中的代码连接进可执行程序之中,生成的可执行程序运行速度非常的快,但是可执行代码已经变成了一个整体,不可能再分开 5.什么是平台无关性?Java是怎样实现平台无关性的? 【答】平台无关性即Java程序的运行不依赖于操作系统。Java采用虚拟机技术实现平台无关性。程序由虚拟机解释执行,不同的操作系统上运行不同版本的Java虚拟机。 6.Java应用程序由哪两种形式?他们的运行方式有什么不同? 【答】Application和applet两种形式,其中application是能够独立运行的应用程序,既可以以DOS的命令方式运行,也可以以图形用户界面方式运行。Applet是可以嵌入页面的最小应用程序,不能独立运行,必须嵌入超文本中,由浏览器显示运行。 7.什么是解释执行?Java怎样解释执行两种应用程序? 【答】解释执行即将字节码解释成本地机器码并执行。 Java源程序文件经编译后生成字节码文件,若是application应用程序,则将字节码文件交由Java解释器解释执行,最后在windows操作系统上运行。若是applet应用程序,则将字节码文件嵌入超文本文件并下载到web浏览器上,最后由windows操作系统中的Java虚拟机运行。 8.作为一个软件开发人员,应该具备那些基础知识用以开发windows应用程序? 【答】略

Java程序设计与实践教程_王薇主编_答案

第1章JAVA简介 一、判断题 1.√ 2.√ 3.? 4.? 5.? 6.√ 7.√ 8.√ 9.? 10.? 二、填空题 1.Application Applet 2. 类(字节码文件、目标文件) .class 3.对象 4. 主 5. J2SE J2EE J2ME 三、选择题 1.B 2. D 3.B 4.B 5. A 四、简答题 1.参考答案 Java语言是简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可 移植的、编译解释型的、高性能的、多线程的、动态的等等。 2.参考答案 Java程序执行的具体过程如图1所示。 图1 Java程序的运行机制 3.参考答案 Java程序在计算机在执行要经历以下几个阶段: (1)使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境 (JCreater、Eclipse、MyEclipse等)编辑Java源文件,其文件扩展名为.java。 (2)通过编译使.java的文件生成一个同名的.class文件。 (3)通过解释方式将.class的字节码文件转变为由0和1组成的二进制指令执行。 在以上阶段中可以看出Java程序的执行包括了编译和解释两种方式。 第2章Java 语法基础 一、判断题

1. ? 2.√ 3. ? 4.? 5.? 二、填空题 1.10 2. 单精度双精度 3. n%13 !=0?false:true 4.接口 5. false 三、选择题 1.D 2. C 3.D 4.A 5. C 第3章程序流程控制 一、判断题 1.错误 2.? 3.? 4.? 5.√ 二、填空题 1.循环 2. if 3.case switch 4. while do-while 5. continue 三、选择题 1.D 2. C 3.C 4.B 5. C 第4章数组 一、判断题 1. ? 2. √ 3. √ 4. √ 5.? 二、填空题 1.类型 2. new 3.长度 4. 分配空间 5. 3 6 9 三、选择题 1.D 2. A 3.C 4.B 5. B 第5章类和对象 一、判断题 1.√ 2.√ 3.? 4.? 5.√ 6.? 7.√ 8.? 9.? 10.√ 11.√ 12.√ 13.? 14.? 15. ? 二、填空题 1.public default 2. class 属性方法 3.public static void main(String args[]){} 4. new

java程序设计项目教程第3章答案

一、选择题 参考答案: 1.B 2.A 3.D 4.C 5.A 6.A 7.B 8.B 9.A 10.A 11.A 12.D 二、填空题 参考答案: 1.覆盖 2.参数 3.方法体 4.public static final 5.抽象 6.extends 7.Student String 8.class static 三、简答题 1.子类能够继承父类的哪些成员变量和方法? ①子类可以继承父类的属性,包括实例成员变量和类成员变量。 ②子类可以继承父类除构造方法以外的成员方法,包括实例成员方法和类成员方法。2.this和super关键字的作用是什么? 使用this关键字可实现调用本类的构造方法及调用被方法隐藏的成员变量。 super关键字可调用父类的构造方法及调用父类的同名成员。 3.什么是方法的重载?什么是方法的覆盖? 方法重载是指同一个类中多个方法享有相同的名字,但是这些方法的参数必须不同,参数不同是,指或者是参数的个数不同,或者是参数类型不同,或者是不同类型参数的排列顺序不同。 类继承的过程中,子类方法跟父类方法名字相同,并且传递的参数完全一样,称子类覆盖了父类的方法。 4.什么是多态?使用多态有什么优点? 多态的表现形式主要有方法的重载和方法的覆盖。 使用多态可根据同名方法的参数不同实现不能的功能或同一类对象根据赋予的引用对象的不同来实现不同的行为。 5.什么是包?定义包的作用是什么? 包是java提供的一种命名空间机制,实现了对类的存放和引用位置的管理,包对应一个文件夹。 java的类库就是用包来实现了类的分类和存放,每个包中都有多组相关的类和接口。6.什么是接口?接口中的变量和方法各有什么要求? 接口是特殊的抽象类,可以想象为一个“纯”抽象类,就是一组具有特定意义的静态常量和抽象方法的集合。 属性定义时必须赋初值,是常量。属性性前修饰符时默认该属性由final、static修饰。 接口中的方法必须是抽象方法。 7.类BB是AA类的子类。类AA和类BB中都定义了变量x和method()方法,这种情况称为子类隐藏了父类的同名变量x并覆盖了父类的method()方法. 8.输出结果为: AA BB 若将main()方法中的语句改为:BB b=new BB(10); 程序输出的结果是什么? AA AAAA BBBB

java课程设计心得体会

java课程设计心得体会 【篇一:java课程设计总结报告】 闽南师范大学计算机学院 java课程设计总结报告 【篇二:1203090107秦民《java程序设计》课程设计 报告】 武汉工商学院 项目名称: java课程上机考试系统学生姓名:秦民学号:1203090107班级: 12计科本1指导教师:喻晓陈涛 2014年 5月 19日 目录 1. 选题的背 景 ....................................................................................................... . (1) 1.1 1.2 1.3 国内外选题现 状 ....................................................................................................... .............. 1 开发技术概 述 ....................................................................................................... .................. 1 系统流程分 析 ....................................................................................................... (2) 2. 功能设 计 ....................................................................................................... .. (4) 2.1 3. 详细设 计 ....................................................................................................... .. (5) 3.1界面设 计 ....................................................................................................... .. (5)

java程序设计教程(第六版)课后习题答案

pp2.3 public class fudian { public static void main(String[] args) { float a=2.10f,b=3.70f; float Result1,Result2,Result3; Result1=a+b; Result2=a-b; Result3=a*b; System.out.println("Result1 is:"+Result1); System.out.println("Result2 is:"+Result2); System.out.println("Result3 is:"+Result3); } } 2.4 public class TempConverter { public static void main(String[] args) { final int BASE = 32; final double CONVERSION_FACTOR = 5.0 / 9.0; double celsiusTemp; int fahrenheitTemp = 70; // value to convert celsiusTemp = (fahrenheitTemp - BASE)*CONVERSION_FACTOR; System.out.println ("Fahrenheit Equivalent: " + fahrenheitTemp); System.out.println ("Celsius Temperature: " + celsiusTemp); } } 2.5 public class yinglizhuanqianmi { public static void main(String[] args) { float Base=1.60935f; float Qianmi; float Yingli=19.85f; Qianmi=Yingli*Base; System.out.println ("Ying Li: " + Yingli); System.out.println ("Qian Mi: " +Qianmi); } } 2.6 public class TimeConverter1 { public static void main(String[] args) { int Hour=5,Minute=35,Second=51; int SECONDS;

JAVAWEB实训心得体会

jsp+servlet+mysql 论坛项目实训总结 实训人:程路峰学号:11103303 通过为期10天的实训,我学习了很多关于java web的知识。在老师的正确指导下,顺利的完成了我的实训内容。在此,也有同学的帮助,在他们的帮助下我也受益匪浅。最终,能顺利完成实训的任务也很高兴。 在实训生活中,我了解开发项目的需求、设计、实现、确认以及维护等活动整个过程,让自己开始懂得一点软件工程的知识点。 首先,了解需求分析的重要性,比如:需求分析就是分析软件用户的需求是什么.如果投入大量的人力,物力,财力,时间,开发出的软件却没人要,那所有的投入都是徒劳.如果费了很大的精力,开发一个软件,最后却不满足用户的要求,从而要重新开发过,这种返工是让人痛心疾首的.(相信大家都有体会)比如,用户需要一个 for linux 的软件,而你在软件开发前期忽略了软件的运行环境,忘了向用户询问这个问题,而想当然的认为是开发 for windows 的软件,当你千辛万苦地开发完成向用户提交时才发现出了问题,那时候你是欲哭无泪了,恨不得找块豆腐一头撞死。所以,需求分析是成功的第一步,就是要全面地理解用户的各项要求,并准确地表达所接受的用户需求。 然后呢?确实客户的需求的以后我们要做什么呢,那当然是设计和分析。此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。 接下来是代码实现,此阶段是将网站项目设计的结果转换成计算机可运行的程序代码,我们这个项目为4个模块,1.界面,2.逻辑层。3实现层。4.数据库及使用说明文档,分别为4个小组成员完成。这阶段我学到很多编程的思想,如: 分层思想、mvc、三大架构的整合、dao 的编写。 编号程序之后就是软件测试了,此时在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。由于时间有限,我们测试是简单的使用一下每一个功能。 在编写代码时,由于自己技术知识水平不广,常常遇到技术难题;还有自己没有良好的编程习惯,不注释,有时连自己也看懵了;编程的结构不好,维修和修改代码是很慢。这次实训让我意识到了自己做为计算机软件工程专业的学生,要想在以后的职业中崭露头角,除了要有过硬的理论知识,健康的体魄外,还必须具备良好的心理素质,使自己在以后的途中无论经历什么样的困难,都立于不败之地。“纸上得来终觉浅,绝知此事要躬行!”在这短短的时间里,让我深深的感觉到自己在实际应用中所学专业知识的匮乏。让我真真领悟到“学无止境”这句话的涵义。而所学的,都是课本上没有而对我们又非常实用的东西,这又给我们的实训增加了浓墨淡采的光辉。我懂得了实际生活中,专业知识是怎样应用与实践的。 在这次实训中,我不仅知道了职业生涯所需具备的专业知识,而且让我深深体会到一个团队中各成员合作的重要性,要善于团队合作,善于利用别人的智慧,这才是大智慧。靠单一的力量是很难完成一个大项目的,在进行团队合作的时候,还要耐心听取每个成员的意见,使我们的组合达到更加完美。实训过程中,除了要专业知识,包括人际交往,沟通方式及相关礼节方面的内容,对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和运用,还让我拥有了一次又一次难忘的开发经历,这也是实训最大的收获。 这次实训带给我太多的感触,它让我知道工作上的辛苦,事业途中的艰辛。让我知道了实际的工作并不像在学校学习那样轻松。让我学到了很多课堂上更本学不到的东西,仿佛自

相关文档
相关文档 最新文档