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

news2024/11/24 20:24:17

第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{
​
    @Override
    public 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;
    }
​
    @Override
    public 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。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器视觉1】光源介绍与选择

文章目录一、常见照明光源类型二、照明光源对比三、照明技术3.1 亮视野与暗视野3.2 低角度照明3.3 前向光直射照明3.4 前向光漫射照明3.5 背光照明-测量系统的最佳选择3.6 颜色与补色示例3.7 偏光技术应用四、镜头4.1 镜头的几个概念4.2 影响图像质量的关键因素4.3 成像尺寸4.4…

迁移Visual Studio2022到非系统盘

参考&#xff1a;VS2019/VS2022移动安装位置CSDN博客 已经安装VS Studio2022&#xff0c;默认在了C盘&#xff0c;下面是VS2022更换安装位置的方法&#xff1a;将安装好的文件剪切到其他盘&#xff0c;然后mklink链接。 第一步&#xff1a;将安装好的文件剪切到其他盘 以下为…

C++ 实现 matlab 的 buttord函数

文章目录1. matlab 的 buttord函数 的作用2. matlab 的 buttord函数 的使用方法3. C 实现代码4. 测试代码和结果4.1 定义滤波器的设计指标的结构体4.2 C 测试文件4.3 测试结果1. matlab 的 buttord函数 的作用 根据给定的巴特沃斯滤波器的指标计算滤波器的最低阶数和截止频率 …

【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都已更新完毕&#xff0c;欢迎大家前往订阅本专题&#x1f38f; &#x1f38f;【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 &#x1f38f;【蓝桥杯嵌入式】蓝桥…

k8s ingress controller 使用

目录 一 安装Ingress controller 二 创建service deploy 三 创建ingress 四 测试 一 安装Ingress controller apiVersion: v1 kind: Namespace metadata:name: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginx--- # …

怎么把wav转换成mp3格式,5种方法值得收藏

怎么把wav转换成mp3格式&#xff1f;wav格式相信很多小伙伴们不是很熟悉&#xff0c;这种文件格式通常用于录音室等一些专业音乐项目上&#xff0c;那么wav格式和mp3格式有什么区别呢&#xff1f;wav全名Waveform Audio File Format&#xff0c;是微软公司开发的一种声音文件格…

【HarmonyOS】小熊派鸿蒙系统搭建

文章目录一、BearPi-HM Micro 开发板介绍二、Linux镜像下载三、BearPi-HM Micro编译环境配置1.首先添加如下镜像源2.更新镜像源3.安装依赖库及工具4.安装hb5.测试hb是否安装成功四、安装mkimage工具1.新建tools目录2.下载mkimage.stm32工具到~/tools目录&#xff0c;并复制到/h…

谷粒商城-分布式基础篇3

1.商品服务-品牌管理 把逆向生成的前端代码复制到前端src\views\modules\product 这样我们基本的增删改查就有了 全局搜索isAuth,修改返回值为true 关闭eslint build\webpack.base.conf.js const createLintingRule () > ({// test: /\.(js|vue)$/,// loader: eslint-lo…

真题详解(线性表)-软件设计(四十八)

原创 真题详解(UML图&#xff09;-软件设计&#xff08;四十七)https://blog.csdn.net/ke1ying/article/details/130096516 TCP 属于传输层&#xff0c; 用TCP连接的应用层有&#xff1a; SMTP&#xff08;25&#xff09; HTTP&#xff08;80&#xff09; Telnet&#xff08;…

kitti数据集中---标注数据label_2

标注文件中16个属性&#xff0c;即16列。但我们只能够看到前15列数据&#xff0c;因为第16列是针对测试场景下目标的置信度得分&#xff0c;也可以认为训练场景中得分全部为1但是没有专门标注出来。下图是000001.txt的标注内容和对应属性介绍。 相机坐标系中&#xff0c;y方向是…

【软考数据库】第一章 计算机系统基础知识

目录 1.1 计算机系统 1.1.1 计算机硬件组成 1.1.2 中央处理单元 1.1.3 数据表示 1.1.4 校验码 1.2 计算机体系结构 1.2.1 体系结构分类 1.2.2 指令系统存 1.2.3 储系系统 1.2.4 输入/输出技术 1.2.5 总线结构…

【Golang开发面经】字节跳动(三轮技术面)

一面 epoll、select、poll 区别 select 机制刚开始的时候&#xff0c;需要把 fd_set 从用户空间拷贝到内核空间&#xff0c;并且检测的 fd 数是有限制的&#xff0c;由 FD_SETSIZE 设置&#xff0c;一般是1024。数组实现。 poll 的实现和 select 非常相似&#xff0c;只是描…

Node【一】初识Node

文章目录&#x1f31f;前言&#x1f31f;Node.js&#x1f31f;特性&#xff1a;&#x1f31f;1. 单线程&#x1f31f;2.异步IO&#x1f31f;前端中的异步&#x1f31f;Node中的异步&#x1f31f;3.跨平台&#x1f31f;4.运行速度快&#x1f31f; 劣势&#xff1a;&#x1f31f;…

ASP一个物流商品运输系统的设计与实现

物流运输行业的今天正朝着追求高效、低成本、稳定可靠的方向发展。本文详细介绍了网上物流管理系统&#xff0c;涉及到客户端运输线路设计、过程跟踪等功能模块以及管理员端的相应模块的具体实现&#xff0c;分析了整个系统的架构、工作原理、实现功能等。系统采用ASPMS SQL以B…

代码随想录算法训练营第43天 | 动态规划 背包理论基础 LeetCode1049.最后一块石头的重量II,494.目标和,474.一和零

代码随想录算法训练营第43天 | 动态规划 背包理论基础 LeetCode1049.最后一块石头的重量II&#xff0c;494.目标和&#xff0c;474.一和零 1049.最后一块石头的重量II 第一遍读题思考 重点在于背包问题的理论基础建议阅读以下两个链接。 背包问题理论基础&#xff0c;用二维…

sed命令基础

sed编辑器即流编辑器&#xff08;stream editor&#xff09;&#xff0c;根据命令处理数据流中的数据&#xff0c;这些命令可从命令行输入&#xff0c;或者指定文件中输入。 sed执行的操作如下&#xff1a; 1&#xff09;从输入读取一行数据 2&#xff09;根据提供的命令匹配数…

KSS-ICP: 基于形状分析技术的点云配准方法

目录 1. 概述 2. 算法实现 3. 实验结果 总结 Reference 三维点云配准是三维视觉领域一个经典问题&#xff0c;涉及三维重建&#xff0c;定位&#xff0c;SLAM等具体应用问题。传统的配准可以被分为两条技术路线&#xff0c;即基于全局姿态匹配的方法以及基于特征点对应的方法。…

疫情下社区管理系统的设计与实现(论文+源码)_kaic

疫情下社区管理系统 摘 要&#xff1a;新冠疫情下的社区人员管理系统是基于SpringBoot搭建的一套前后端分离系统。面向疫情下的社区管理人员和社区用户&#xff0c;主要用于进行社区服务&#xff0c;进行高效的社区人员管理。具有一定的经济效益和社会效益。本文分析了新冠疫情…

计算机网络第三章(数据链路层)【湖科大教书匠】

1. 概述 物理层发出去的信号需要通过数据链路层才知道是否到达目的地&#xff1b;才知道比特流的分界线 链路(Link)&#xff1a;从一个结点到相邻结点的一段物理线路&#xff0c;中间没有任何其他交换结点数据链路(Data Link)&#xff1a;把实现通信协议的硬件和软件加到链路…

【ROS实操2话题订阅输出乌龟位姿】

需求描述 已知turtlesim中的乌龟显示节点&#xff0c;会发布当前乌龟的位姿(窗体中乌龟的坐标以及朝向)&#xff0c;要求控制乌龟运动&#xff0c;并时时打印当前乌龟的位姿。 实现分析 1.首先&#xff0c;需要启动乌龟显示以及运动控制节点并控制乌龟运动。 2.要通过ROS命令…