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,其他线程会并发运行)

​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOLIDWORKS CSWE认证考试报名

​ SOLIDWORKS CSWE是高级别的SOLIDWORKS认证&#xff0c;是一项充满挑战性的艰巨任务。CSWE测试不是简单注册就可以的&#xff0c;是要有一定资格才能参加考试&#xff0c;您首先需要获得CSWP证书&#xff0c;然后还得通过5个CSWPA系列主题考试中的至少4个主题&#xff08;钣金…

七天搞定软件测试,这一篇教程就够了,学完最少能拿13k

前言 在软件开发的世界中&#xff0c;软件测试是不可或缺的一部分。它是确保软件质量、功能完整性和用户满意度的关键环节。本文小编将为大家介绍各类软件测试的奥秘&#xff0c;并提供入门级的指导和见解。 本文内容概要&#xff1a; 软件测试是什么&#xff1f;黑盒测试vs…

2023-12-13 VsCode + CMake + Qt环境搭建

点击 <C 语言编程核心突破> 快速C语言入门 VsCode CMake Qt环境搭建 前言一、前期准备二、具体设置总结 前言 要解决问题: 最近研究 Qt, 使用 qtcreator, 发现在搭建 UI 界面时候很方便, 但到编码和调试就比较有问题了. 想到的思路: 用 VSCode 进行编码及调试. 其它…

基于SSM实现的精品课程网站

一、系统架构 前端&#xff1a;jsp | js | css | jquery | bootstrap 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. 登录页 02. web端-首页 03. web端-视频教程 04. web端-资料…

Flutter在Android Studio上创建项目与构建模式

一、安装插件 1、前提条件&#xff0c;安装配置好Android Studio环境 2、安装Flutter和Dart插件 Linux或者Windows平台&#xff1a; 1&#xff09;、打开File > Settings。 2&#xff09;、在左侧列表中&#xff0c;选择"Plugins"右侧上方面板选中 "Market…

Redis - 做缓存时高并发问题:缓存穿透、击穿、雪崩,数据库缓存双写不一致

缓存穿透 当用户访问的数据既不在缓存也不在数据库中时&#xff0c;就会导致每个用户查询都会“穿透” 缓存“直抵”数据库。这种情况就称为缓存穿透。当高度发的访问请求到达时&#xff0c;缓存穿透不 仅增加了响应时间&#xff0c;而且还会引发对 DBMS 的高并发查询&…

Python + Appium 自动化操作微信入门看这一篇就够了!

简介 Appium 是一个开源的自动化测试工具&#xff0c;支持 Android、iOS 平台上的原生应用&#xff0c;支持 Java、Python、PHP 等多种语言。 Appium 封装了 Selenium&#xff0c;能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及额外的移动设备相关的控制命令&#x…

K8S(五)—命名空间与资源配额

目录 命名空间(Namespace)命令计算资源配额创建命名空间绑定一个ResourceQuota资源将命名空间和资源限制对象进行绑定尝试创建第二个 Pod查看ResourceQuota 绑定第二个ResourceQuota为命名空间配置默认的 CPU 、memory请求和限制&#xff08;1&#xff09;Pod 中所有容器都没有…

【C++进阶篇】二叉搜索数

目录 前言&#xff1a; 以后我们要学map&#xff0c;set&#xff0c;AVL&#xff0c;红黑数所以必须要有二叉搜索数做铺垫 1、二叉搜索树概念 2.二叉搜索树操作 1.二叉搜索树的查找 a、从根开始比较&#xff0c;查找&#xff0c;比根大则往右边走查找&#xff0c;比根小则…

感知机(perceptron)

一、感知机 1、相关概念介绍 感知机&#xff08;perceptron&#xff09;是二分类的线性分类模型&#xff0c;属于监督学习算法。输入为实例的特征向量&#xff0c;输出为实例的类别&#xff08;取1和-1&#xff09;。 2、&#xff08;单层&#xff09;感知机存在的问题 感知机…

上课犯困怎么办

我们小时候都有过这样的经历&#xff1a;在课堂上&#xff0c;突然感到困倦&#xff0c;无法集中精力听讲。这不仅影响了学习效果&#xff0c;还可能错过重要的知识点。那么&#xff0c;上课犯困怎么办呢&#xff1f;下面就给大家提供几点建议。 保证充足的睡眠 保证充足的睡眠…

节流防抖:提升前端性能的秘密武器(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【音视频 | H.264】H.264编码详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

VMware安装ContOS 7 提示“客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”

目录 实验环境报错截图报错原因猜测&#xff08;根据实验现象&#xff09;解决办法如下 实验环境 Vmware Workstation 17.5 CentOS7 镜像版本&#xff1a;2207-02版本 注意&#xff1a;2009版本并无该错误 报错截图 报错原因猜测&#xff08;根据实验现象&#xff09; CentO…

MIT6.824-Raft笔记6:不一致log处理、日志快照

本部分主要是关于不一致的日志是怎么决策和取舍的。同时对于日志的恢复&#xff0c;通过快照的方式提高恢复的效率。 1. 不一致log的处理 在我们分析之前&#xff0c;我们需要明白这个场景是否真的存在&#xff0c;因为有些场景不可能存在我们也就没必要考虑它。即需要思考这种…

使用PM2,在生产环境稳定运行你的node项目

PM2 一个 node&#xff0c;本身就用几行代码&#xff0c;就可以启动个 server 进程&#xff0c;监听个端口&#xff0c;为大家提供 Web 服务 一、依赖安装 npm install pm2 -g 二、命令行启动 普通执行启动 pm2 start <js 文件路径 >.js 携带参数启动 pm2 start < 某种…

k8s debug 浅谈

一 k8s debug 浅谈 说明&#xff1a; 本文只是基于对kubectl debug浅显认识总结的知识点,后续实际使用再补充案例 Kubernetes 官方出品调试工具上手指南(无需安装&#xff0c;开箱即用) debug-application 简化 Pod 故障诊断: kubectl-debug 介绍 1.18 版本之前需要自己…

什么是主动学习(Active Learning)?定义,原理,以及主要方法

数据是训练任何机器学习模型的关键。但是&#xff0c;对于研究人工智能的企业和团队而言&#xff0c;数据仍是实现成功的最大障碍之一。首先&#xff0c;您需要大量数据来创建高性能模型。更重要的是&#xff0c;您需要标注准确的数据。虽然许多团队一开始都是手动标注数据集&a…

使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙 | 京东云技术团队

纯血鸿蒙即将到来 在今年 8 月的「2023年华为开发者大会&#xff08;HDC.Together&#xff09;」上&#xff0c;华为正式官宣「鸿蒙Next」&#xff0c;这个更新的版本将移除所有的 AOSP 代码&#xff0c;彻底与 Android 切割&#xff0c;使其成为一个完全自主研发的操作系统&a…

JAVA实体类集合该如何去重?

JAVA实体类集合该如何去重&#xff1f; 最近在工作中经常遇到需要去重的需求&#xff0c;所以特意系统的来梳理一下 有目录&#xff0c;不迷路 JAVA实体类集合该如何去重&#xff1f;单元素去重方法一&#xff1a;利用Set去重方法二&#xff1a;利用java 8的stream写法&#xf…