20202306 实验一《Linux基础与Java开发环境》实验报告
# 20202306 2021-2022-1 《数据结构与面向对象程序设计》实验一报告
课程:《程序设计与数据结构》
班级: 2023
姓名: 李金城
学号:20202306
实验教师:王志强
实验日期:2021年9月19日
必修/选修: 必修
## 1.实验内容
1、基于命令行进行简单的Java程序编辑、编译、运行和调试。
2、练习Linux基本命令;
3、学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
4、编写简单的Java程序。
## 2. 实验过程及结果
一、基于命令行进行简单的Java程序编辑、编译、运行和调试
1、命令行:vim的命令行是在文件中进行基本操作的必要知识,通过三个模式的转换和输入,控制光标、插入位置、空行等基本操作。
(1)三个模式的互换:i——普通模式进入插入模式;:——普通模式进入命令行模式;Esc——命令行模式进入命令行模式。
(2)光标移动:h(左)、l(右)、j(下)、k(上)、w(移动到下一个单词)、b(移动到上一个单词)。
(3)插入(插入模式):i(在当前光标处进行编辑)、l(在行首插入)、A(在行末插入)、a在光标后插入一个新行、o(在当前行后插入一个新行)、O(在当前行前插入一个新行)、cw(替换从光标所在位置后到一个单词结尾的字符)。
(4)删除:x(删除光标所在处的字符)、X(删除光标所在前一个字符)、dd(删除整行/剪切)、dw(删除一个单词)、D(删除至行位)、d^(删除至行首)、dG(删除至文档结尾)、d1G(删除至文档首部)、ndd(n为数字,表示删除n行)
(5)保存与退出::q!(退出但不保存)、shift+zz /:x /:wq(保存并退出)、:w【文件】(另存到【文件】中)、:wq!(强制保存并退出)
(6)重复指令:.表示重复上一个命令操作
(7)游标跳转:gg(移动到第一行)、G(移动到最后一行)、nG(n为数字,表示移动到第n行)、w(到下一个单词的开头)、e(到当前单词的结尾/下一个单词的结尾)、b(到前一个单词的开头)、ge(到前一个单词的结尾)、0 / ^(到行头)、$(到行尾)
(8)显示行号::set nu
(9)复制与粘贴(普通模式):nyy(n为数字,复制游标所在的n行),p(粘贴到光标下)、P(粘贴到光标后)
(10)撤销与替换:r+【待替换字母】(将游标所在字母替换为指定字母)、~(反转游标所在字母的大小写)、R(连续替换,直到按下Esc)、cc(替换整行)、cw(替换一个单词)、u{n}(撤销n次操作)
2、java程序的操作:
(1)编辑:
a.应用linux命令行指令:vi 【File name】,新建一个文件或进入先前编辑过的“File name”文件。
b.再应用vim的相关操作,对程序进行编辑。
(2)编译:
根据java的语法结构,一个基本程序如下图所示:
也就是说一个java程序需要由class+主类名称、public static void main(String【】 args)的常规语句、方法体三部分组成
(3)运行:文件确认编译无误后,在终端输入命令:java 【File name】,即可在终端中看到程序的输出或程序错误的提示。
用户名:~$ java test
An Emergency Broadcsat
(4)调试:
a.需提前下载jdk程序,可在终端输入javac -version,若存在该程序则会显示其版本,若需要下载,终端会输出以sudo开头的语句,输入该语句即可联网下载。
b.下载完毕后,可输入javac -g【文件名】.java,此时会出现【文件名】.class的文件,接下来输入jdb 【文件名】,即可开始调试。
c.加载成功后我们通常会在main处设置第一个断点:stop in 【文件名】.main。
d.在n行添加断点:stop in 【文件名】:n(n表示行数)。
e.运行开始:run。
f.进行下一步:next,直到程序结束。
g.其他:help(打开帮助手册)、clear in 【文件名】:n(删除在n行处的断点)、clear(查看设置的断点)、print i(查看变量i的值)、set i=n(将变量i的值改为n)、cont(执行到程序结束或下一个断点)。
二、练习Linux基本命令
(1)关于文件:vi 【文件名】(生成一个文件,并进入)、rm 【文件名】(删除这个文件)【文件名】 -version(查询该文件是否存在)、cat 【文件名】(显示文件中的内容)
(2)关于目录:ls(查询目录)、ls -a(查询全部目录,包括隐藏目录)、cd(切换到根目录)
(3)复制:cp test test1(复制文件test到test1)
(4)文件改名:mv test test1(将文件test的名称改为test1)
(5)查找文件:find 【文件名】
(6)打开帮助手册:man man(man 指令名:详细查看关于该指令的使用说明)
(7)修改时间:touch -t 【时间】 【文件名】
三、学习Java程序的JDB调试技能(基本与一、2、(4)相同)
补充内容:
1、在Linux中打开三个标签页:vim编辑代码、javac编译运行、JDB调试
2、Alt+n:表示进入第n个标签
3、查看变量的值:print或者eval
4、利用list可以查看运行到了源代码的什么位置,use或者sourcepath指出源代码的位置
5、利用up、down可以进行类的调试
四、编写简单的Java程序
例:
1 public class test
2 {
3 public static void main(String【】 args)
4 {
5 System.out.println("An Emergency Broadcast");
6 }
7 }
其中,test为程序名/主类名称,调用了println方法,进行输出。
例:
1 import java.util.Scanner;
2 public class Echo
3 {
4 public static void main(String[] args)
5 {
6 String message; //定义一个字符串message
7 Scanner scan = new Scanner(System.in); //创建Scanner类对象
8 System.out.println("Enter a line of text:");
9 message = scan.nextLine();
10 System.out.println("You entered:\"" + message + "\"");
11 }
12 }
其中,要求用户输入一个字符串,最终达到输出字符串的目的。
例:
1 public class text
2 {
3 public static void main(String[]args)
4 {
5 Scanner in=new Scanner(System.in);
6 System.out.println("guess a number between 1and100)");
7 int a=in.nextInt();
8 int b=(int)(Math.random()*100);
9 while(a!=b)
10 {
11 if(a<b)System.out.println("too little");
12 else System.out.println("too much");
13 System.out.println("guess more:");
14 a = in.nextInt();
15 }
16 System.out.println("Bingo!The right answer is " + b);
17 }
18 }
其中,系统生成一个随机数,用户进行猜数游戏。
## 3. 实验过程中遇到的问题和解决过程
- 问题1:安装JDB时出现问题,根据教程上的提示和网站下载也没能安装上JDB。
- 问题1解决方案:通过细致观察,我发现当我输入java -version时下方出现了以sudo开头的下载方案,于是我尝试一番,终于成功安装好了JDB,并进行了第一次调试。
- 问题2:码云的上传没有及时记忆和理解,导致无法将程序上传到码云。
- 问题2解决方案:通过查询资料,我在博客园发现了一篇帖子,其中详细地介绍了上传方法。
- 问题3:java程序的书写繁琐,且需要记忆的指令极多,这给记忆造成了很大的难题。- 问题1:安装JDB时出现问题,根据教程上的提示和网站下载也没能安装上JDB。
- 问题3解决方案:通过看书,多亲手敲代码,而不是靠死记硬背。学习的过程要融汇贯通,勤能补拙,多多练习才能百战不殆。
## 其他(感悟、思考等)
初次遇到java,它复杂且繁琐的操作指令就给与我很大的压力,尤其是老师操作时,终端和文件里花花绿绿的代码和老师看似轻松的操作,令人目不暇接。然而在看了教材之后,我开始渐渐理解老师的用意和课上讲解的内容了。首先预习是很关键的步骤,课后的总结笔记也是必要的,由于课时原因,老师教学内容多,有时好像刚上课不久就下课了。也是因为java语言的强大魅力,吸引我上课专注地听讲,它操作指令背后的逻辑让人充满好奇心和探索欲。每个指令的应用,即字母和符号的组合,竟然可以在虚拟机中起到这样的作用,尤是让人感到兴奋和精彩。然而java的学习也并不是轻松顺利的,在CDSN、博客园、码云以及云班课中存在了大量的java实例和讲解介绍,这都需要我们去学习和探索。学习要凌驾于书本之上,多进行机操,成为真正可用的java人才。也因为它具备的难度和挑战性,也要求我们要坚持且孜孜不倦的学习态度,唯有如此才能做到知行合一,“码”耕不辍。
## 参考资料
- [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)
- [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
- https://www.cnblogs.com/rocedu/p/5155128.html