20175215 2018-2019-2 第三周java课程学习总结
第三周
一、使用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
运算符为该对象分配了变量。
--书中总结
3.可变参数的用法注意
在public void g(double a,int ... x)
的方法g的参数列表中,第一个参数是double型,第2个至最后一个参数是int型,连续出现的int型参数的个数不确定(可变)。称x是方法g的参数列表中的可变参数的“参数代表”。“参数代表”必须是参数列表中的最后一个。特别注意的是,下列方法定义中
public void method(int ... x,int y)
错误地使用了可变参数x,因为可变参数x代表的最后一个参数不是method方法的最后一个参数,method方法的最后一个参数y不是可变参数x所代表的参数之一。
另外,对于可变参数,Java也提供了增强的for语句,允许按如下方式使用for语句遍历参数代表所代表的参数
for(声明循环变量:参数代表){
...
}
4.实例方法和类方法的区别
(1)对象调用实例方法
-当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才会分配入口地址,从而实例方法可以被类创建的任何对象执行。
-实例方法中不仅可以操作实例变量,也可以操作类变量,当对象调用实例方法时,该方法中出现的实例变量就是分配给该对象的实例变量,该方法中出现的类变量也是分配给该对象的变量,只不过这个变量和所有的其他对象共享而已。
(2)类名调用类方法
-对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。注意:实例方法不能通过类名调用,只能由对象来调用。
-和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。
(3)设计类方法的原则
-对于static方法,不必创建对象就可以用类名就可以直接调用它(创建对象会导致类中的实例变量被分配内存空间)。如果一个方法不需要操作类中的任何实例变量,就可以满足程序需要,考虑将这样的方法设计为一个static方法。
5.避免重载出现歧义
重载方法之间必须保证相互的参数不同,但需要小心的是,重载方法在被调用时可能出现歧义调用。例如下列Dog类中的冲荣耀方法就是容易引起歧义的重载方法(Dog类中没有语法错误):
class Dog{
static void cry(double m, int n){
System.out.println("小狗");
}
static void cry(int m, double n){
System.out.println("small dog");
}
}
对于上述Dog类,代码:
Dog.cry(10.0,10);
输出的信息是:“小狗”;代码:
Dog.cry(10,10.0);
输出的信息时“small dog”;但是,代码:
Dog.cry(10,10);
却无法通过编译(提示信息:对cry的引用不明确),因为Dog.cry(10,10)
不清楚应当执行重载方法中的哪一个(出现歧义调用)。
6.import语句
(1)引入类库中的类
- java.lang包是Java语言的核心类库,它包含了运行Java程序必不可少的系统类,系统自动为程序引入java.lang包中的类(例如System类、Math类等),因此不需要再使用import语句引入该包中的类。
- 如果使用import语句引入了整个包中的类,那么可能会增加编译时间,但绝对不会程序运行的性能。因为当程序执行时,只是将程序真正使用的类的字节码文件加载到内存。
- 如果没用import语句引入包中的类,那么也可以直接带着包名使用该类,例如:
java.util.Date date = new java.util.Date();
三、码云链接
参考资料
1.Java中this和super的用法总结
2.Arrays.binarySearch()
3.Arrays.toString() 的用法
4.Math.abs()方法
20175215 2018-2019-2 第三周java课程学习总结的更多相关文章
- 20175215 2018-2019-2 第十一周java课程学习总结
第13章 Java网络编程 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对 ...
- 20175215 2018-2019-2 第六周java课程学习总结
第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...
- 20175215 2018-2019-2 第十周java课程学习总结
第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...
- 20175215 2018-2019-2 第九周java课程学习总结
第十一章 JDBC与MySQL数据库 11.1 MySQL数据库管理系统 下载安装过程略 使用的是MySQL 5.6而非5.7 11.2 启动MySQL数据库服务器 启动和root用户过程略 11.3 ...
- 20175215 2018-2019-2 第八周java课程学习总结
第十五章 泛型与几何框架 15.1 泛型 泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 15.1.1 泛型类声明 可以使用 ...
- 20175215 2018-2019-2 第七周java课程学习总结
第八章 常用实用类 8.1 String类 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用S ...
- 20175215 2018-2019-2 第五周java课程学习总结
第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...
- 20175215 2018-2019-2 第二周java课程学习总结
一.学生免费申请使用IDEA 下载好IDEA后,设置到最后有一个界面, 我们需要到IDEA官网进行IDEA免费试用权的申请,如果有学校的邮箱,使用学校的邮箱注册并证明是自己的就可以直接通过申请.如下图 ...
- 第十三周Java课程学习总结
学习总结: 记事本界面: 监听适配器. 可以通过Window Adapter来实现监听. void windowActivated(WindowEvent e) 激活窗口时调用. void windo ...
随机推荐
- Python 东方财富网-股市行情数据抓取
东方财富网 股市行情数据抓取: http://quote.eastmoney.com/center/gridlist.html#hs_a_board 请求数据未入库处理,其中数据只存入数据文本,未做存 ...
- 04 定时任务及yum源的选择
1.查看系统的发行版本 cat /etc/redhat -release cat /etc/os -release 2.用户管理 linux超级用户 root拥有最高权限 管理员 sudo命令就是ro ...
- C# 封装返回类
using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System. ...
- 实验吧flag整理
奇怪的短信 flagissimple 围在栅栏里的爱ILOVESHIYANBAR. 古典密码flag:CTF{COULDYOUEXCHANGETHEINFORMATION} The Flash-14F ...
- filebeat收集nginx的json格式日志
一.在nginx主机上安装filebeat组件 [root@zabbix_server nginx]# cd /usr/local/src/ [root@zabbix_server src]# wge ...
- 1.shell编程-变量的高级用法
1.1.变量替换 变量替换的六种形式 实例:非贪婪和贪婪的区别 从头部删除 [root@VM_0_9_centos shell_learn]# var_1="i love you,do yo ...
- CentOS下phpMyAdmin安装
1.phpMyAdmin官网下载https://www.phpmyadmin.net/downloads/ 2.下载程序包 wget https://files.phpmyadmin.net/phpM ...
- IDEA中方法的快捷键及自定义方法
1. 字母组合联想到对应的方法 ·ps联想到public static方法和成员 ·输入psvm联想到主方法 ·输入psf联想到用public static final 等 · pc联想到clone和 ...
- 动软生成器 Liger model生成模板
<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ...
- buuctf@ciscn_2019_en_2
from pwn import * context.log_level='debug' io=process('./ciscn_2019_en_2') libc=ELF('./libc.so') el ...