作者:nnamyp_826 | 来源:互联网 | 2023-05-17 18:07
一、使用JDB调试java代码(主要内容为断点)以下文字内容转自使用JDB调试java程序,图片则为自己的截图我们提倡在Linux命令行下学习Java编程。学习时在UbuntuBa
一、使用JDB调试java代码(主要内容为断点)
以下文字内容转自使用JDB调试java程序,图片则为自己的截图
我们提倡在Linux命令行下学习Java编程。学习时在Ubuntu Bash中通过Ctrl+Shift+T
快捷键打开三个标签(tab),:一个使用vim编辑代码;一个使用javac, java(或ant, gradle...)编译运行代码;一个使用JDB调试代码。
如下图所示,这样就不用在一个窗口中进行编辑,编译运行和调试的切换了,能提高效率。
如上图,我们在Linux Bash 中输入vim HelloJDB.java
编辑调试示例代码
1 public class HelloJDB {
2 public static void main(String[] args) {
3 int i = 5;
4 int j = 6;
5 int sum = add(i, j);
6 System.out.println(sum);
7
8 sum = 0;
9 for(i=0; i<100; i++)
10 sum += i;
11
12 System.out.println(sum);
13 }
14
15 public static int add(int augend, int addend){
16 int sum = augend + addend;
17 return sum;
18 }
19}
其它关于帮助或者启动的不加赘述,直接开始设置断点,我们通过运行stop in HelloJDB.main
命令在main方法开始出设置断点:
同时使用locals
命令和step
命令进行断点的调试
但是使用use
之后list
的内容并不能正确的被读取,因此我直接把HelloJDB.java
文件放在和HelloJDB.class
一个目录下,不然无法读取,这很让我困扰,希望有人能在评论区指出问题。
最后就是设置行断点了,我们可以通过stop at HelloJDB:12
在第12行设个断点,然后运行cont
就会一下子把循环运行完并停在第十二行。(cont是continue的缩写,功能是运行到下一个断点处停止)
二、第四章学习过程问题小结
1.局部变量和成员变量的区分
如果局部变量的名字与成员变量的名字相同,那么成员变量将被隐藏,即该成员变量在这个方法内暂时失效。例如:
class Tom{
int x = 10,y;
void f(){
int x = 5;
y = x+x; //y得到的值是10,不是20.如果方法f中没有“int x=5;”,y的值将是20.
}
}
如果方法中的局部变量的名字与成员变量的名字相同,那么方法就隐藏了成员变量,如果想在该方法中使用被隐藏的成员变量,必须使用关键字this
,例如
class Tom{
int x =10,y;
void f(){
int x = 5;
y = x+this.x;//y得到的值是15。
}
}
2.关于new运算符的简单总结
new运算符只能和类的构造方法进行运算,运算的最后结果是一个十六进制的数,这个数被称作对象的引用,即5表达式new Xiyoujirenwu()
的值是一个引用。new运算符在计算出这个引用之前,首先给Xiyoujirenwu类中的成员变量分配内存空间,然后执行构造方法中的语句,这个时候,不能称对象已经诞生,因为还没有计算出引用,即还没有确定被分配了内存的成员变量是“谁”的成员。当计算出引用之后,即new Xiyoujirenwu()
表达式已经有值后,对象才诞生。如果把new Xiyoujirenwu()
这个值赋值给一个对象(Xiyoujirenwu声明的对象变量),这个对象就拥有了被new
运算符分配了内存的成员变量,即new
运算符为该对象分配了变量。
--书中总结