第04章_IDEA的安装与使用(下)(IDEA断点调试,IDEA常用插件)

文章目录

  • 第04章_IDEA的安装与使用(下)
    • 8. 快捷键的使用
      • 8.1 常用快捷键
      • 8.2 查看快捷键
        • 1、已知快捷键操作名,未知快捷键
        • 2、已知快捷键,不知道对应的操作名
      • 8.3 自定义快捷键
      • 8.4 使用其它平台快捷键
    • 9. IDEA断点调试(Debug)
      • 9.1 为什么需要Debug
      • 9.2 Debug的步骤
        • 1、添加断点
        • 2、启动调试
        • 3、单步调试工具介绍
      • 9.3 多种Debug情况介绍
        • 9.3.1 行断点
        • 9.3.2 方法断点
        • 9.3.3 字段断点
        • 9.3.4 条件断点
        • 9.3.5 异常断点(暂略)
        • 9.3.6 线程调试(暂略)
        • 9.3.7 强制结束
      • 9.4 自定义调试数据视图(暂略)
      • 9.5 常见问题
    • 10. IDEA常用插件
      • 推荐1:Alibaba Java Coding Guidelines
      • 推荐2:jclasslib bytecode viewer
      • 推荐3:Translation
      • 推荐4:GenerateAllSetter
      • 插件5:Rainbow Brackets
      • 推荐6:CodeGlance Pro
      • 推荐7:Statistic
      • 推荐8:Presentation Assistant
      • 推荐9:Key Promoter X
      • 推荐10:JavaDoc
      • 推荐11: LeetCode Editor
      • 推荐12:GsonFormatPlus
      • 插件13:Material Theme UI

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


8. 快捷键的使用

8.1 常用快捷键

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;
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;
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;
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;
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;
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;
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;
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;
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。

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245080.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新&#xff1a;正常刷新网页&#xff0c;网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新&#xff1a;忽略缓存刷新&#xff0c;重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据

freeRTOS总结(八)任务相关API函数

1&#xff0c; FreeRTOS任务相关API函数介绍&#xff08;熟悉&#xff09; UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) 获取任务优先级函数 此函数用于获取指定任务的任务优先级&#xff0c;使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1 void vTask…

用于垃圾回收的运行时配置选项

反馈 本文内容 指定配置的方法垃圾回收的风格管理资源使用情况大型页面 显示另外 4 个 此页面包含有关 .NET 运行时垃圾回收器 (GC) 设置的信息。 如果你要尝试让正在运行的应用达到最佳性能&#xff0c;请考虑使用这些设置。 然而&#xff0c;在特定情况下&#xff0c;默认…

【动态规划】C++ 算法458:可怜的小猪

作者推荐 视频算法专题 涉及知识点 动态规划 数学 力扣458:可怜的小猪 有 buckets 桶液体&#xff0c;其中 正好有一桶 含有毒药&#xff0c;其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药&#xff0c;你可以喂一些猪喝&#xff0c;通过观察猪是否…

精通 Spring REST API:最佳实践

概述 随着数字时代的推进&#xff0c;基于Web的程序已经成为构建交互式应用的关键。客户端与服务器之间的沟通频繁依赖于通过 APIs 获取的网络服务。 使用开源框架Spring&#xff0c;开发者可以有效率地搭建Web服务。本篇文章旨在展示如何利用Spring来构筑一个REST风格的Web服…

基于Java+SpringBoot+vue+element疫情物资捐赠分配系统设计和实现

基于JavaSpringBootvueelement疫情物资捐赠分配系统设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…

【字符串】【C++算法】828.统计子串中的唯一字符

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 子数组&#xff08;串&#xff09; 字符串 LeetCoce828.统计子串中的唯一字符 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符&#xff0c;并返回唯一字符的个数。 例…

【pyqt6】用pyqt做一个点菜小程序

用pyqt做一个点菜小程序 前言1.pyqt62. 功能介绍3.程序实现 前言 在本文中&#xff0c;我们将使用 PyQt6&#xff08;Python的GUI库&#xff09;创建一个简单的点菜小程序。该程序允许用户从菜单中选择菜品&#xff0c;将其添加到订单中&#xff0c;并通过点击“下单”按钮查看…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数&#xff1a; {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数&#xff1a; 在请求中pre-req页面下 //手动的获得时间戳 var…

关于鸿蒙系统开源和技术细节的一些探讨

1月18日在深圳举办了“鸿蒙生态千帆启航仪式”&#xff0c;这也是华为鸿蒙开启生态进阶的信号。在政策的叠加下&#xff0c;鸿蒙未来必定是势不可挡的。我们这些程序员也得与时俱进&#xff0c;熟悉鸿蒙的技术和细节&#xff0c;别在经济寒冬里被淘汰了。 官方称 Harmony OS N…

1.24号c++

C绪论 c是c语言的扩充&#xff0c;C包含了C的所有属性&#xff0c;换一句话说&#xff0c;C语言在C中都合法。 C语言编程思想&#xff1a;面向过程 c编程思想&#xff1a;面向对象 可以说在C中一切皆对象。 c的三大属性&#xff1a;封装&#xff0c;继承&#xff0c;多态。…

VMWare扩展Ubuntu LVM卷

当我们在安装程序提示磁盘空间满了时&#xff0c;我们可以通过以下步骤进行空间扩展。 首先是调整虚拟机磁盘大小&#xff0c;注意这里关机后才可编辑 然后是使用df -hl命令&#xff0c;看磁盘占用情况&#xff0c;找到满载的分区 再是使用lsblk查看分区设备名&#xff0c;确定…

安达发|APS排产系统和SCM供应链管理之间的关系

APS排产系统和SCM供应链管理是现代企业管理中非常重要的两个环节&#xff0c;它们之间存在着密切的关系。本文将从以下几个方面来探讨APS排产系统和SCM供应链管理之间的关系。 1. 定义与功能 APS排产系统&#xff08;Advanced Planning and Scheduling System&#xff09;是一种…

加速应用开发:低代码云SaaS和源码交付模式如何选

随着数字化转型的加速&#xff0c;企业对于快速开发和交付高质量应用的需求也越来越迫切。为了满足这一需求&#xff0c;开发者们开始探索采用低代码平台进行软件开发工作&#xff0c;以加速应用开发过程。 目前&#xff0c;市场上的低代码产品众多&#xff0c;但基本可分为简单…

外包干了2个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

代理设计模式JDK动态代理CGLIB动态代理原理

代理设计模式 代理模式&#xff08;Proxy&#xff09;&#xff0c;为其它对象提供一种代理以控制对这个对象的访问。如下图 从上面的类图可以看出&#xff0c;通过代理模式&#xff0c;客户端访问接口时的实例实际上是Proxy对象&#xff0c;Proxy对象持有RealSubject的引用&am…

【2024】新建mysql数据库,如何选择字符集和排序规则

如何使用 Navicat 新建 MySQL 数据库&#xff0c;并选择字符集与排序规则 如何使用 Navicat 新建 MySQL 数据库并选择字符集与排序规则1. 开始之前2. 新建数据库步骤 1: 打开 Navicat步骤 2: 创建新数据库步骤 3: 填写数据库名称 常见的字符集和排序规则及其选择场景1. 字符集&…

有了NFC和蓝牙,为何还要UWB?什么时候UWB才是首推选择呢?

UWB UWB&#xff08;超宽带&#xff0c;Ultra-Wideband&#xff09;是一种短距离无线通信技术&#xff0c;它提供比当前使用的其他定位技术更精确的读数&#xff0c;使用飞行时间&#xff08;ToF&#xff09;和到达角&#xff08;AoA&#xff09;计算&#xff0c;UWB可以实时地…

jmeter分布式压测详解,建议收藏

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 一、什么是压力测试&#xff1f; 压力测试&#xff0…