第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

可视化的字节码查看器。
使用:
-
在 IDEA 打开想研究的类。
-
编译该类或者直接编译整个项目( 如果想研究的类在 jar 包中,此步可略过)。
-
打开“view” 菜单,选择“Show Bytecode With jclasslib” 选项。
-
选择上述菜单项后 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的安装与使用(下) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 8. 快捷键的使用 8.1 常用快捷键 见《尚硅谷_宋红康_IntelliJ IDEA 常用快捷键一览表.md》…...
2023年全国最新道路运输从业人员精选真题及答案51
百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 7.A危险货物运输企业一辆载有甲醇的罐式车辆,在晚上…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK显示Bayer彩色格式的图像(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK显示Bayer彩色格式的图像(C#)Baumer工业相机Baumer工业相机的Bayer彩色图像的技术背景Baumer工业相机通过BGAPI SDK在回调函数里显示Bayer彩色图像Baumer工业相机在BufferEvent显示Bayer彩色图像Baumer工业相…...
Unity云渲染,加移动
上次我们根据官方所推出的教程,完成了云渲染,这次我们加个移动。 原谅我又水一篇文章😄😄😄😄😄😄😄😄😄 云渲染的文章看这里:Unity…...
ASP一个简单的网上教务系统模型的设计与实现
对于一个学校来说,大量教师信息,学生信息管理,学生成绩管理,基本数据的维护都难于通过传统的方法进行管理:这就迫切需要利用计算机技术来帮助学校管理者处理这些日常管理。本系统正是为了简化教学任务的管理࿰…...
黑马点评实战篇问题总结
缓存穿透 用户查询的数据在缓存和数据库中都不存在 这样的请求每次都会打到数据库上 解决方案: 1.缓存空字符串(额外的内存消耗,可能造成短期的不一致) 2.布隆过滤(内存占用少,没有多余key,实现…...
C++ 并发编程
文章目录基本概念编程创建线程启动共享数据相关条件变量时间相关future相关——等待一次性事件读写锁原子操作与缓存一致性关系线程管理启动线程从类的方法来创建线程传参标识线程常用API等待线程完成后台运行线程移动线程间共享数据互斥量(mutex)unique…...
5V的LDO电源的WCCA分析-可靠性分析计算过程
WCCA(WorstCase Circuit Analysis)分析方法是一种电路可靠性分析设计技术,用来评估电路中各个器件同时发生变化时的性能,用于保证设计电路在整个生命周期的都可以可靠工作。通过WCCA分析,验证在上述参数在其容差范围内发生变化时,…...
TensorFlow 深度学习第二版:6~10
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只…...
C++标准库 -- 顺序容器 (Primer C++ 第五版 · 阅读笔记)
C标准库 -- 顺序容器(Primer C 第五版 阅读笔记)第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.认识文件 平时说的文件一般都是指存储再硬盘上的普通文件,形如txt,jpg,MP4,rar等这些文件都可以认为是普通文件,它们都是再硬盘上存储的。 在计算机中,文件可能是一个广义的概念,就…...
【外设零基础通用教程】GPIO 下
【外设零基础通用教程】GPIO 下使用方法GPIO 值输入读取值输出设置值GPIO输入输出应用GPIO输入应用GPIO输出应用文档使用理论补充输出方式推挽输出开漏输出上篇连接:【外设零基础通用教程】GPIO 上,主要是在做视频的时候,发现上篇理论很多&am…...
在window上安装python
在Windows上安装python 1.进入python官网https://www.python.org/ 下载配置环境,点击上方downloads,根据系统选择python环境下载(选择windows) 往下拉查找需要的版本并下载 下载后双击就可以安装python了 如何检验是否安装成功 通过【winr】调出【运行】弹窗,输…...
[hive SQL] 预约业务线
这两天有个数据需求,记录一下。 原始需求说明产品写得很乱不清晰确认了半天无语死了(开始骂人),直接列转换后的问题了 问题1: 现有一张办事预约服务记录表reservation_order,包含字段用户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领域的知识架构,即具备了较好的数学、编程及专业领域知识后,如果想在AI领域追踪前沿研究,就不能再只看教材了。毕竟AI领域的发展一日千里,教材上的知识肯定不是最新的。此时,应该将关注的重点转向AI领域的…...
【Python OpenCV】第六天:图像的基础操作
文章目录 一、本期目标二、获取并修改像素值三、获取图像属性(1)img.shape(2)img.size(3)img.dtype四、图像 ROI五、拆分及合并图像通道六、为图像扩边(填充)一、本期目标 获取像素值并修改获取图像的属性(信息)图像的 ROI图像通道的拆分及合并几乎所有这些操作与 Nu…...
2022年陕西省职业院校技能大赛“网络搭建与应用”赛项竞赛试题
2022年陕西省职业院校技能大赛 “网络搭建与应用”赛项 竞赛试题 竞赛说明 一、竞赛内容发布 “网络搭建与应用”赛项竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分) 第二部分:服务器配置及应用项目(480分) 第三部分:职业规范与素养(20分) 二、竞赛…...
面经-01
面试java开发工程师 常用数据结构,区别及使用场景 以下是一些常用的数据结构,它们的区别以及适用场景: 数组 (Array): 区别:数组是一种连续内存空间的数据结构,具有固定的大小,用于存储相同类型…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
