20135101曹钰晶

实验内容

1.使用JDK编译、运行简单的Java程序;

2.使用Eclipse 编辑、编译、运行、调试Java程序。

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;

2.完成实验、撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);

3.实验报告中统计自己的PSP(Personal Software Process)时间:

步骤 耗时 百分比
需求分析 20min 20%
设计 20min 20%
代码实现 30min 30%
测试 10min 10%
分析总结 20min 20%

 

 

 

 

 

 

实验知识点

1. JVM、JRE、JDK的安装位置与区别;

2. 命令行运行javac;java;javac -cp; java -cp;

3. PATH,CLASSPATH,SOURCEPATH的设定方法与应用;

4. 包管理:package;import;javac -d ;

5. Eclipse(Netbeans)管理Java项目,调试:断点、单步执行等;

6. Java基础语法:类型与类型转换;变量;运算符;流程控制等;

7. JDK帮助文档的使用。

实验步骤:

(一)命令行下Java程序开发

1.双击桌面上的Xface终端图标,打开终端(类似Windows下的cmd),之后会自动运行shell程序,如下图所示:

      
 
2.输入cd Code命令进入Code(注意C要大写)目录,输入cd 20135100 命令建立实验目录,可以使用ls命令或dir命令查看建立的目录情况,再输入类似mkdir exp1建立第一个实验目录,然后输入cd exp1进入实验一目录,可以输入pwd命令查看当前工作路径,输入gedit Hello.java(注意把代码保存到exp1目录中)或vim Hello.java(建议大家花点时间学习一下Vim)编辑Hello.java,并输入以下代码:

package ljp;
import java.util.Scanner;
public class Hello
{
public static void main(String[] args){
System.out.println("Input your first name,please:");
Scanner s = new Scanner(System.in);
String name = s.next();
System.out.println("Hello " +name+"!");
}
}

输入javac -d . Hello.java命令编译代码,输入java ljp.Hello命令运行程序:

 

 另外注意:代码中有package时,使用javac编译代码时一定要加-d参数,运行代码时一定要加包名前缀。 我们使用到Java类库中的类时,要用import导入相关的类(你可以暂时理解为C语言中include的功能),导入路径可以查看JDK帮助文档,比如我们使用到了Scanner类,路径见下图中红框:

  

(二)Eclipse下Java程序开发、调试

1.打开eclipse,在eclipse中单击File->New-> Java Project新建Java项目,如下图所示:

      

 

2.输入项目名称HelloJDB(HelloCyj),并单击Finish按钮完成新建项目,在Eclipse中单击File->New->Class新建Java类,根据Java代码规范输入包名ljp,类名HelloJDB(HelloCyj),并勾选上自动产生main函数选项,最后单击Finish按钮,如下图所示

3.输入代码:

4.单击运行按钮(或使用Ctrl+F11快捷键),就可以在控制台(Console)中看到运行结果。

  

5.调试程序,单击Window->Open Perspective->Debug打开调试视图;调试程序首先要会设置断点(在所要设置断点的那一行前单机右键)和单步运行;然后单击调试按钮(或使用F11快捷键)开始调试Java程序,我们可以看到程序停留在了第4行。

    

注意,此时第4行代码并没有执行,我们可以把鼠标放到变量名上来查看变量的值,此时i的值并不是5,我们通过单步运行让程序运行到第5行,单步运行有两种:Step Into(快捷捷F5)Step Over(快捷捷F5),这两种单步运行功能在运行语句时没有区别,在执行函数调用语句时,Step Into会跳入函数实现,Step Over会直接执行完函数,实际使用中我们优先使用Step Over,只有函数执行出错了,说明程序问题在被调用函数中,这时再回来通过Step Into进入函数进行调试。我们单击一下Step Over图标(或F6),程序停在了第5行,这时查看变量i的值,会看到i等于5。如下图所示:

 

6.单步执行效率比较慢,如果我们感觉到第6行到第10行的代码没有问题了,若想让程序直接运行到第11行,首先我们要在第11行设置断点,然后单击Resume图标(快捷键F8),程序就运行到了第11行,如下图所示:

7.单步执行效率比较慢还导致另外一个问题,比如一个大循环中间出了问题怎么办?这时可以通过条件断点解决问题。调试循环代码时,会有一个值得我们特别关注,这时在Variable标签中查看变量的值,比如我们此时比较关注sum,每次单步执行都可以看到sum的变化情况了,

设置条件断点,我们在第11行左边单击鼠标右键,选择Breakpoint Properties...设置条件“i==50”

按一下F8,我们可以查看i的是50了

(三)练习实现四则运算,并进行测试。

import java.util.*;
public class Test
{
public static void main(String[] args)
{
Test t=new Test();
t.js();
}
//实例化一个Scanner对象
Scanner scan;
//接受三个输入
public void js()
{
while(true)
{
//初始
scan=new Scanner(System.in);
System.out.print("请输入计算的一个数值:");
double a=scan.nextDouble();
System.out.print("请输入一个运算符:");
char c=scan.next().charAt(0);
System.out.print("请输入计算的二个数值:");
double b=scan.nextDouble();
//把结果放进sum里
double sum=0;

switch(c)
{
case '+':
sum=a+b;
break;
case '-':
sum=a-b;
break;
case '*':
sum=a*b;
break;
case '/':
sum=a/b;
break;
default:
System.out.println("请输入正确的运算符!");
break;
}
System.out.println(sum);
}

}
}

 

 

参考资料

1.《eclipse精粹 》
2.《Java语言调试技术
3.《软件调试的艺术(电子版)》
4.《构建之法 (电子版)》,著者邹欣Blog

 

遇到的问题及解决方法

由于对eclipse的使用较为生疏,在第二题中,尽管按照老师的步骤一步一步来,第一次做还是做的一塌糊涂(断点的设置有问题,还有之前设置的包ljp误打成lip,而后面的调用却输入的ljp,导致运行失败);但在同学的帮助下,第二次很成功的完成了调试。

实验收获和体会

通过这次实验,使我对命令行下的java程序开发,以及对eclipse的使用(如何调试程序)等有了初步的了解,例如如何设置断点,如何进行单步调试,如何跳过已确定的代码进行后面的调试……并利用所学知识进行简单应用。自己还需要多了解一些基础知识,并加以运用和练习,更好的实现java程序的开发。