网站设计侵权,网站右下角flash,做网站百灵鸟,网站建设技术人员导航#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 推荐学习视频#xff1a; 黑马程序员全套Java教程_哔哩哔哩 尚硅谷Java入门视频教程_哔哩哔哩 目录
零… 导航 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 推荐学习视频 黑马程序员全套Java教程_哔哩哔哩 尚硅谷Java入门视频教程_哔哩哔哩 目录
零、引言
0.1 背景和写作目的
0.2 本期更新内容
一、环境准备
1.1 JDK8
下载
2.安装
3.配置环境变量
验证
知识加油站
JDK、JRE、JVM、Java的区别
Java8新特性
1.2 记事本体验Hello World
二、Java编译器IDEA
2.1 下载安装配置
2.1.1 下载安装
2.1.2 配置
编码配置UTF-8
配置Maven路径
2.1.3 安装插件
基础插件
高级插件
2.1.4 基本操作
2.1.5 编写Hello World
2.2 IDEA常用快捷键
2.3 断点调试
2.3.1 断点
2.3.2 调试
2.3.3 知识加油站高级断点调试
2.3.3 丢帧退帧
2.3.4 强制返回
2.3.5 stream流调试
2.3.6 评估表达式ALTF8
2.3.7 多线程调试 零、引言
0.1 背景和写作目的
1.为Java工程师提供一整套Java学习路线。
当前市面上Java学习路线林林总总很难找到一套完整的、并且由自己创作的Java学习路线本文目的便是提供一套覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等技术的全面方案帮助Java从业者更快的成长为高级开发消除信息不对称。
2.遵循开源精神贡献自身力量。
Java语言拥有一个非常活跃的社区在笔者的成长过程中从很多博客和视频中学习到有价值的内容对我自身提升了很多所以也希望可以通过写博客帮助到更多人。
3.温故知新提高技术深度。
做事情要有记录要有自己的见解因为人的记忆力有时候是不可靠的一些东西长时间不看就会记不清晰有文章可以快速回顾是一件非常好的事情。
0.2 本期更新内容
剔除冗余文字内容更加精炼。新增知识加油站内容更加深入浅出。优化大纲调整章节顺序。图、文、代码块优化提高可读性。
一、环境准备
1.1 JDK8
下载
下载jdk8JDK8就是JDK1.8 JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命令方式问题。所以JDK8或者JDK1.8也是同一个东西。 下载地址Java Downloads | Oracle
选择windows64版本exe下载 需要登录才能下载 登录后会自动下载 2.安装
下一步 设置安装路径 点击下一步将安装完成。
3.配置环境变量
此电脑右键-属性 高级系统设置 环境变量 设置环境变量 验证
验证是否安装成功
打开Windows的运行可用winR快捷键打开输入cmd
验证Java版本
java -version
验证Java编译命令是否可用
javac
知识加油站
JDK、JRE、JVM、Java的区别
简而言之JVM是Java虚拟机JRE是Java运行环境JDK是个Java开发的工具包Java是门编程语言。
JVMJava Virtual Machine是Java虚拟机是Java程序运行的基础它将Java程序编译后的字节码解释执行并将其转换为机器码运行。JREJava Runtime Environment是Java运行环境包括了JVM以及Java程序运行所需的类库等。JDKJava开发工具包包括了JRE以及用于Java开发的工具如编译器javac、调试器jdb、打包工具jar等。
Java8新特性
这里仅简单介绍具体下面章节会详细介绍。
Java8新特性
Lambda表达式Lambda表达式可以被视为一个对象必须有上下文环境作用是实现单方法的接口。该特性可以将功能视为方法参数,或者将代码视为数据。上下文环境意思是能证明它是对象例如让它处在方法或类的实参里或者赋值给对象引用。 省略情况形参类型、返回类型可以省略单参数能省略小括号单语句能省略return、分号和大括号全省略或全不省略方法引用引用已存在的Lambda表达式达到相同的效果。引用已有Java类或对象实例的静态方法、实例方法、对象方法System.out::println;、构造器方法。可以与Lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。接口默认方法允许在接口中定义默认方法,默认方法必须使用default修饰。默认方法是接口中有方法体的方法用于向已有的接口添加新的功能而无需破坏现有的实现。实现类可以直接调用默认方法也可以重写默认方法。Stream API新添加的Stream APIjava.util.stream支持对元素流进行函数式操作。Stream API 集成在 Collections API 中,可以对集合进行批量操作stream流的生成、操作、收集例如filter()过滤、distinct()去重、map()加工、sorted()排序等操作。Date Time API新增LocalDate、LocalTime、DateTimeFormatter等类加强对日期与时间的处理。LocalDate、LocalTime可以获取本地时间。线程安全的DateTimeFormatter代替线程不安全的SimpleDateFormat用于将日期和字符串之间格式转换。HashMap底层引入红黑树之前版本HashMap底层是“数组链表”当头插法的value链表长度大于等于8时链表会转为红黑树红黑树查询性能稳定O(logn)是近似平衡二叉树层数最高2logn。ConcurrentHashMap降低锁的粒度JDK1.8之前采用分段锁锁粒度是分段segmentJDK1.8采用synchronizedCAS锁粒度是槽头节点CompletableFuture是Future的实现类JDK8引入用于异步编排。JVM方法区的实现方式由永久代改为元空间元空间属于本地内存由操作系统直接管理不再受JVM管理。同时内存空间可以自动扩容避免内存溢出。默认情况下元空间可以无限使用本地内存也可以通过-XX:MetaspaceSize限制内存大小。
1.2 记事本体验Hello World
1.新增txt文件输入内容如下并将文件命名为hello.java
public class hello{public static void main(String[] args){System.out.println(hello,world~~~~~~);}
} 2.在当前目录下打开cmd命令行编译、运行Java代码
编译
#javac指令编译java代码为hello.class文件
javac hello.java
运行
#java指令运行hello.class文件。.class可以省略
java hello.class 可以看到命令行会输出
扩展 1. 如何打开命令行 方法一在文件地址栏输入cmd回车可以快速在当前目录打开命令行 方法二winR快捷键输入cmd回车然后用cd命令到达指定目录 2.javac指令和java指令是什么 在Java中javac和java是两个关键的命令行工具用于编译和运行Java程序。 javac: javac是Java编译器的命令。它用于将Java源代码文件以.java为扩展名编译成字节码文件以.class为扩展名。 语法 javac options source files 例如要编译一个名为 MyProgram.java的Java源文件可以使用以下命令 javac MyProgram.javajavac的常见选项 javac -d directory指定生成的类文件存放的目录。javac -cp 或 -classpath指定查找用户类文件和注释处理程序的位置。javac -source指定要使用的源代码版本。javac -target生成的类文件的目标字节码版本。 java: java是Java虚拟机JVM的命令。它用于运行已经编译好的Java程序。 语法 java options class file 例如如果你有一个名为 MyProgram.class的已编译Java程序可以使用以下命令来运行它 java MyProgramjava的常见选项 java -cp 或 -classpath指定查找用户类文件的位置。java -Xmx设置JVM的最大堆内存大小。java -Xms设置JVM的初始堆内存大小。 二、Java编译器IDEA
2.1 下载安装配置
2.1.1 下载安装
Other Versions - IntelliJ IDEA
安装一直点击下一步即可只有两点需要注意
1.设置安装路径 2.创建桌面快捷方式 2.1.2 配置
注意所有设置都必须要关闭项目后再进行设置这样才是全局设置。 先关闭项目再点击设置 编码配置UTF-8
配置Maven路径 这一步初学者可以直接略去在后面学到Maven后再配置。 设置里搜索Maven然后配置主路径、仓库路径、配置路径
Maven配置依赖和插件后自动刷新
2.1.3 安装插件
基础插件
IDEA推荐安装以下插件便捷开发初学者可以仅安装第一个插件后面学到再安装
1.Chinese(Simplified) Language Pack/中文语言包
用于汉化IDEA官方已经加汉化做的很好了例如checkout移位签出rebase译为变基。当然习惯了英文可以继续用英文。 2.Alibaba Java Coding Guidelines
提供代码检查对于不符合编程规范的代码会进行提示
/*** 没有注释作者*/
public class Test {public static void main(String[] args) {int a123;System.out.println(hello);//不要使用行尾注释}
} 高级插件 下面插件建议学到Maven和Mybatis后再安装 1.Maven helper
安装后在代码中右键可以选择Maven模块会出现打包编译等选择另外Maven helper可以解决依赖冲突问题。 2.MybatisX
使用MybatisX插件后对应的mapper.xml,mapper.java出现小鸟图标编写接口定义方法后会自动在xml中生成statement语句提高Mybatis框架的开发效率。 3.RESTfulToolkit-fix
RestfulToolkit-fix是一套RESTful服务开发辅助工具集可以根据URL直接跳转到对应的Controller方法定义在Controller的方法上添加了能复制请求URL和方法参数的功能。 安装后可以通过ctrl\快捷键搜索url插件会帮你找到url对应的Controller。 全局模糊匹配URL Windows快捷键: Ctrl \ 或者 Ctrl Alt N。MacOS快捷键: Command \ 或者 Command option N。 5.Private Notes
用于在只读代码中添加注释在阅读一些框架和中间件源码时使用比较方便。 在任何你想加注释的地方 按下Alt Enter鼠标移出点击即可保存 已有私人注释 按下Alt Enter即可快速编辑 Alt p 可快速添加或者编辑私人注释 Alt o 展示私人注释的其它操作 右键菜单私人注释查看操作 2.1.4 基本操作
查看本地历史记录
idea是会自动保存各文件历史记录的右键文件-查看本地历史记录即可
2.1.5 编写Hello World
1.创建空项目 2.新建模块 注意SDK开发工具包选JDK8 3.新建包 4.新建类 然后psvm回车自动生成静态main方法sout回车自动生成System.out.println()输出方法。 package package1;/*** author xxx*/
public class Test {public static void main(String[] args) {System.out.println(hello world~~~~);}
}
运行 如果控制台中文乱码就在设置里把文件编码页都改成utf-8。 2.2 IDEA常用快捷键
格式化ctrlaltL
main方法psvm回车输出sout回车内容提示ctrlaltspace。altinsert生成构造、setget方法。
补全代码CtrlAltv或.var或.for
例如写new Dog();按快捷键会自动补全声明Dog dognew Dog();或者写new Dog().var回车会自动补全成Dog dognew Dog();或者写lists.for回车会自动生成for(ListString list:lists){}
万能快捷键altenter
获取警告、报错提示自动改正。
查找ctrlf 替换ctrlr
替换所有与选中内容相同的文本 ctrlb跟进
或者ctrl鼠标左键、或者鼠标左键跟进到该类的定义页面。如果选中的是标识符可以查找页面内所有该标识符位置。
alt左键整列编辑
ctrld复制光标行并粘贴
ctrlx删除光标行
Ctrlh查看该类继承关系
ctrlaltm抽取选中代码为方法
Ctrlf12查看类中所有方法。
评估表达式ALTF8 2.3 断点调试
2.3.1 断点 调试按钮运行按钮 普通断点如果断点打在普通代码行上点击“debug”会自动运行到该行暂停 方法断点如果断点打在方法上点击“debug”会自动运行到该方法入口处暂停
接口断点如果断点打在接口方法点击“debug”会自动运行到实现类对应方法入口处暂停
字段断点如果断点打在字段上点击“debug”会自动运行到修改此字段的代码行处暂停可以在断点处右键设置成访问时也暂停
条件断点在断点处右键可以输入布尔类型的条件例如i0、user.getName()!nullzhangsan.equals(user.getName())。 示例当i为10时暂停代码运行 debug可以看到变量信息 异常断点在异常时暂停代码运行。在断点处右键-更多设置断点为异常断点程序将在发生异常时暂停。 2.3.2 调试
打断点后代码运行到这一步会停止下面红色方框是最常用的两个调试按钮
蓝色代码行代表此时调试运行到这一行这一行还没运行能看到上一行的结果。 调试的五个核心图标分别是 “Step over”步过。往下运行一行代码并跳过当前方法的调用。“Step into”步入。进入方法内部并继续逐行执行。适用于自定义方法或第三方方法但无法进入JDK方法的内部。注意如果蓝色光标行不是方法则此按钮相当于step over。“Force step into”强制步入不常用。强制进入方法的内部即使常规的Step into操作无法进入方法内部时也可以使用。适用于无法通过常规方式进入的方法。例如Symtem.out.println()等JDK方法内部。“Step out”步出。退出当前方法即执行完当前方法后返回到调用该方法的位置。注意如果本方法是main方法则将直接步出这个main方法。“Resume Program”运行到光标处。继续运行程序直到下一个断点位置或程序结束。可用于暂停状态下的程序恢复运行。 2.3.3 知识加油站高级断点调试
2.3.3 丢帧退帧
退帧回退到此方法被调用之前。
当我们 Debug 从 A 方法进入 B 方法时通过降帧退帧可以返回到调用 B 方法前这样我们就可以再一次调用 B 方法。
通常用于当我们快执行完 B 方法后发现某个重要流程被我们跳过了想再看一下则此时可以先回退到 A 方法然后再次进入 B 方法。
2.3.4 强制返回
右键并点击“force return” 后此方法栈将直接终止恢复到上个方法栈。
使用场景需要结束当前断点并且不希望接下来的程序操作数据库时使用强制返回。 注意注意如果点击红色方格或重新调试虽然也是终止但它其实是运行完剩余代码后再终止。 强制返回接下来的程序将不再继续执行。终止接下来的程序将走完然后再终止程序。 示例在下面断点处强制返回将不打印那行文字终止则打印。 2.3.5 stream流调试
在stream流处打断点debug后点击“trace current stream chain”
就可以看到整个流式处理的过程
2.3.6 评估表达式ALTF8
在if处打断点debug后点击“evaluate expression”可以在评估框下测试另一个分支
2.3.7 多线程调试
多线程环境打断点并右键设置Thread或All
Thread暂停进入断点的线程不影响其他线程执行。所有线程依次debug即你如果给多个线程都加断点第一个线程debug期间其他线程将保持断点暂停状态ALL暂停全部线程。只debug第一个暂停线程即你如果给多个线程都加断点那么只第一个断点对应的线程会正常debug其他线程会并发运行