2023 年爆肝将近 20 万字讲解最新 JavaEE 全栈工程师基础教程(更新中)

1. Java 语言基本概述

Java 是一种广泛使用的编程语言,由 James Gosling 在 Sun Microsystems(现在是 Oracle Corporation 的一部分)于 1995 年发表。Java 是一种静态类型的、类基础的、并发性的、面向对象的编程语言。Java 广泛应用于企业级应用、Web 应用、移动应用(Android)、桌面应用、嵌入式系统和大数据等领域。

在这里插入图片描述

1.1 安装 Java JDK 环境

首先确定你需要的 JDK 版本。Oracle 提供了多个版本的 JDK,包括最新的版本和旧版本。常见的选择有Oracle JDK 和 OpenJDK。

访问下载页面:访问 Oracle 官方网站

设置环境变量:为了在命令行中方便地运行 Java 程序,你应该设置 JAVA_HOME 环境变量,指向 JDK 的安装路径,并将 JDK 的 bin 目录添加到 PATH 环境变量。

验证安装测试:在命令行中运行 java -versionjavac -version,来验证安装并检查 JDK 版本。

1.2 Java 开发工具

Java 环境包包含内置开发工具在 bin 目录下面

在这里插入图片描述
Java 内置常用开发工具

开发工具具体文件详细介绍
Java 编译器Javac.exe将- Java 源代码文件(.java)转换成字节码文件 (.class)。
Java 解释器Java.exe用来执行 javac 编译成的字节码。
Java Applet 浏览器appletviewer.exe执行 HTML 文件上的 Java 小程序的 Java 浏览器。
Java 文档生成器javadoc.exe会使用 Java 源文件代码生成一组 HTML 格式的相关文件。
Java 调试器jdb.exe一个除错器,为 java 程序提供一个命令行调试环境,以便于对 java 解释的类进行除错。
Java 反汇编器javap.exe反汇编一个 Java 字节代码文件,返回类的相关成员。

1.3 JDK 和 JRE 区别

JRE 的地位就像一台计算机一样,编写的 Java 程序必须要JRE才能运行。只要安装了 JRE,就可以正确运行 Java 应用程序。而 JDK 是用于开发 Java 程序的工具包,其中包含了 JRE。
在这里插入图片描述

1.4 javac 编译字节码文件

javac 是 Java 编译器命令,用于将 Java 源代码文件编译成字节码文件。编译后,将在同一目录下生成一个以 .class 为后缀的字节码文件,其文件名与源代码文件名相同。这个字节码文件可以在 Java 虚拟机上运行。

javac FileName.java

其中 FileName.java 是要编译的 Java 源代码文件的文件名。请注意,使用 javac 编译 Java 源代码文件需要安装 Java Development Kit(JDK)并配置相应的环境变量。如果未正确配置环境变量,则可能无法在命令行中正确识别 javac 命令。

1.5 Java 基本数据类型

Java 是双类型的系统,也就是基本数据类型和对象数据类型,简称基本类型和对象。 其中 Java 中有 8 个预定义的基本类型。

byte, short, int, long, float, double, boolean, char

基本数据类型内存占用

在这里插入图片描述

1.6 Java Scanner 控制台

在 Java 中 Scanner 类是一个用于获取用户输入的类。它通常用于读取键盘输入操作,从控制台窗口的命令行读取输入数据,或者从文件或字符串中读取输入数据。

Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
System.out.println(i);

1.7 Java 查询包顺序

使用其他类的规则

使用同一个包中的类时,不需要导包。
使用java.lang包中的类时,不需要导包。
其他情况都需要导包。
如果同时使用两个包中的同名类,需要用全类名。

2. 常用引用数据类型

2.1 StringBuilder 创建字符串

StringBuilder是Java中的一个类,它用于创建可变字符串。与String类不同,StringBuilder类的对象可以修改。这使得StringBuilder在需要频繁修改字符串时更加高效。

StringBuilder sb = new StringBuilder();  sb.append("Hello").append(" ").append("World!");  
System.out.println(sb.toString());  sb.delete(5, 10);  # 删除从第 5 个位置开始,到第 10 个位置结束的字符  
System.out.println(sb.toString());  sb.replace(2, 5, "Java");  
System.out.println(sb.toString());

2.2 ArrayList 创建集合

我们创建的是 ArrayList 的对象,而 ArrayList 是 java 已经写好的一个类这个类在底层做了一些处理
打印对象不是地址值,而是集合中存储数据内容在展示的时候会拿 [] 把所有的数据进行包裹。

在这里插入图片描述

3. Class 面向对象

Java 是一种完全面向对象的编程语言。这意味着在 Java 中,一切都是对象,这包括我们所编写的类、接口、方法,甚至基本数据类型。这种全盘面向对象的特性使得 Java 非常适合构建复杂、可重用的软件架构。

3.1 OOP 面向对象编程

OOP 是面向对象编程(Object-Oriented Programming)的缩写。它是一种编程范式,将程序看作是一系列对象的集合,这些对象之间通过消息传递进行通信和协作。

在 OOP 中,对象是类的实例,类是对象的蓝图或模板,定义了对象的基本结构和行为。类中的属性定义了对象的状态,而方法则定义了对象的行为。通过封装、继承、多态和抽象等特性,OOP 提供了构建复杂、可维护的软件系统的强大工具。

特性名称详细说明
封装性Encapsulation在面向对象编程中,对象的状态(数据元素)和行为(方法)被捆绑在一起,称为封装。这意味着一个对象的状态不能直接访问,只能通过对象的方法来间接访问。这种封装方式提供了更好的数据隐藏和安全性。
继承性Inheritance继承是面向对象编程的另一个重要特性。它允许我们创建一个新的类(称为子类或派生类),该类继承了另一个类(称为父类或基类)的属性和方法。子类可以重写父类的方法,也可以添加新的方法。这种特性使得代码重用和抽象变得更加容易。
多态性Polymorphism多态是指一个接口或超类可以引用多种实际类型的实例。在运行时,具体引用哪种类型的实例由对象实例决定,而不是由代码决定。这可以提高代码的灵活性和可扩展性。
抽象性Abstraction抽象是指只展现对象行为特性的接口。在 Java 中,我们可以通过抽象类或接口来实现抽象。抽象可以使得程序更加灵活,更容易适应变化。

3.2 Java class 类构造函数

构造方法的作用?

创造对象的时候,由虚拟机自动调用,给成员变量进行初始化的。无参数构造方法初始化的对象时,成员变量的数据均采用默认值。有参数构造方法在初始化对象的时候,同时可以为对象进行赋值。

构造方法有哪些注意事项?

任何类定义出来,默认就自带了无参数构造器,写不写都有。一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。建议在任何时候都手动写上空参和带全部参数的构造方法。

3.3 static 静态变量

在Java中,静态变量(static variable)是类变量的一种,它们属于类本身,而不是类的具体实例。静态变量在类中使用static关键字进行声明。静态变量是随着类的加载而加载的,优先于对象出现的。

静态变量特点

静态变量不依赖于任何对象实例,因此它们在类被加载时就已经分配了内存空间。
静态变量在所有实例中共享,即如果一个实例改变了静态变量的值,那么这个改变会影响所有其他实例。
静态变量可以通过类名直接访问,而不需要创建类的实例。
静态变量在声明时必须进行初始化,否则编译器会报错。

Java 静态成员方法

在Java中,静态成员方法是一种属于类本身的方法,而不是类的实例。你可以通过类名直接访问静态方法,不需要创建类的实例。

注意,静态方法只能直接访问静态成员(变量和方法)。他们不能直接访问非静态成员,因为非静态成员需要类的实例来访问。如果你尝试在静态方法中访问非静态成员,编译器会报错。

3.4 Java vtable 虚方法表

虚方法表(Virtual Method Table,简称vtable)是Java虚拟机(JVM)实现动态派发的重要机制。在Java中,当一个类继承另一个类时,子类会继承父类中的所有非私有方法。然而,在运行时,JVM需要根据实际的对象类型来动态地调用相应的方法。这就是虚方法表发挥作用的地方。

虚方法表是一个表格,其中存储了对象类型所对应的方法的引用。当调用一个对象的方法时,JVM会通过查找该对象的虚方法表来确定要执行的方法。具体来说,JVM会根据对象的实际类型来确定应该查找哪个虚方法表,并在该表中查找对应的方法。

虚方法表的实现机制是Java虚拟机在运行时动态派发的基础。通过使用虚方法表,JVM可以实现动态派发,即在运行时根据实际的对象类型来选择要执行的方法。这种机制可以提高代码的灵活性和可维护性,因为可以根据需要动态地改变对象的行为。

3.5 Java 子类方法重写

方法名、参数列表必须与父类中被重写的方法相同。
返回类型必须与父类中被重写方法的返回类型相同或是其子类型。
访问权限不能比父类中被重写方法的访问权限更低。例如,如果父类的方法是public的,那么子类重写该方法时只能使用public访问权限,不能使用protectedprivate访问权限。
重写方法不能抛出比被重写方法更宽泛的异常类型。如果被重写方法没有声明任何异常,那么重写方法也不能抛出异常;如果被重写方法声明了某些异常,那么重写方法可以不声明这些异常,或者声明相同的异常或其子类异常,但不能声明更宽泛的异常。

3.6 class 继承特性概述

子类能继承父类哪些内容?
在这里插入图片描述

3.7 class 类访问权限

在Java中,有三个关键字可以用来定义类的访问权限,分别是privateprotectedpublic

访问权限详细说明
private如果一个类的成员被声明为private,那么这个成员只能被其本身访问,其他任何类都无法直接访问这个成员。
protected如果一个类的成员被声明为protected,那么这个成员可以被其本身、同一包下的其他类以及其子类访问。
public如果一个类的成员被声明为public,那么这个成员可以被任何其他类访问。

这些访问权限关键字决定了其他类如何访问一个类的成员。通过合理使用这些关键字,可以有效地控制程序的访问权限,保证程序的安全性和稳定性。

3.8 class 多态特性概述

Java 多态(Polymorphism)是面向对象编程的四大基本特性之一,其他三个为封装(Encapsulation)、继承(Inheritance)和抽象(Abstraction)。Java 多态是指父类引用指向子类对象。具体来说,如果一个父类引用变量被用来引用子类对象,那么该变量就可以调用子类中重写(Override)的父类方法,以及继承的父类方法。

Java 多态实现方式

方法重写(Override):子类重写父类中的方法,实现自己的行为。
接口实现(Implement):子类实现一个接口,并重写接口中的方法,实现自己的行为。
类型转换:将父类对象强制转换为子类对象,然后调用子类中的方法。
继承和多态性结合使用:子类继承父类并重写其方法,同时将子类对象赋值给父类引用变量,实现多态性。
public class Main {public static void main(String[] args) {Animal dog = new Dog();System.out.println(dog.name);dog.show();}
}class Animal{public String name = "动物";public void show() {System.out.println("动物 - show");}
}class Dog extends Animal{public String name = "狗狗";public void show() {System.out.println("狗狗 - show");}
}

调用成员变量:编译看左边,运行也看左边。

编译看左边就是 javac 编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。运行也看左边就是 java 运行代码的时候,实际获取的就是左边父类中成员变量的值。

调用成员方法:编译看左边,运行看右边。

编译看左边就是 javac 编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。运行看右边就是 java 运行代码的时候,实际上运行的是子类中的方法。

Polymorphism 多态的弊端是什么?

不能调用子类的特有功能报错的原因是当调用成员方法的时候,编译看左边,运行看右边。那么在编译的时候会先检查左边的父类中有没有这个方法,如果没有直接报错。

4. File 文件读写操作

4.1 Java File 读写文件

try {File file = new File("input.txt");BufferedReader reader = new BufferedReader(new FileReader(file));String line = reader.readLine();while (line != null) {System.out.println(line);line = reader.readLine();}reader.close();
} catch (IOException e) {e.printStackTrace();
}
try {FileWriter writer = new FileWriter("output.txt");writer.write("Hello World!");writer.close();
} catch (IOException e) {e.printStackTrace();
}

5. 常用 API 概述

5.1 Runtime 运行时环境

在这里插入图片描述

6. Java 进阶知识点

6.1 Java 反射机制

在这里插入图片描述
获取 class 对象的 3 种方式(字节码文件对象)

1. class.forName("全类名");
2.类名.class
3.对象.getclass( );

6.2 Java 动态代理思想

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

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

相关文章

【Computer Vision Foundation】全球计算机视觉基金会论文网

计算机视觉基金会(Computer Vision Foundation,简称CVF)是一个致力于推动计算机视觉领域研究和发展的组织。以下是关于计算机视觉基金会的一些基本信息: 成立目的: CVF成立的目的是促进计算机视觉领域的学术研究、技术…

LVS+Keepalived 高可用群集

一、一.Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 • 支持故障自动切换(Failover) • 支持节点健康状态检查(Health Checking) • 官方网站:http://www.keepalived.org/ 二、Keepalived工作原理 • …

子虔科技出席2023WAIC“智能制造融合创新论坛”

7月7日,2023世界人工智能大会(WAIC)闵行会场在大零号湾举办。子虔科技联合创始人周洋作为专家嘉宾受邀参与智能制造融合创新论坛大会。会上探讨了工业和制造业数字化转型的机遇、挑战和对策。其中,周洋提到,工业制造业…

03-基于Feign的远程调用,详解Feign的自定义配置和优化,创建Feign模块

Feign远程调用 Feign替代RestTemplate 利用RestTemplate发起远程调用的代码的缺点 代码可读性差编程体验不统一 , 面对参数复杂的URL难以维护 String url "http://user-service/user/" order.getUserId(); User user restTemplate.getForObject(url, User.cla…

相对定位、绝对定位、固定定位、绝对定位堆叠顺序

相对定位:相对自己本身进行偏移 CSS语法: position: relative;/*相对自己进行定位*/ top: 10px;/*距离上边*/ left: 10px;/*距离左边*/ 演示图: 绝对定位:默认以浏览器进行定位。如果想依照父盒子定位,需要在父盒子…

STM32 寄存器配置笔记——USART配置 打印

一、概述 本文主要介绍如何配置USART,并通过USART打印验证结果。以stm32f10为例,将PA9、PA10复用为USART功能,使用HSE PLL输出72MHZ时钟 APB2 clk不分频提供配置9600波特率。波特率计算公式如下: fck即为APB2 clk参考计算&#xf…

ppt录屏制作微课,轻松打造精品课程

微课作为一种新型的教学方式逐渐受到广大师生的欢迎。微课具有方便快捷、内容丰富、互动性强等特点,可以有效地帮助教师传达知识,提高学生的学习效果。其中,ppt录屏制作微课就是一种常见的方式。本文将介绍ppt录屏的使用方法,帮助…

七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境

前言 SQLite的一个重要的特性是零配置的、无需服务器,这意味着不需要复杂的安装或管理。它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。 七天.NET 8操作SQLite入门到实战…

第十二章 pytorch中使用tensorboard进行可视化(工具)

PyTorch 从 1.2.0 版本开始,正式自带内置的 Tensorboard 支持了,我们可以不再依赖第三方工具来进行可视化。 tensorboard官方教程地址:https://github.com/tensorflow/tensorboard/blob/master/README.md 1、tensorboard 下载 step 1 此次…

解锁电力安全密码:迅软DSE助您保护机密无忧

电力行业信息化水平不断提高,明显提升了电力企业的生产运营能力,然而随着越来越多重要信息存储在终端计算机中,电力面临的信息安全挑战也越来越多。 作为关键基础设施的基础,电力企业各部门产生的资料文档涵盖着大量机密信息&…

1.Qt5.15及其以上的下载

Qt5.15及其以上的下载 简介: ​ Qt是一个跨平台的C库,允许开发人员创建在不同操作系统(如Windows、macOS、Linux/Unix)和设备上具有本地外观和感觉的应用程序。Qt提供了一套工具和库,用于构建图形用户界面&#xff0…

【Linux】 find命令使用

find find命令是一种通过条件匹配在指定目录下查找对应文件或者目录的工具。匹配的条件可以是文件名称、类型、大小、权限属性、时间戳等。find命令还可以配合相关命令对匹配到的文件作出后续处理。 语法 find [路径...] [表达式] [path...]为需要查找文件所指定的路径。如果…

智能座舱架构与芯片- (12) 软件篇 中

三、智能座舱操作系统 3.1 概述 车载智能计算平台自下而上可大致划分为硬件平台、系统软件(硬件抽象层OS内核中间件)、功能软件(库组件中间件)和应用算法软件等四个部分。狭义上的OS特指可直接搭载在硬件上的OS内核;…

【C++进阶之路】第十一篇:C++的IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4.stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。prin…

易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统

易航自主开发了一款极其优雅的易航网址引导页管理系统,后台采用全新的光年 v5 模板开发。该系统完全开源,摒弃了后门风险,可以管理无数个引导页主题。数据管理采用易航原创的JsonDb数据包,无需复杂的安装解压过程即可使用。目前系…

SVN创建分支

一 从本地创建方式可指定版本号进行分支创建。 1、在本地目录右击 -----> 点击branch/tag(分支/标签) From: 源,可指定具体的版本号, To path: 可通过"..."选择分支路径 最后点击确定,交由服务器执行创建。 二 通过SVN客…

html实现计算器源码

文章目录 1.设计来源1.1 主界面1.2 计算效果界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134532725 html实现计算器源码,计算器源码,简易计…

11.21序列检测,状态机比较与代码,按键消抖原理

序列检测 用一个atemp存储之前的所有状态,即之前出现的七位 含无关项检测 要检测011XXX110 对于暂时变量的高位,位数越高就是越早出现的数字,因为新的数字存储在TEMP的最低位 不重叠序列检测 ,一组一组 011100 timescale 1ns…

【算法】二分查找-20231122

这里写目录标题 一、1089. 复写零二、917. 仅仅反转字母三、88. 合并两个有序数组四、283. 移动零 一、1089. 复写零 提示 简单 266 相关企业 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意&a…

智能座舱架构与芯片- (13) 软件篇 下

四、面向服务的智能座舱软件架构 4.1 面向信号的软件架构 随着汽车电子电气架构向中央计算-域控制器的方向演进,甚至向车云一体化的方向迈进,适用于汽车的软件平台也需要进行相应的进化。 在传统的观念中,座舱域即娱乐域,座舱软…