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 动态代理思想

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

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

相关文章

C语言scanf_s函数的使用

因为scanf函数存在缓冲区溢出的可能性;提供了scanf_s函数;增加一个参数; scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符; 下图代码; 读取整型数可以不指定长度;读取char&#xf…

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

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

『 Linux 』使用fork函数创建进程与进程状态的查看

文章目录 🖥️ 前言 🖥️🖥️ 通过系统调用获取进程标识符 🖥️💻 进程标识符PID💻 父进程标识符PPID 🖥️ 通过系统调用创建子进程 fork() 🖥️💻 那么为什么在fork()函…

华为ac+fit漫游配置案例

Ap漫游配置: 其它配置上面一样,ap管理dhcp和业务dhcp全在汇聚交换机 R1: interface GigabitEthernet0/0/0 ip address 11.1.1.1 255.255.255.0 ip route-static 12.2.2.0 255.255.255.0 11.1.1.2 ip route-static 192.168.0.0 255.255.0.0 11.1.1.2 lsw1: vlan batch 100 200…

dvwa 代码注入impossible代码审计

dvwa 代码注入impossible代码审计 <?phpif( isset( $_POST[ Submit ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php ); // 检查token值是否正确// Get input$target $_REQUEST[ ip ]; $target stripslas…

Servlet执行流程Servlet 生命周期

Servlet 生命周期 对象的生命周期指一个对象从被创建到被销毁的整个过程 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; WebServlet(urlPatterns "/demo",loadOnStartup 10) public class ServletDemo imple…

智能座舱架构与芯片- (5) 硬件篇 下

四、短距无线连接 随着汽车智能化的发展与新型电子电气架构的演进&#xff0c;传统车内有线通信技术存在着诸多痛点&#xff1a; 线束长度增加&#xff1a;由于智能化与自动化的发展&#xff0c;车内传感器和执行器均大幅增加。采用有线技术连接&#xff0c;则线束长度&#…

【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )

文章目录 一、类模板 - 函数声明与函数实现分离1、类模板 外部 实现 构造函数2、类模板 外部 实现 普通函数3、类模板 外部 实现 友元函数( 1 ) 错误示例及分析 - 类模板 的 外部友元函数 二次编译 问题( 2 ) 正确写法 二、代码示例 - 函数声明与函数实现分离1、代码示例2、执行…

【运维】永久关闭selinux不当,导致无法启动

现象: 卡centos loading进度条 按esc键发现,启动报错: Failed to load SElinux policy ,freezing 可能的原因: selinuxdisabled 写错成disable 或者 错误的把selinuxtype改了&#xff0c;要改文中红框的部分。 解决方案: 1. 重启 2. 出现选择画面的时候 按e 3. 方向下键…

树莓派的的串口通信协议

首先&#xff0c;回顾一下串口的核心知识点&#xff0c;也是面试重点&#xff1a; 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式&#xff1a;1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…

时序预测 | Pytorch实现TCN-Transformer的时间序列预测

时序预测 | Pytorch实现TCN-Transformer的时间序列预测 目录 时序预测 | Pytorch实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测&#xff0c;可以用于做光伏发电功率预测&#xff0c;风速预测&#xff0…

【libGDX】使用Mesh绘制三角形

1 Mesh 和 ShaderProgram 简介 1.1 创建 Mesh 1&#xff09;Mesh 的构造方法 public Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttribute... attributes) public Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttributes attribut…

使用VSCode+PlatformIO搭建ESP32开发环境

Arduino IDE本来就是为创客们开发的&#xff0c;虽然没代码提示功能&#xff0c;文件的关系也不清晰&#xff0c;函数不能跳转&#xff0c;头文件也打不开&#xff0c;但人家的初衷就是为了简单而生的&#xff1b;但还是有一些同学喜欢高级点的IDE&#xff0c;也没问题&#xf…

局域网无法上网主机通过TinyProxy代理主机访问公网Internet

1.代理主机搭建: 系统:ubuntu 网卡:2个 运行于 VMWare上 第一个网卡用于NAT 第二个网卡用于私有网络 两个IP如下: 192.168.31.243为NAT可访问Internet 192.168.144.141属于私有网络,用于访问局域网 安装tinyproxy sudo apt install tinyproxy 查看服务状态

场景驱动的 AI 体验设计:如何让智能 IDE 赋能遗留系统重写

作为 AutoDev 的核心开发&#xff0c;我们不仅在不断丰富 AutoDev 的功能以满足不同公司的定制需求&#xff0c;还在与各种团队进行持续交流。在处理遗留系统时&#xff0c;我们发现程序员们日常工作中需要面对大量使用过时技术、基础设施混乱的系统。 在这个背景下&#xff0c…

智能座舱架构与芯片- (6) 显示篇 上

一、概述 在智能座舱的发展历程中&#xff0c;显示屏的个数越来越多&#xff0c;分辨率和显示屏的尺寸也越来越大。这已经是不可逆转的趋势。传统的座舱显示屏需要一颗主芯片支持一块屏幕&#xff0c;这在功能上和成本上都不是很好的做法。最新的智能座舱解决方案中&#xff0…

阿里 OSS鉴权访问文件

如果OSS文件设置保护&#xff0c;需要鉴权才能访问&#xff0c;添加请求头鉴权&#xff0c;SDK方法如上&#xff1b; 将鉴权信息和地址、时间返回给前端&#xff0c;前端直接从oss上读取 String filePath "/admin/2023/6/183569314928918546.png"; RequestMessage…

【python笔记】客户运营 - cohort分析

一、数据 本文涉及数据下载链接。 二、数据预处理 2.1 读取数据 import pandas as pddf pd.read_csv(your_path/Year 2010-2011.csv, encodingISO-8859-1) df.head()2.2 检查数据 检查空值情况 df.isna().sum() # 结果 Invoice 0 StockCode 0 De…

基于SpringBoot+MyBatis-Plus的校园图书管理系统

基于SpringBootMyBatis-Plus的校园图书管理系统 校园图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 校园图书管理系统 欢迎访问此博客&#xff0c;是否为自己的毕业设计而担忧呢&#xff1f;是否感觉自己的时间不够做毕业设计呢&#xff1f;那你不妨看一下…

python趣味编程-5分钟实现一个简单弹跳球游戏(含源码、步骤讲解)

简单的Python弹跳球程序是使用Python编程语言开发的。 Python 中的弹跳球游戏是 使用 Tkinter 和图形用户界面 (GUI) 设计的,它是一个桌面应用程序。 Python 中的弹跳球游戏代码使用Canvas 在 Python 中绘制对象和随机模块。