俗话说:“工欲善其事,必先利其器”。
为了助力大家的学习和进阶,本小节介绍几个对Java学习非常有帮助的IDEA插件,代码反编译和反汇编工具,以及非常不错的网站等。
首先不必多说,IDEA是目前Java工程师最主流的开发工具,IDEA的强大之处不仅在于自身,还在于提供了丰富的插件(这点和谷歌浏览器非常类似)。
本部分介绍几款强大实用的IDEA插件,助力大家开发。
具体安装界面不同版本IDEA略有差异,请自行研究。
如果连插件安装都不愿意学、学不会的话,很难成为一名合格的Java开发工程师。
首先要推荐的是和《手册》配套的阿里巴巴Java代码规范插件。
安装该插件后,代码超过80行、手动创建线程池等,这些和《手册》中的规约不符时,IDEA中会给出警告提示。
建议大家一定一定一定要安装该插件,它会帮助你检查出很多隐患,督促你写更规范的代码。
下面要隆重介绍的是一款可视化的字节码查看插件:jclasslib。
大家可以直接在IDEA插件管理中安装(安装步骤略)。
使用方法:
在IDEA打开想研究的类;
编译该类或者直接编译整个项目(如果想研究的类在jar包中,此步可略过);
打开“view”菜单,选择“ShowBytecodeWithjclasslib”选项;
那么有自带的强大的反汇编工具javap还有必要用这个插件吗?
这个插件的强大之处在于:
不需要敲命令,简单直接,在右侧方便和源代码进行对比学习;
该插件对我们学习虚拟机指令有极大的帮助。
另外一个不得不说的就是专栏中提到的辅助开发神器:Codota。
该插件的强大之处在于:
支持智能代码自动提示,该功能可以增强IDEA的代码提示功能;
支持JDK和知名第三方库的函数的使用方法搜索,可以看到其他知名开源项目对该函数的用法。
如上图所示,我们想了解Stream类中flatMap函数的用法,可以使用该插件查看知名开源项目的用法。
该插件就可以帮你解决这个问题。
安装完该插件以后,调用一个函数,使用Alt+Enter组合键,调出“Autofillcallparameters”自动使用该函数定义的参数名填充。
我们定义好从A类转换到B类的函数转换函数后,使用这两个插件可以自动调用Getter和Setter函数实行自动转换。
可以使用这GenerateAllSetter提供的功能,自动调用所有Setter函数(可填充默认值),然后自己再跟进实际需求设置属性值。
对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。
安装后,可以从该插件内置的各种风格个选择自己最喜欢的一种。
由于很多人没有养成好的编码风格,没有随手format代码的习惯,甚至有些同事会写代码超过几百行,阅读起来将非常痛苦。
痛苦的原因之一就是找到上下文,由于括号太多,不确定当前代码行是否属于某个代码块,此时这个插件就会帮上大忙。
大家可以观看其github首页的动图体会和学习其强大功能。
现在Java项目通常会使用maven或者gradle构建,对于maven项目来说,jar包冲突非常常见。
大家可以安装该插件,安装后IDEA中打开pom.xml文件时,就会多出一个“DependencyAnalyzer”选项卡。
如上图所示,该插件支持值插件冲突的jar包,可以选择冲突的jar包将其exclude掉。
当然还有很多类似的静态代码检查插件,大家可以自行了解安装。
SequenceDiagram可以根据代码调用链路自动生成时序图,超级赞,超级推荐!
这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。
安装完成后,在某个类的某个函数中,右键-->SequenceDiagaram即可调出。
双击顶部的类名可以跳转到对应类的源码中,双击调用的函数名可以直接调入某个函数的源码,总之非常强大。
StacktracetoUML支持根据JVM异常堆栈画UML时序图和通信图。
Stream非常好用,可以灵活对数据进行操作,但是对很多刚接触的人来说,不好理解。
IDEA的插件浩如烟海,好的IDEA插件欢迎留言交流。
另外大家可以通过IDEA插件官网进行搜索,有海量插件供你选择。
Java学习进阶之路离不开Java反编译和反汇编。
实际开发中需要用到反汇编的典型场景有:
自己或者二方上传的包含新的接口jar包到maven仓库,下载下来查看jar包检查新的接口是否包含在新的jar包中;
需要临时查看某个Jar包的源码,不想加到本地仓库中;
拿不到源码,又想了解其源码究竟是怎么写的;
线上代码表现和自己的源码不一致,怀疑线上代码不对,可以反编译去核对。
对于大多数普通Java工程师来说,使用反编译的场景多是为了学习研究。
有很多在线反编译的网站,其中比较好用的主要是以下两个:
使用简单,直接将jar包和class文件拖到页面即可。
功能很强大,支持多种反编译方式,但是浏览效果不如上面网站好。
很多人担心在线反编译可能会引起代码泄露等,所以倾向于使用本地的反编译工具。
这里推荐两款软件:JD-GUI和Luyten。
另外一个非常好用的反编译软件为Luyten,它是反编译工具Procyon的可视化显示工具。
该软件的用法和JD-GUI类似。
图形界面反编译虽然更直观,但是如果我们想反编译Linux服务器上的类文件可咋办呢?
我们可以通过Jad、CFR、Procyon、ernflower、JD等反编译工具。
另外知名的阿里开源Java诊断工具arthas也支持jad命令,可以将JVM中实际运行的class文件的字节码反编译成Java代码,便于理解业务和排查问题。
举一个真实发生过的典型的场景:
有一次代码发布上线,但是从功能表现看线上仍然是“旧代码”,但是从发布的git提交版本来看是最新版。
此时就可以使用jad反编译该类,来核查该问题。
这里简单介绍Java反编译和反汇编的区别。
这里说的反编译是指:将class文件反编译成Java源码的过程。
这里说的反汇编是指:将class文件反解析为更可读的虚拟机指令的过程。
反汇编最权威和强大的当属JDK自带的javap工具,具体用法直接输入帮助指令javap-help即可查看:
用法:javap其中,可能的选项包括:-help--help-输出此用法消息-version版本信息-v-verbose输出附加信息-l输出行号和本地变量表-public仅显示公共类和成员-protected显示受保护的/公共类和成员-package显示程序包/受保护的/公共类和成员(默认)-p-private显示所有类和成员-c对代码进行反汇编-s输出内部类型签名-sysinfo显示正在处理的类的系统信息(路径,大小,日期,MD5散列)-constants显示最终常量-classpath指定查找用户类文件的位置-cp指定查找用户类文件的位置-bootclasspath覆盖引导类文件的位置大家一定要自己多动手实践,才能更好地掌握它。
在IDEA插件中心中还可以搜到该工具的IDEA插件。
当然,还有很多其他好用的Java反编译和反汇编软件,希望大家平时多尝试,多练习。
希望大家能够熟练掌握其中一两种,能够快速反编译和反汇编,帮助自己学习知识和解决问题。
Alfred可以说是Mac系统的效率神器。该软件支持文件搜索、粘贴板管理、快捷短语提示、各种工作流等功能。
有些朋友可能会说,我们系统是windows的肿么办?
软件效果图(图片来自官网)
另外推荐一个非常好用的截图和贴图软件Snipaste。
该软件不仅是一款截图工具,还支持将截图贴到屏幕上,使用非常简单,F1截图,然后F3贴图,截图就会桌面置顶显示。
该软件目前只支持mac系统。
作为一个合格的程序员,怎能没几个趁手的画图工具呢?
每个人的喜好各有不同,下面推荐几个本人和身边人开发中常用的画图工具。
visual-paradigm推荐visual-paradigm的理由是该画图工具不仅支持软件本地画图,还支持在线画图,支持最新的语法,并且有丰富的参考示例。
该软件还提供了IDEA插件,在IDEA中创建plantUML的图形支持实时预览。
通过PlantUML官网给出的示例,大家可以快速上手。
其它UML画图工具可以使用processon来作图,优势是在线存储。windows系统用户可以使用visio,功能强大,画的图也很美观。
很多人会有些奇怪,为啥推荐思维导图呢?
其实对于Java工程师来说,思维导图是梳理知识,梳理需求的重要工具。
然而画思维导图并不是照着目录列一遍,而是带上自己的思考,具体再画图篇会讲到。
思维导图软件推荐使用:xmind、mindjet、ithoughts等。
常规用法是先启动软件,然后选择本地的Java进程,或者添加远程机器的Ip和端口号监控远程Java进程状况。
IDEA中还有VisualVM的插件,可以在本地应用启动时,自动启动VisualVM。
推荐一个方便大家开发的插件:前端插件助手。
该插件支持字符串的编解码、JSON串的格式化、代码美化、二维码生成器、页面滚动截屏、图片转Base64、简易Postman、Ajax调试等功能。
虽然名叫“前端插件助手”,其实该插件对我们后端开发帮助也极大。
可以使用该插件,生成只包含页面主要内容的PDF。
大家可以通过该软件的官网进一步了解该插件。
该插件可以修改请求和响应头,在某种调试场合非常有用。
该插件非常强大,可以修改页面Ajax请求的返回结果。
沙拉查词很多同学想看英文技术网站,但是英语不是特别好,可以借助该插件聚合多种翻译软件,翻译各种词汇或句子。
很多人想学习某个技术,但是有自己电脑配置限制或者嫌麻烦等各种原因,可能不愿意安装某些环境。
那么有没有可以在线练习的网站呢?答案是:有。
接下来推荐几个非常强大的在线练习和学习网站。
此处,不得不提的是鼎鼎大名的leetcode。
该网站提供了在算法、数据库和Shell脚本的练习题。
中文版:xuesql、廖雪峰SQL教程
JSON和Java实体互转有很多强大的网站支持JSON和Java实体互转,如bejson、jsonschema2pojo、codebeautify、FreeCodeFormat、site24*7等。
除了咱们的慕课网外,推荐几个非常好的英文学习网站。
其次是javacodegeeks,该网站会提供丰富的Java教程,还会提供一些英文PDF教程。
journaldev和jamesdbloom对技术的讲解非常透彻。
我们Java开发需要用到知名英文书籍几乎都可以在上面找到电子版。
强烈建议大家购买纸质版经典的Java技术图书,反复学习。
大家可以在Java的topic栏目了解stars最多的,最近更新的,最佳的Java项目等。
本文重点介绍了Java学习和工作中常用的软件、插件、网站等。熟练地使用这些工具,将有助于提高我的开发效率和编程体验。
1、AlibabaJavaCodingGuidelines(好东西….规定的编码要求还是蛮高的)
经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C是世界知名的反潜机,专门对付水下潜水艇,寓意是扫描出所有潜在的代码隐患。
2、iBATIS/MyBatisplugin(我用的另外一个mybatis插件,下面有说)
3、GsonFormat(这个跟app定义接口开发简直是绝配)
4、StackOverflow(没咋用过….)
5、BackgroundImagePlus(这个装过一次,定力不够……)
6、Lombok(新建实体类的神器……)
7、CodeGlance(效果不错……)
8、其他插件
Markdownsupport、MavenHelper(这个挺有用的,特别是jar冲突排查的时候……)
除去上面转载的几个插件,本人觉得这两个插件也不错:
我在想,我算不算是小半个转载…..
随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是,代码审查难度大,代码缺陷、漏洞不易发现,且审查工作随着代码量增加而增加,审查效率低。
AlibabaJavaCodingGuidelines专注于Java代码规范,目的是让开发者更加方便、快速规范代码格式。该插件在扫描代码后,将不符合规约的代码按Blocker、Critical、Major三个等级显示出来,并且大部分可以自动修复,它还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。
阿里巴巴规约扫描包括:
File>Settings>Plugins>Marketplace搜索“AlibabaJavaCodingGuidelines”,按照提示进行安装,然后重启即可。
3.1、运行方式:
(1)可以Tools>阿里编码规约>编码规约扫描
(2)在编辑界面或者项目区域点击右键,在右键菜单中选择“编码规约扫描”即可:
3.2、菜单功能:
3.3、运行结果:
扫描完成后显示结果如下,我们可以看到扫描结果主要分为Blocker(阻挡者)、Critical(严重问题)、Major(主要的)三个大类,它们表示的是问题的严重程度,严重程度由高到低为:Blocker>Critical>Major,至于每一类中都会包含什么样的问题,图中的内容已经说明了一切。
选中其中的一个问题项目,会出现如下内容(如果当前鼠标点击的是最终项,右边区域显示的是其它的内容,后面会再讲到):
(1)指定区域搜索同一类问题:
当点击③处的按钮时,会弹出如下按钮:
这里选择扫描区域,来扫描鼠标选中的同类问题。如果按照默认选择,那么运行后的结果就如下图所示:
这里我们可以看到,显示了整个Project中的所有该类的问题。
(2)预览具体的不规范代码:
如果点击的是最终的问题点或者问题所在的类文件,那显示的就是如下界面,预览该处不规范的代码。
3.4、工具栏功能介绍:
CheckStyle侧重检查编码格式和代码风格规范,如命名规范、Javadoc注释规范、空格规范、size度量(如过长的方法)、重复代码、多余Imports等,从而有效约束开发人员更好地遵循代码编写规范。Checkstyle主要是文法层面的代码编写规范的分析,对bug几乎没什么发现能力。
Checkstyle插件中默认内置有2个执行代码检查的配置文件(SunChecks和SunChecks),但是这两个文件检查的非常详细严格,即使优秀的开源项目也会检查出来有非常多的错误告信息,所以需要导入我们自定义的配置文件。
通过File>Settings>Plugins>Marketplace搜索“CheckStyle”,按照提示进行安装,然后重启即可。
PMD侧重面向安全编码规则,且具备一定的数据流分析和路径分析能力,能力比CheckStyle稍微强点,并且PMD支持自定义规则,PMD可以直接使用的规则包括以下内容:
通过File>Settings>Plugins>Marketplace搜索“PMDPlugin”,按照提示进行安装,然后重启即可
(1)从Tools菜单中启动:
通过Tools>RunPMD可以看到如下的界面,如果通过该方式启动,扫描的范围就是整个项目中的文件了。
(2)从右键菜单中启动:
在文件或者编辑器中点击右键,也可以看到“RunPMD”选项,如果通过该方式启动,检测范围取决于鼠标或光标当前所选中的区域。
3.2、运行结果:
运行后会出现如上所示的面板,左边工具栏,鼠标停留在上面会提示其功能;右边显示了检测结果,当点击具体某一问题项时,会跳转到对应的源码中。
3.3、配置检测规则:
通过File>Settings>OtherSettings>PMD可以打开检测规则的设置界面:
在“RuleSets(规则设置)”界面可以管理自定义的检测规则。因为在实际工作中,可能需要根据实际情况自定义检测规则,就可以通过这里导入,如果要使用它,需要在启动PMD进行检测时选择该自定义规则。
点击“Options”选项卡,在其中可以配置一些检测规则选项:
其中重点需要留意的是“SkipTestSource”这一项,因为在项目中有不少AndroidStudio自动生成的测试代码,如下所示,选择上述选项后可以将其过滤掉。
FindBugs侧重于发现代码中存在的bug,如运行时错误检测(空指针检查、未合理关闭资源、字符串相同判断错(==,而不是equals)等),它可以简单高效全面地帮助我们发现程序代码中存在的bug以及潜在隐患,针对各种问题,它提供了简单的修改意见供我们参考
通过File>Settings>Plugins>Marketplace搜索“FindBugs”,按照提示进行安装,然后重启即可
FindBugs可以分析单个文件、包下面的所有文件、整个module下的文件、整个project下的文件,右键想要分析的文件名/包名/module名/project
分析完之后就会出现结果面板
点击对应的item在右边会定位到具体的代码,这是根据提示进行处理修改就行
4.1、Badpractice代码坏习惯:
4.2、Dodgycode糟糕的代码:
4.5、Experimental:
通过File>Settings>Plugins>Marketplace搜索“SonarLint”,按照提示进行安装,然后重启即可
右键项目或者文件进行如上图所示操作,执行之后可以看到如下信息,如果代码中有不合理的地方会在report中显示,同时点击错误的地方在右边会给出建议的修改供参考。另外,搜索公众号互联网架构师后台回复“面试”,获取一份惊喜礼包。
4.1、配置Sonar服务器:
点击新增按钮,输入ConfigurationName,配置sonarlint服务器的地址,然后下拉框选择Login/Password,输入sonarlint服务器的账号密码
4.2、具体Sonar工程配置:
配置完服务器之后,需要针对具体工程进行配置,点击connection下拉框,选择上面配置好的服务器连接,然后点击Searchinlist,找到对应的工程:
4.3、使用SonarLint检查:
配置完上面两步之后,接下来就可以选择要进行检查的类或者目录进行sonarlint检查了(跟第3点的使用方式一致),同时,在commit代码的时候,勾选“PerformSonarlintanalysis”,会针对你要提交的代码进行sonarlint检查
正文结束
推荐阅读↓↓↓
苹果电脑或者是用惯Eclipse快捷的,可以选择其他快捷键插件。
编好的程序在执行过程中如果出现错误,该如何查找或定位错误呢?简单的代码直接就可以看出来,但如果代码比较复杂,就需要借助程序调试来查找错误了。
运行编写好的程序时,可能出现的几种情况:>情况1:没有任何bug,程序执行正确!====================如果出现如下的三种情况,都有必要使用debug=============================>情况2:运行以后,出现了错误或异常信息。但是通过日志文件或控制台,显示了异常信息的位置。>情况3:运行以后,得到了结果,但是结果不是我们想要的。>情况4:运行以后,得到了结果,结果大概率是我们想要的。但是多次运行的话,可能会出现不是我们想要的情况。比如:多线程情况下,处理线程安全问题。9.2Debug的步骤Debug(调试)程序步骤如下:1、添加断点2、启动调试3、单步执行4、观察变量和执行流程,找到并解决问题
在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。
packagecom.atguigu.debug;importjava.util.Date;/***ClassName:Debug05*Package:com.atguigu.debug*Description:演示5:异常断点**@Author:尚硅谷-宋红康*@Create:2022/10/2022:01*@Version1.0*/publicclassDebug05{publicstaticvoidmain(String[]args){intm=10;intn=0;intresult=m/n;System.out.println(result);//Personp1=newPerson(1001);//System.out.println(p1.getName().toUpperCase());}}通过下图的方式,对指定的异常进行监控:
问题:使用StepInto时,会出现无法进入源码的情况。如何解决?(即:使用向下的蓝箭头只能进入到自定义的方法中,怎么进入到源码提供的方法中呢???)
方案1:使用forcestepinto即可(单步执行,会进入到方法,方法可以来自核心类库的源码----使用向下的红箭头)
小结:
经验:初学者对于在哪里加断点,缺乏经验,这也是调试程序最麻烦的地方,需要一定的经验。简单来说,在可能发生错误的代码的前面加断点。如果不会判断,就在程序执行的起点处加断点。
在IDEA中配置Tomcat之前,需要保证已经安装并配置了Tomcat的环境变量。如果没有安装并配置,可以参考《尚硅谷_宋红康_Tomcat8.5快速部署.docx》配置完成以后,在命令行输入:catalinarun。能够启动tomcat,则证明安装配置成功。
选择:WebApplication,选择Createweb.xml,如下:
配置好后,可以直接运行:
解决方案:1)点击Help=>EditcustomVMOptions,在最后面添加
2)在当前Tomcat实例中配置VMoption,添加
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。在JavaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁:
Make→Ant→Maven→Gradle→其他……
maven的下载–解压–环境变量的配置这里就不赘述了,需要的参考03-资料\05-Maven的配置中的《尚硅谷_Maven的配置_V2.0.docx》。下面直接整合Maven。选择自己Maven的目录,和settings文件,然后配置自己的仓库reposiroty。
指明当前maven工程的名称、模板等信息。这里要求一个项目组的jdk版本必须一致。通过坐标,就可以定位仓库中具体的jar包。如下:
类似的操作test目录下,提供resources即可。
第1步:创建Maven的核心配置文件pom.xml
packagecom.atguigu.java;/***ClassName:HelloMaven*Package:com.atguigu.java*Description:**@Author:尚硅谷-宋红康*@Create:2022/10/2018:20*@Version1.0*/publicclassHelloMaven{publicStringsayHello(Stringmessage){return"Hello,"+message+"!";}}第3步:编写测试代码在/src/test/java/com/atguigu/java目录下新建测试文件HelloMavenTest.java
目录下也会有对应的生命周期。其中常用的是:clean、compile、package、install。
配置部署的详细信息:
配置MySQL数据库的详细信息:
表面上很多人认为配置Database就是为了有一个GUI管理数据库功能,但是这并不是IntelliJIDEA的Database最重要特性。数据库的GUI工具有很多,IntelliJIDEA的Database也没有太明显的优势。
IntelliJIDEA的Database最大特性就是对于JavaWeb项目来讲,常使用的ORM框架,如Hibernate、Mybatis有很好的支持,比如配置好了Database之后,IntelliJIDEA会自动识别domain对象与数据表的关系,也可以通过Database的数据表直接生成domain对象等。
阿里巴巴Java编码规范检查插件,检测代码是否存在问题,以及是否符合规范。
使用:在类中,右键,选择编码规约扫描,在下方显示扫描规约和提示。根据提示规范代码,提高代码质量。
可视化的字节码查看器。使用:
英文设置:使idea出现的导航信息都变为英文(安装后使用插件的地方都由原来的中文变为英文)在Help->EditCustomVMOptions…,加上
注册翻译服务(有道智云、百度翻译开放平台、阿里云机器翻译)帐号,开通翻译服务并获取其应用ID和密钥绑定应用ID和密钥:偏好设置(设置)>工具>翻译>常规>翻译引擎>配置…
使用:鼠标选中文本,点击右键即可自动翻译成多国语言。
注:请注意保管好你的应用密钥,防止其泄露。
测试:选中代码右键----translate(翻译)
实际开发中还有一个非常常见的场景:我们创建一个对象后,想依次调用Setter函数对属性赋值,如果属性较多很容易遗漏或者重复。
可以使用这GenerateAllSetter提供的功能,快速生成对象的所有Setter函数(可填充默认值),然后自己再跟进实际需求设置属性值。
代码统计工具。
快捷键提示插件。当你执行鼠标操作时,如果该操作可被快捷键代替,会给出提示,帮助你自然形成使用快捷键的习惯,告别死记硬背。
用于生成多个文档注释。
在IDEA里刷力扣算法题
根据json生成对象。
举例:
对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。IDEA支持各种主题插件,其中最出名的当属MaterialThemeUI。
对于初学者,好多IDEA的配置,都是英文不是特别熟悉.因此官方提供了汉化补丁,从此使用无压力,个人感觉好用.包含chinese和lombok都安装一下.安装好之后重启IDEA即可.