当前位置: 首页 > news >正文

第04章_IDEA的安装与使用(下)

第04章_IDEA的安装与使用(下)

讲师:尚硅谷-宋红康(江湖人称:康师傅)

官网:http://www.atguigu.com


8. 快捷键的使用

8.1 常用快捷键

见《尚硅谷_宋红康_IntelliJ IDEA 常用快捷键一览表.md

8.2 查看快捷键

1、已知快捷键操作名,未知快捷键

2、已知快捷键,不知道对应的操作名

8.3 自定义快捷键

8.4 使用其它平台快捷键

苹果电脑或者是用惯Eclipse快捷的,可以选择其他快捷键插件。

9. IDEA断点调试(Debug)

9.1 为什么需要Debug

编好的程序在执行过程中如果出现错误,该如何查找或定位错误呢?简单的代码直接就可以看出来,但如果代码比较复杂,就需要借助程序调试工具(Debug)来查找错误了。

运行编写好的程序时,可能出现的几种情况:
> 情况1:没有任何bug,程序执行正确!
​
====================如果出现如下的三种情况,都又必要使用debug=============================
> 情况2:运行以后,出现了错误或异常信息。但是通过日志文件或控制台,显示了异常信息的位置。
> 情况3:运行以后,得到了结果,但是结果不是我们想要的。
> 情况4:运行以后,得到了结果,结果大概率是我们想要的。但是多次运行的话,可能会出现不是我们想要的情况。比如:多线程情况下,处理线程安全问题。

9.2 Debug的步骤

Debug(调试)程序步骤如下:

1、添加断点

2、启动调试

3、单步执行

4、观察变量和执行流程,找到并解决问题

1、添加断点

在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。

2、启动调试

IDEA提供多种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”等等

3、单步调试工具介绍

:Step Over(F8):进入下一步,如果当前行断点是调用一个方法,则不进入当前方法体内 

:Step Into(F7):进入下一步,如果当前行断点是调用一个自定义方法,则进入该方法体内 

:Force Step Into(Alt +Shift + F7):进入下一步,如果当前行断点是调用一个核心类库方法,则进入该方法体内 

:Step Out(Shift + F8):跳出当前方法体 

:Run to Cursor(Alt + F9):直接跳到光标处继续调试 

:Resume Program(F9):恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上 

:Stop(Ctrl + F2):结束调试 

:View Breakpoints(Ctrl + Shift + F8):查看所有断点 

:Mute Breakpoints:使得当前代码后面所有的断点失效, 一下执行到底 

说明:在Debug过程中,可以动态的下断点。

9.3 多种Debug情况介绍

9.3.1 行断点

  • 断点打在代码所在的行上。执行到此行时,会停下来。

package com.atguigu.debug;
​
/*** ClassName: Debug01* Package: com.atguigu.debug* Description: 演示1:行断点  &  测试debug各个常见操作按钮** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 18:44* @Version 1.0*/
public class Debug01 {public static void main(String[] args) {//1.int m = 10;int n = 20;System.out.println("m = " + m + ",n = " + n);swap(m, n);System.out.println("m = " + m + ",n = " + n);
​//2.int[] arr = new int[] {1,2,3,4,5};System.out.println(arr);//地址值
​char[] arr1 = new char[] {'a','b','c'};System.out.println(arr1);//abc}
​public static void swap(int m,int n){int temp = m;m = n;n = temp;}
​
}
​

9.3.2 方法断点

  • 断点设置在方法的签名上,默认当进入时,断点可以被唤醒。

  • 也可以设置在方法退出时,断点也被唤醒

  • 在多态的场景下,在父类或接口的方法上打断点,会自动调入到子类或实现类的方法

package com.atguigu.debug;
​
import java.util.HashMap;
​
/*** ClassName: Debug02* Package: com.atguigu.debug* Description: 演示2: 方法断点** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 21:15* @Version 1.0*/
public class Debug02 {public static void main(String[] args) {
​//1.Son instance = new Son();instance.test();//2.Father instance1 = new Son();instance1.test();
​//3.Consumer con = new ConsumerImpl();con.accept("atguigu");
​//4.HashMap map = new HashMap();map.put("Tom",12);map.put("Jerry",11);map.put("Tony",20);}
}
​
class Father{public void test(){System.out.println("Father : test");}
}
​
class Son extends Father{public void test(){System.out.println("Son : test");}
}
​
interface Consumer{void accept(String str);
}
​
class ConsumerImpl implements Consumer{
​@Overridepublic void accept(String str) {System.out.println("ConsumerImple:" + str);}
}
​
​

9.3.3 字段断点

  • 在类的属性声明上打断点,默认对属性的修改操作进行监控

package com.atguigu.debug;
​
/*** ClassName: Debug03* Package: com.atguigu.debug* Description: 演示3:字段断点** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 21:34* @Version 1.0*/
public class Debug03 {public static void main(String[] args) {Person p1 = new Person(3);
​System.out.println(p1);}
}
​
class Person{private int id = 1;private String name;private int age;
​public Person() {}{id = 2;}public Person(int id) {this.id = id;}
​
​
​public Person(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}
​public int getId() {return id;}
​public void setId(int id) {this.id = id;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
​

9.3.4 条件断点

package com.atguigu.debug;
​
/*** ClassName: Debug04* Package: com.atguigu.debug* Description: 演示4:条件断点** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 21:49* @Version 1.0*/
public class Debug04 {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10,11,12};
​for (int i = 0; i < arr.length; i++) {int target = arr[i];System.out.println(target);}}
}

针对上述代码,在满足arr[i] % 3 == 0的条件下,执行断点。

9.3.5 异常断点(暂略)

  • 对异常进行跟踪。如果程序出现指定异常,程序就会执行断点,自动停住。

package com.atguigu.debug;
​
import java.util.Date;
​
/*** ClassName: Debug05* Package: com.atguigu.debug* Description: 演示5:异常断点** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 22:01* @Version 1.0*/
public class Debug05 {public static void main(String[] args) {
​int m = 10;int n = 0;int result = m / n;System.out.println(result);
​
​
//        Person p1 = new Person(1001);
//        System.out.println(p1.getName().toUpperCase());
​
​}
}
​

通过下图的方式,对指定的异常进行监控:

9.3.6 线程调试(暂略)

package com.atguigu.debug;
​
/*** ClassName: Debug06* Package: com.atguigu.debug* Description: 演示6:线程调试** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 22:46* @Version 1.0*/
public class Debug06 {
​public static void main(String[] args) {
​test("Thread1");test("Thread2");
​
​}
​public static void test(String threadName) {new Thread(() -> System.out.println(Thread.currentThread().getName()),threadName).start();}
​
}
​ 

9.3.7 强制结束

package com.atguigu.debug;
​
/*** ClassName: Debug07* Package: com.atguigu.debug* Description: 演示7:强制结束** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 23:15* @Version 1.0*/
public class Debug07 {public static void main(String[] args) {System.out.println("获取请求的数据");System.out.println("调用写入数据库的方法");insert();System.out.println("程序结束");}
​private static void insert() {System.out.println("进入insert()方法");System.out.println("获取数据库连接");System.out.println("将数据写入数据表中");System.out.println("写出操作完成");System.out.println("断开连接");}
}
​

9.4 自定义调试数据视图(暂略)

package com.atguigu.debug;import java.util.HashMap;/*** ClassName: Debug08* Package: com.atguigu.debug* Description: 演示8:用户自定义数据视图** @Author: 尚硅谷-宋红康* @Create: 2022/10/20 23:21* @Version 1.0*/
public class Debug08 {public static void main(String[] args) {HashMap<Integer,String> map = new HashMap<>();map.put(1,"高铁");map.put(2,"网购");map.put(3,"支付宝");map.put(4,"共享单车");System.out.println(map);}
}

设置如下:

 

9.5 常见问题

问题:使用Step Into时,会出现无法进入源码的情况。如何解决?

方案1:使用 force step into 即可

方案2:点击Setting -> Build,Execution,Deployment -> Debugger -> Stepping

把Do not step into the classess中的java.*javax.* 取消勾选即可。

小结:

经验:初学者对于在哪里加断点,缺乏经验,这也是调试程序最麻烦的地方,需要一定的经验。

简单来说,在可能发生错误的代码的前面加断点。如果不会判断,就在程序执行的起点处加断点。

10. IDEA常用插件

推荐1:Alibaba Java Coding Guidelines

阿里巴巴Java编码规范检查插件,检测代码是否存在问题,以及是否符合规范。

使用:在类中,右键,选择编码规约扫描,在下方显示扫描规约和提示。根据提示规范代码,提高代码质量。

推荐2:jclasslib bytecode viewer

可视化的字节码查看器。

使用:

  1. 在 IDEA 打开想研究的类。

  2. 编译该类或者直接编译整个项目( 如果想研究的类在 jar 包中,此步可略过)。

  3. 打开“view” 菜单,选择“Show Bytecode With jclasslib” 选项。

  4. 选择上述菜单项后 IDEA 中会弹出 jclasslib 工具窗口。

英文设置:

在 Help -> Edit Custom VM Options …,加上

-Duser.language=en

推荐3:Translation

注册翻译服务(有道智云、百度翻译开放平台、阿里云机器翻译)帐号,开通翻译服务并获取其应用ID和密钥 绑定应用ID和密钥:偏好设置(设置) > 工具 > 翻译 > 常规 > 翻译引擎 > 配置…

使用:鼠标选中文本,点击右键即可自动翻译成多国语言。

注:请注意保管好你的应用密钥,防止其泄露。

推荐4:GenerateAllSetter

实际开发中还有一个非常常见的场景: 我们创建一个对象后,想依次调用 Setter 函数对属性赋值,如果属性较多很容易遗漏或者重复。

可以使用这 GenerateAllSetter 提供的功能,快速生成对象的所有 Setter 函数(可填充默认值),然后自己再跟进实际需求设置属性值。

插件5:Rainbow Brackets

给括号添加彩虹色,使开发者通过颜色区分括号嵌套层级,便于阅读

推荐6:CodeGlance Pro

在编辑器右侧生成代码小地图,可以拖拽小地图光标快速定位代码,阅读行数很多的代码文件时非常实用。

推荐7:Statistic

代码统计工具。

推荐8:Presentation Assistant

显示快捷键操作的按键

推荐9:Key Promoter X

快捷键提示插件。当你执行鼠标操作时,如果该操作可被快捷键代替,会给出提示,帮助你自然形成使用快捷键的习惯,告别死记硬背。

推荐10:JavaDoc

alt+insert,执行操作:

推荐11: LeetCode Editor

在 IDEA 里刷力扣算法题

推荐12:GsonFormatPlus

根据 json 生成对象。

使用:使用alt + s 或 alt + insert调取。

举例:

{"name": "tom","age": "18","gender": "man","hometown": {"province": "河北省","city": "石家庄市","county": "正定县"}
}

插件13:Material Theme UI

对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。

IDEA 支持各种主题插件,其中最出名的当属 Material Theme UI。

安装后,可以从该插件内置的各种风格个选择自己最喜欢的一种。

相关文章:

第04章_IDEA的安装与使用(下)

第04章_IDEA的安装与使用&#xff08;下&#xff09; 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 8. 快捷键的使用 8.1 常用快捷键 见《尚硅谷_宋红康_IntelliJ IDEA 常用快捷键一览表.md》…...

2023年全国最新道路运输从业人员精选真题及答案51

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 7.A危险货物运输企业一辆载有甲醇的罐式车辆&#xff0c;在晚上…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK显示Bayer彩色格式的图像(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK显示Bayer彩色格式的图像&#xff08;C#&#xff09;Baumer工业相机Baumer工业相机的Bayer彩色图像的技术背景Baumer工业相机通过BGAPI SDK在回调函数里显示Bayer彩色图像Baumer工业相机在BufferEvent显示Bayer彩色图像Baumer工业相…...

Unity云渲染,加移动

上次我们根据官方所推出的教程&#xff0c;完成了云渲染&#xff0c;这次我们加个移动。 原谅我又水一篇文章&#x1f604;&#x1f604;&#x1f604;&#x1f604;&#x1f604;&#x1f604;&#x1f604;&#x1f604;&#x1f604; 云渲染的文章看这里&#xff1a;Unity…...

ASP一个简单的网上教务系统模型的设计与实现

对于一个学校来说&#xff0c;大量教师信息&#xff0c;学生信息管理&#xff0c;学生成绩管理&#xff0c;基本数据的维护都难于通过传统的方法进行管理&#xff1a;这就迫切需要利用计算机技术来帮助学校管理者处理这些日常管理。本系统正是为了简化教学任务的管理&#xff0…...

黑马点评实战篇问题总结

缓存穿透 用户查询的数据在缓存和数据库中都不存在 这样的请求每次都会打到数据库上 解决方案&#xff1a; 1.缓存空字符串&#xff08;额外的内存消耗&#xff0c;可能造成短期的不一致&#xff09; 2.布隆过滤&#xff08;内存占用少&#xff0c;没有多余key&#xff0c;实现…...

C++ 并发编程

文章目录基本概念编程创建线程启动共享数据相关条件变量时间相关future相关——等待一次性事件读写锁原子操作与缓存一致性关系线程管理启动线程从类的方法来创建线程传参标识线程常用API等待线程完成后台运行线程移动线程间共享数据互斥量&#xff08;mutex&#xff09;unique…...

5V的LDO电源的WCCA分析-可靠性分析计算过程

WCCA(WorstCase Circuit Analysis)分析方法是一种电路可靠性分析设计技术&#xff0c;用来评估电路中各个器件同时发生变化时的性能&#xff0c;用于保证设计电路在整个生命周期的都可以可靠工作。通过WCCA分析&#xff0c;验证在上述参数在其容差范围内发生变化时&#xff0c;…...

TensorFlow 深度学习第二版:6~10

原文&#xff1a;Deep Learning with TensorFlow Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只…...

C++标准库 -- 顺序容器 (Primer C++ 第五版 · 阅读笔记)

C标准库 -- 顺序容器(Primer C 第五版 阅读笔记&#xff09;第9章 顺序容器------(持续更新)9.1、顺序容器概述9.2、容器库概览9.2.1 、迭代器9.2.2 、容器类型成员9.2.3 、begin 和 end 成员9.2.4 、容器定义和初始化9.2.5 、赋值和 swap9.2.6 、容器大小操作9.2.7 、关系运算…...

JavaEE初阶学习:文件操作

1.文件 1.认识文件 平时说的文件一般都是指存储再硬盘上的普通文件&#xff0c;形如txt&#xff0c;jpg&#xff0c;MP4&#xff0c;rar等这些文件都可以认为是普通文件&#xff0c;它们都是再硬盘上存储的。 在计算机中&#xff0c;文件可能是一个广义的概念&#xff0c;就…...

【外设零基础通用教程】GPIO 下

【外设零基础通用教程】GPIO 下使用方法GPIO 值输入读取值输出设置值GPIO输入输出应用GPIO输入应用GPIO输出应用文档使用理论补充输出方式推挽输出开漏输出上篇连接&#xff1a;【外设零基础通用教程】GPIO 上&#xff0c;主要是在做视频的时候&#xff0c;发现上篇理论很多&am…...

在window上安装python

在Windows上安装python 1.进入python官网https://www.python.org/ 下载配置环境,点击上方downloads,根据系统选择python环境下载(选择windows) 往下拉查找需要的版本并下载 下载后双击就可以安装python了 如何检验是否安装成功 通过【winr】调出【运行】弹窗&#xff0c;输…...

[hive SQL] 预约业务线

这两天有个数据需求&#xff0c;记录一下。 原始需求说明产品写得很乱不清晰确认了半天无语死了&#xff08;开始骂人&#xff09;&#xff0c;直接列转换后的问题了 问题1&#xff1a; 现有一张办事预约服务记录表reservation_order&#xff0c;包含字段用户id、服务名称、服务…...

LNMP架构和论坛搭建以及一键部署

数据流向 一、Nginx服务安装 1、关闭防火墙 [rootking ~]# systemctl stop firewalld [rootking ~]# systemctl disable firewalld [rootking ~]# setenforce 0 2、将所需软件包拖入/opt目录下 3、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 4、创建运…...

RK3568平台开发系列讲解(设备驱动篇)V4L2程序实现流程

🚀返回专栏总目录 文章目录 一、V4L2 进行视频采集二、命令标识符三、V4L2程序实例3.1、打开设备3.2、查询设备属性3.3、显示所有支持的格式3.4、设置图像帧格式3.5、申请缓冲区3.6、将申请的缓冲帧从内核空间映射到用户空间3.7、将申请的缓冲帧放入队列,并启动数据流3.8、启…...

人工智能中的顶级会议

当搭建好了AI领域的知识架构&#xff0c;即具备了较好的数学、编程及专业领域知识后&#xff0c;如果想在AI领域追踪前沿研究&#xff0c;就不能再只看教材了。毕竟AI领域的发展一日千里&#xff0c;教材上的知识肯定不是最新的。此时&#xff0c;应该将关注的重点转向AI领域的…...

【Python OpenCV】第六天:图像的基础操作

文章目录 一、本期目标二、获取并修改像素值三、获取图像属性(1)img.shape(2)img.size(3)img.dtype四、图像 ROI五、拆分及合并图像通道六、为图像扩边(填充)一、本期目标 获取像素值并修改获取图像的属性(信息)图像的 ROI图像通道的拆分及合并几乎所有这些操作与 Nu…...

2022年陕西省职业院校技能大赛“网络搭建与应用”赛项竞赛试题

2022年陕西省职业院校技能大赛 “网络搭建与应用”赛项 竞赛试题 竞赛说明 一、竞赛内容发布 “网络搭建与应用”赛项竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分) 第二部分:服务器配置及应用项目(480分) 第三部分:职业规范与素养(20分) 二、竞赛…...

面经-01

面试java开发工程师 常用数据结构&#xff0c;区别及使用场景 以下是一些常用的数据结构&#xff0c;它们的区别以及适用场景&#xff1a; 数组 (Array)&#xff1a; 区别&#xff1a;数组是一种连续内存空间的数据结构&#xff0c;具有固定的大小&#xff0c;用于存储相同类型…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...