Java笔记草稿——已完成

导航:

【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/黑马旅游/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码-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 评估表达式:ALT+F8

2.3.7 多线程调试 


零、引言

0.1 背景和写作目的

1.为Java工程师提供一整套Java学习路线。

当前市面上Java学习路线林林总总,很难找到一套完整的、并且由自己创作的Java学习路线,本文目的便是提供一套覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等技术的全面方案,帮助Java从业者更快的成长为高级开发,消除信息不对称。

2.遵循开源精神,贡献自身力量。

Java语言拥有一个非常活跃的社区,在笔者的成长过程中,从很多博客和视频中学习到有价值的内容,对我自身提升了很多,所以也希望可以通过写博客帮助到更多人。

3.温故知新,提高技术深度。

做事情要有记录,要有自己的见解,因为人的记忆力有时候是不可靠的,一些东西长时间不看就会记不清晰,有文章可以快速回顾是一件非常好的事情。

0.2 本期更新内容

  1. 剔除冗余文字,内容更加精炼。
  2. 新增知识加油站,内容更加深入浅出。
  3. 优化大纲,调整章节顺序。
  4. 图、文、代码块优化,提高可读性。

一、环境准备

1.1 JDK8

下载

下载jdk8(JDK8就是JDK1.8)

JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命令方式问题。所以JDK8或者JDK1.8也是同一个东西。

下载地址:Java Downloads | Oracle

选择windows64版本exe下载

需要登录才能下载:

登录后会自动下载:

2.安装

下一步: 

设置安装路径:

点击下一步,将安装完成。 

3.配置环境变量

此电脑右键-属性

高级系统设置: 

环境变量: 

设置环境变量:

验证

验证是否安装成功:

打开Windows的运行(可用win+R快捷键打开),输入cmd

验证Java版本:

java -version

验证Java编译命令是否可用:

javac

​​​​

知识加油站

JDK、JRE、JVM、Java的区别

简而言之,JVM是Java虚拟机,JRE是Java运行环境,JDK是个Java开发的工具包,Java是门编程语言。 

  • JVM(Java Virtual Machine):是Java虚拟机,是Java程序运行的基础,它将Java程序编译后的字节码解释执行,并将其转换为机器码运行。
  • JRE(Java Runtime Environment):是Java运行环境,包括了JVM以及Java程序运行所需的类库等。
  • JDK:Java开发工具包,包括了JRE以及用于Java开发的工具,如编译器(javac)、调试器(jdb)、打包工具(jar)等。
Java8新特性

这里仅简单介绍,具体下面章节会详细介绍。

Java8新特性:

  • Lambda表达式:Lambda表达式可以被视为一个对象,必须有上下文环境,作用是实现单方法的接口。该特性可以将功能视为方法参数,或者将代码视为数据。上下文环境意思是能证明它是对象,例如让它处在方法或类的实参里,或者赋值给对象引用。
    • 省略情况:形参类型、返回类型可以省略,单参数能省略小括号,单语句能省略return、分号和大括号(全省略或全不省略)
  • 方法引用:引用已存在的Lambda表达式,达到相同的效果。引用已有Java类或对象(实例)的静态方法、实例方法、对象方法(System.out::println;)、构造器方法。可以与Lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  • 接口默认方法:允许在接口中定义默认方法,默认方法必须使用default修饰。默认方法是接口中有方法体的方法,用于向已有的接口添加新的功能,而无需破坏现有的实现。实现类可以直接调用默认方法,也可以重写默认方法。
  • Stream API:新添加的Stream API(java.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之前采用分段锁,锁粒度是分段segment,JDK1.8采用synchronized+CAS,锁粒度是槽(头节点)
  • 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,回车,可以快速在当前目录打开命令行:

方法二:win+R快捷键,输入cmd,回车,然后用cd命令到达指定目录:

2.javac指令和java指令是什么?

在Java中,javacjava是两个关键的命令行工具,用于编译和运行Java程序。

javac:

javac是Java编译器的命令。它用于将Java源代码文件(以.java为扩展名)编译成字节码文件(以.class为扩展名)。

语法:

javac <options> <source files>

例如,要编译一个名为

MyProgram.java

的Java源文件,可以使用以下命令:

javac MyProgram.java

javac的常见选项:

  • javac -d <directory>:指定生成的类文件存放的目录。
  • javac -cp 或 -classpath:指定查找用户类文件和注释处理程序的位置。
  • javac -source:指定要使用的源代码版本。
  • javac -target:生成的类文件的目标字节码版本。

java:

java是Java虚拟机(JVM)的命令。它用于运行已经编译好的Java程序。

语法:

java <options> <class file>

例如,如果你有一个名为

MyProgram.class

的已编译Java程序,可以使用以下命令来运行它:

java MyProgram

java的常见选项:

  • 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 a=123;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常用快捷键

格式化:ctrl+alt+L

main方法psvm回车,输出sout回车,内容提示ctrl+alt+space。alt+insert生成构造、setget方法。

补全代码:Ctrl+Alt+v或.var或.for

例如写new Dog();按快捷键会自动补全声明Dog dog=new Dog();或者写new Dog().var回车会自动补全成Dog dog=new Dog();或者写lists.for回车会自动生成for(List<String> list:lists){}

万能快捷键:alt+enter

获取警告、报错提示自动改正。

查找:ctrl+f

替换:ctrl+r

替换所有与选中内容相同的文本

ctrl+b:跟进

或者ctrl+鼠标左键、或者鼠标左键,跟进到该类的定义页面。如果选中的是标识符,可以查找页面内所有该标识符位置。

alt+左键:整列编辑

ctrl+d:复制光标行并粘贴

ctrl+x:删除光标行

Ctrl+h:查看该类继承关系:

ctrl+alt+m:抽取选中代码为方法

​​

 Ctrl+f12:查看类中所有方法。

​​

评估表达式:ALT+F8

2.3 断点调试 

2.3.1 断点

  • 调试按钮:
  • 运行按钮:

普通断点:如果断点打在普通代码行上,点击“debug”会自动运行到该行暂停;

方法断点:如果断点打在方法上,点击“debug”会自动运行到该方法入口处暂停;

接口断点:如果断点打在接口方法,点击“debug”会自动运行到实现类对应方法入口处暂停;

字段断点:如果断点打在字段上,点击“debug”会自动运行到修改此字段的代码行处暂停(可以在断点处右键设置成访问时也暂停);

条件断点:在断点处右键,可以输入布尔类型的条件,例如i==0、user.getName()!=null&&"zhangsan".equals(user.getName())。

示例:当i为10时暂停代码运行:

debug可以看到变量信息:

异常断点:在异常时暂停代码运行。在断点处右键-更多,设置断点为异常断点,程序将在发生异常时暂停。

2.3.2 调试 

打断点后代码运行到这一步会停止:下面红色方框是最常用的两个调试按钮:

​​

蓝色代码行代表此时调试运行到这一行(这一行还没运行),能看到上一行的结果。

调试的五个核心图标分别是:

​​

  1. “Step over”:步过。往下运行一行代码并跳过当前方法的调用。
  2. “Step into”:步入。进入方法内部并继续逐行执行。适用于自定义方法或第三方方法,但无法进入JDK方法的内部。注意如果蓝色光标行不是方法,则此按钮相当于step over。
  3. “Force step into”:强制步入(不常用)。强制进入方法的内部,即使常规的"Step into"操作无法进入方法内部时也可以使用。适用于无法通过常规方式进入的方法。例如Symtem.out.println()等JDK方法内部。
  4. “Step out”:步出。退出当前方法,即执行完当前方法后返回到调用该方法的位置。注意如果本方法是main方法,则将直接步出这个main方法
  5. “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 评估表达式:ALT+F8

在if处打断点,debug后点击“evaluate expression”,可以在评估框下测试另一个分支:

​​

2.3.7 多线程调试 

多线程环境,打断点并右键设置Thread或All:

  • Thread:暂停进入断点的线程,不影响其他线程执行。所有线程依次debug(即你如果给多个线程都加断点,第一个线程debug期间其他线程将保持断点暂停状态)
  • ALL:暂停全部线程。只debug第一个暂停线程(即你如果给多个线程都加断点,那么只第一个断点对应的线程会正常debug,其他线程会并发运行)

​​

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

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

相关文章

Unity_ET框架项目-斗地主_启动运行流程

unity_ET框架项目-斗地主_启动运行流程 项目源码地址&#xff1a; Viagi/LandlordsCore: ET斗地主Demohttps://github.com/Viagi/LandlordsCore下载项目到本地。 启动运行步骤&#xff1a; 下载目录如下&#xff1a; 1. VS&#xff08;我用是2022版VisualStudio&#xff09…

快速上手linux | 一文秒懂Linux各种常用目录命令(上)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一 、命令提示符和命令的基本格式1.1 如何查看主机名称及修改 二、命令基本格式2.1 命令格式示例2.2 参数的作用…

C# WebSocket简单使用

文章目录 前言Fleck调试工具初始化简单使用 前言 最近接到了一个需求&#xff0c;需要网页实现上位机的功能。那就对数据传输的实时性要求很高。那就只能用WebSocket了。这里简单说一下我的WebSocket如何搭建 Fleck C# WebSocket(Fleck) 客户端:html Winfrom Fleck Github官网…

Kafka集成springboot

安装kafka&#xff0c;直接到官网下载bin文件&#xff0c;本文使用windows进行使用kafka。 下载之后&#xff0c;第一步&#xff0c;启动zookeeper&#xff1a; zookeeper-server-start.bat ..\..\config\zookeeper.properties 第二步&#xff0c;启动kafka&#xff1a; kafka…

对比SPI、UART、I2C通信的区别与应用

SPI、UART、I2C通信是常用的数字通信协议&#xff0c;它们在不同的场景下有不同的应用。下面&#xff0c;我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议&#xff0c;它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…

你都那么老了,还在每天写博客吗?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 白色便民网&#xff1a;我想多开一个公司会不会被税局查? 事件背景&#xff1a; 松松已创业9年&#xff0c;自媒体14年&#xff0c;经历过从0开公司、项目失败、赚钱等各种高光时刻。所以对于小微企业经营还是…

程序中关于时间和比较运算符的单词

时间 在日志中&#xff0c;我们经常碰到关于一些时间的单词缩写 比如这个Fri Dec 1 就代表了Friday &#xff08;星期五&#xff09;&#xff0c; December &#xff08;十二月&#xff09; 12月1日星期五 或者使用date查看时间的时候 dateWed Dec 13 05:55:54 PM CST 2023这…

OfficeWeb365 SaveDraw 文件上传漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Sav…

Win10 安装.NET Framework 3.5 报错0x80240438

环境&#xff1a; Win10专业版 NET Framework 3.5 问题描述&#xff1a; Win10 安装.NET Framework 3.5 报错0x80240438 解决方案&#xff1a; 1.检查自动更新服务是否未开启&#xff0c;开启自动更新失败&#xff0c;用工具开启自动更新,重启电脑&#xff08;未解决&am…

Proxmox创建Windows虚拟机

文章目录 下载ISO安装文件上传 下载ISO安装文件 下载地址&#xff1a;https://www.xitongzhijia.net/ 也可去官网进行下载 上传 将下载的ISO文件上传到Proxmox 选择ISO文件进行上传 上传后再ISO镜像中可以看到安装文件 点击创建虚拟机 填写名称&#xff0c;不能填写中文 镜…

团建策划信息展示服务预约小程序效果如何

团建是中大型企业商家每年举办的员工活动&#xff0c;其形式多样化、具备全部参与的娱乐性。但在实际策划流程及内容时&#xff0c;部分公司便会难以入手&#xff0c;术业有专攻&#xff0c;这个时候团建策划公司便会发挥效果。 如拓展训练、露营、运动会、体育竞技等往往更具…

[Linux] 基于LAMP架构安装论坛

一、安装Discuz论坛 1.1 创建数据库&#xff0c;并进行授权 mysql -u root -p123CREATE DATABASE bbs; #创建一个数据库GRANT all ON bbs.* TO bbsuser% IDENTIFIED BY admin123; #把bbs数据库里面所有表的权限授予给bbsuser,并设置密码admin123flush privileges; #刷新数据库…

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump

docker基本管理和相关概念

docker是什么&#xff1f; docker是开源的应用容器引擎。基于go语言开发的。运行在Linux系统当中开源轻量级的“虚拟机”。 docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的&#xff0c;可移植的&#xff0c;自给自足的容器。 docker的宿主机是Linux系统…

天池SQL训练营(四)-集合运算-表的加减法和join等

-天池龙珠计划SQL训练营 4.1表的加减法 4.1.1 什么是集合运算 集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。 在标准 SQL 中, 分别对检索结果使用 U…

Spring Cloud gateway - CircuitBreaker GatewayFilte

前面学习Spring cloud gateway的时候&#xff0c;做测试的过程中我们发现&#xff0c;Spring Cloud Gateway不需要做多少配置就可以使用Spring Cloud LoadBalance的功能&#xff0c;比如&#xff1a; spring:application:name: spring-gatewaycloud:gateway:routes:- id: path…

Python 自动化之修理PDF文件(二)

PDF文件_合并与拆分PDF文档Pro版本 文章目录 PDF文件_合并与拆分PDF文档Pro版本前言一、要做成什么样子二、主要用到的函数三、基本思路1.引入库2.创建用户输入模块3.确定主框架 四、文档合并代码模块1.用户输入和函数调用2.引导用户输入文档信息3.合并文档内容4.命名新文档生成…

玩转大数据13: 数据伦理与合规性探讨

1. 引言 随着科技的飞速发展&#xff0c;数据已经成为了现代社会的宝贵资产。然而&#xff0c;数据的收集、处理和利用也带来了一系列的伦理和合规性问题。数据伦理和合规性不仅关乎个人隐私和权益的保护&#xff0c;还涉及到企业的商业利益和社会责任。因此&#xff0c;数据…

RocketMQ-源码架构二

梳理一些比较完整&#xff0c;比较复杂的业务线 消息持久化设计 RocketMQ的持久化文件结构 消息持久化也就是将内存中的消息写入到本地磁盘的过程。而磁盘IO操作通常是一个很耗性能&#xff0c;很慢的操作&#xff0c;所以&#xff0c;对消息持久化机制的设计&#xff0c;是…

Ubuntu 22安装PHP环境

参考博客为《练习 0&#xff08;2/2&#xff09;&#xff1a;Ubuntu 环境下安装PHP&#xff08;PHP-FPM&#xff09;》和《原生态Ubuntu部署LAMP环境 PHP8.1MySQLApache》 sudo apt-get install -y php7.4想要安装php7.4&#xff0c;发现安装的是php8.1。 完成如下图&#xf…