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

news2024/11/15 13:55:59

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.coloradmin.cn/o/1236080.html

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

相关文章

【Java】异常处理及其语法、抛出异常、自定义异常(完结)

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:道阻且长,行则将至 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 一.🔐异…

idea Maven Helper插件使用方法

idea Maven Helper插件使用方法 文章目录 idea Maven Helper插件使用方法📆1.安装mavenhelper🖥️2.使用教程📌3.解决冲突📇4.列表展示依赖🧣5.tree展示依赖🖥️6.搜索依赖🖊️7.最后总结 &…

css鼠标横向滚动并且不展示滚动条几种方法

需求&#xff1a;实现内容超出之后使用属性滚轮进行左右查看超出内容&#xff0c;并且隐藏滚动条 1.不使用框架实现 每次滚动就滚动40px的距离 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&quo…

【学习记录】从0开始的Linux学习之旅——编译linux内核

一、学习背景 从接触嵌入式至今&#xff0c;除了安装过双系统接触了一丢丢linux外&#xff0c;linux在我眼中向来是个传说。而如今得到了一块树莓派&#xff0c;于是决心把linux搞起来。 二、概念学习 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应…

gitBash中如何使用Linux中的tree命令

文章目录 在gitBash中安装tree的目的如何安装安装完成,就可以直接完美适配Linux系统了在gitBash中安装tree的目的 如下图,powershell虽然可以看做是window下的Linux系统,但是根本就不适配很多Linux中的命令 如何安装 tree.exe安装网址 下载 tree 命令的 二进制包,安装 tr…

Python数据分析实战-爬取以某个关键词搜索的最新的500条新闻的标题和链接(附源码和实现效果)

实现功能 通过百度引擎&#xff0c;爬取以“开源之夏”为搜索关键词最新的500条新闻的标题和链接 实现代码 1.安装所需的库&#xff1a;你需要安装requests和beautifulsoup4库。可以使用以下命令通过pip安装&#xff1a; pip install requests beautifulsoup42.发起搜索请求…

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny&#xff0c;当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较&#xff0c;今天重点说一下用PyCharm玩转ESP32&#xff0c;在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…

微信小程序 prettier 格式化

一、安装prettier插件 二、打开设置 然后再打开setting.json 新增代码 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml", "**/*.wx…

竞赛选题 身份证识别系统 - 图像识别 深度学习

文章目录 0 前言1 实现方法1.1 原理1.1.1 字符定位1.1.2 字符识别1.1.3 深度学习算法介绍1.1.4 模型选择 2 算法流程3 部分关键代码 4 效果展示5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计 图像识别 深度学习 身份证识别…

竞赛选题 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

数据中台之用户画像

用户画像应用领域较为广泛,适合于各个产品周期,从新用户的引流到潜在用户的挖掘、 从老用户 的培养到流失用户的回流等。通过挖掘用户兴趣、偏好、人口统计特征,可以 直接 作用于提升营销精准 度、推荐匹配度,最终提升产品服务和企业利润。还包括广告投放、产品布局和行业报…

分片并不意味着分布式

Sharding&#xff08;分片&#xff09;是一种将数据和负载分布到多个独立的数据库实例的技术。这种方法通过将原始数据集分割为分片来利用水平可扩展性&#xff0c;然后将这些分片分布到多个数据库实例中。 1*yg3PV8O2RO4YegyiYeiItA.png 但是&#xff0c;尽管"分布"…

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

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

idea中的sout、psvm快捷键输入,不要太好用了

目录 一、操作环境 二、psvm、sout 操作介绍 2.1 psvm&#xff0c;快捷生成main方法 2.2 sout&#xff0c;快捷生成打印方法 三、探索 psvm、sout 底层逻辑 一、操作环境 语言&#xff1a;Java 工具&#xff1a; 二、psvm、sout 操作介绍 2.1 psvm&#xff0c;快捷生成m…

pytorch中gather函数的理解

pytorch函数gather理解 torch.gather(input, dim, index, outNone) → Tensor Parameters: input (Tensor) – 源张量dim (int) – 索引的轴index (LongTensor) – 聚合元素的下标(index需要是torch.longTensor类型)out (Tensor, optional) – 目标张量 公式含义 这个函数的…

STM32 寄存器配置笔记——系统时钟配置 HSE as PLL

一、概述 本文主要介绍使用HSE高速外部时钟通过PLL倍频输出72MHZ的时钟作为系统时钟。下图为时钟树。 使用正点原子的开发板调试OSC_IN、OSC_OUT接的是8MHZ的晶振即为HSE时钟。 二、配置流程 1&#xff09;复位RCC相关的所有寄存器 复位内容是参考正点原子例程&#xff0c;按照…

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍&#xff1b; 1. 低成本&#xff1a;用户通过手机APP下单&#xff0c;省去了中介费用&#xff0c;降低了雇主的雇佣成本。 2. 高收入&#xff1a;家政服务人员通过手机APP接单&#xff0c;省去了中介费用&#xff0c;从而提高了服务人员的…

2023.11.20使用flask做一个简单图片浏览器

2023.11.20使用flask做一个简单图片浏览器 功能&#xff1a; &#xff08;1&#xff09;输入指定路径&#xff0c;打开文件夹 &#xff08;2&#xff09;判断文件格式为图片 &#xff08;3&#xff09;在前端进行预览 &#xff08;4&#xff09;使用bootstrap进行简单美化 ma…

Android Studio 引入Xui框架-简单应用

Android Studio Flamingo | 2022.2.1 Patch 2 Android 11开发、Gradle Version 8.0、 jdk17 源代码&#xff1a;GitHub - xuexiangjys/XUI: &#x1f48d;A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架&#xff…

Centos8部署LNMP架构

LNMP架构 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也可以指MariaDB&#xff0c;P一般指PHP&#xff0c;也可以指Perl或Python。 1.Linux是一类Unix计算机操作系统的统称…