Java 全面指南:从入门到精通

目录

1. 引言

Java 的背景

Java 的起源及历史发展

主要的应用场景

Java 的核心特性

面向对象

跨平台性(JVM 的角色)

自动内存管理与垃圾回收机制

Java 版本与发展历程

Java SE 8, 11, 17 等主要版本特性

新增功能概述(如 Lambda 表达式、模块系统)

2. Java 基础语法

变量与数据类型

原始数据类型

引用数据类型

运算符

算术运算符

关系运算符

逻辑运算符

运算符优先级和结合性

控制结构

条件语句

循环结构

条件语句和循环的适用场景

数组

一维数组

多维数组

3. 面向对象编程(OOP)

类与对象

类的定义

对象的创建

封装

访问控制修饰符

getter 和 setter 方法

继承

继承的概念

super 关键字

继承与多态的实现对比

多态

方法重载与重写

多态的应用

接口与抽象类

接口的定义与实现

抽象类

接口与抽象类的区别

4. Java 内置类与库

常用类

String 类

Math 类

常用方法与用途总结

集合框架

List 接口

Set 接口

Map 接口

List、Set、Map 的区别与对比

Java 时间与日期 API

LocalDate, LocalTime, LocalDateTime

DateTimeFormatter

Java 8 时间 API 常用类和方法总结

文件 I/O 操作

File 类

BufferedReader 和 BufferedWriter

I/O 类的对比与应用场景


1. 引言

Java 的背景

Java 的起源及历史发展

Java 于 1995 年由 Sun Microsystems 发布,最初由詹姆斯·高斯林(James Gosling)领导的团队开发。最初的目标是为家用电器和电子设备提供一种可移植的编程语言,但随着互联网的兴起,Java 在网络应用开发中找到了广阔的应用空间。

主要的应用场景
  • Web 开发:借助于 Java Servlets、JavaServer Pages (JSP) 和 JavaServer Faces (JSF) 等技术,Java 在服务器端 Web 开发中占有重要地位。
  • 移动应用:Android 应用程序主要使用 Java 编写,Android SDK 基于 Java 开发。
  • 大数据:Hadoop、Spark 等大数据处理框架大量使用 Java 语言。

Java 的核心特性

面向对象

Java 是一种 纯面向对象 的编程语言,支持封装、继承、多态和抽象等面向对象的基本特性。所有的代码都必须写在类中,即使是基本类型也有对应的包装类。

跨平台性(JVM 的角色)

Java 的口号是 "Write Once, Run Anywhere"(一次编写,到处运行)。这得益于 Java 虚拟机(JVM),它将 Java 代码编译成与平台无关的字节码,然后由 JVM 解释执行。这使得 Java 程序可以在任何安装了 JVM 的设备上运行。

自动内存管理与垃圾回收机制

Java 提供了自动垃圾回收机制(Garbage Collection),开发者无需手动管理内存分配和释放。这有效地减少了内存泄漏和指针错误等问题,提高了程序的稳定性和安全性。

Java 版本与发展历程

Java SE 8, 11, 17 等主要版本特性
  • Java SE 8
    • 引入了 Lambda 表达式Stream API,大大简化了集合的操作。
    • 增加了 默认方法,接口可以有默认实现。
  • Java SE 11
    • 新的 HttpClient API,替代了原有的 HttpURLConnection。
    • 局部变量类型推断(var)的增强。
  • Java SE 17
    • 引入了 Sealed Classes(密封类),允许更严格地控制继承关系。
    • Pattern Matching(模式匹配)的改进。
新增功能概述(如 Lambda 表达式、模块系统)
  • Lambda 表达式:提供了函数式编程的能力,使代码更加简洁。
  • 模块系统:从 Java 9 开始,引入了模块化系统(Project Jigsaw),支持更好的封装和依赖管理。

2. Java 基础语法

变量与数据类型

原始数据类型

Java 有八种原始数据类型,每种类型都有固定的内存大小和默认值。

数据类型内存大小默认值范围
byte1 字节0-128 到 127
short2 字节0-32,768 到 32,767
int4 字节0-2^31 到 2^31 -1
long8 字节0L-2^63 到 2^63 -1
float4 字节0.0f约 ±3.40282347E+38F (~7 位)
double8 字节0.0d约 ±1.79769313486231570E+308
boolean1 位falsetrue 或 false
char2 字节'\u0000'0 到 65,535

示例:变量声明和初始化

int age = 25;
double price = 19.99;
char grade = 'A';
boolean isMember = true;
引用数据类型
  • :用户定义的类型,包括属性和方法。
  • 接口:定义了类需要实现的方法。
  • 数组:存储同类型元素的集合。
  • 字符串String 类,表示字符序列。

示例:引用类型的使用

String name = "Alice";
int[] numbers = {1, 2, 3, 4, 5};

运算符

算术运算符
  • 加法+
  • 减法-
  • 乘法*
  • 除法/
  • 取模%

示例:

int a = 10;
int b = 3;
int sum = a + b;      // 13
int difference = a - b; // 7
int product = a * b;   // 30
int quotient = a / b;  // 3
int remainder = a % b; // 1
关系运算符
  • 大于>
  • 小于<
  • 等于==
  • 不等于!=
  • 大于等于>=
  • 小于等于<=

示例:

boolean result = (a > b); // true
逻辑运算符
  • 逻辑与&&
  • 逻辑或||
  • 逻辑非!

示例:

boolean isAdult = (age >= 18) && (age < 65);
运算符优先级和结合性
优先级运算符结合性
1()从左到右
2!~从右到左
3*/%从左到右
4+-从左到右
5><>=<=从左到右
6==!=从左到右
7&&从左到右
8`
9=+=-=从右到左

控制结构

条件语句

if-else 语句

if (condition) {// 当条件为真时执行
} else {// 当条件为假时执行
}

switch 语句

switch (variable) {case value1:// 代码块break;case value2:// 代码块break;default:// 默认代码块
}
示例:
int score = 85;
if (score >= 90) {System.out.println("优秀");
} else if (score >= 75) {System.out.println("良好");
} else {System.out.println("及格");
}
循环结构

for 循环

for (int i = 0; i < 10; i++) {// 循环体
}

while 循环

while (condition) {// 循环体
}

do-while 循环

do {// 循环体
} while (condition);

示例:

// 打印 1 到 5
for (int i = 1; i <= 5; i++) {System.out.println(i);
}
条件语句和循环的适用场景
结构适用场景
if-else条件判断,执行不同的代码块
switch多个固定值的比较
for已知循环次数的情况
while循环次数未知,但满足条件时继续循环
do-while至少执行一次循环体,再判断条件

数组

一维数组

声明和初始化

int[] numbers = new int[5];
int[] scores = {90, 85, 70, 95, 80};

遍历数组

for (int i = 0; i < scores.length; i++) {System.out.println(scores[i]);
}
多维数组

声明和初始化

int[][] matrix = new int[3][3];
int[][] data = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};

遍历二维数组

for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {System.out.print(data[i][j] + " ");}System.out.println();
}

3. 面向对象编程(OOP)

类与对象

类的定义
public class Person {// 属性(成员变量)private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 方法(行为)public void introduce() {System.out.println("大家好,我叫 " + name + ",今年 " + age + " 岁。");}
}
对象的创建
Person person = new Person("Alice", 25);
person.introduce();

封装

访问控制修饰符
  • public:对所有类可见。
  • private:仅对本类可见。
  • protected:对本类、子类和同一包内的类可见。
  • 默认(不写):对同一包内的类可见。
getter 和 setter 方法
public class Person {private String name;private int age;// Getter 方法public String getName() {return name;}// Setter 方法public void setName(String name) {this.name = name;}// 同理为 age 添加 getter 和 setter
}

示例:

Person person = new Person();
person.setName("Bob");
System.out.println(person.getName());

继承

继承的概念

子类继承父类的属性和方法,可以重用代码并增加新的功能。

public class Animal {public void eat() {System.out.println("动物在吃东西");}
}public class Dog extends Animal {public void bark() {System.out.println("狗在汪汪叫");}
}
super 关键字

用于调用父类的构造方法或方法。

public class Dog extends Animal {public Dog() {super(); // 调用父类的构造方法}@Overridepublic void eat() {super.eat(); // 调用父类的方法System.out.println("狗在吃骨头");}
}

示例:

Dog dog = new Dog();
dog.eat();   // 输出:动物在吃东西 \n 狗在吃骨头
dog.bark();  // 输出:狗在汪汪叫
继承与多态的实现对比
特性实现方式优点
继承使用 extends 关键字代码重用,建立层次结构
多态方法重写、接口的实现提高代码的灵活性和可扩展性

多态

方法重载与重写
  • 方法重载:同一类中方法名相同,参数列表不同。
  • 方法重写:子类重新定义父类的方法,方法签名相同。

示例:方法重载

public class Calculator {public int add(int a, int b) {return a + b;}public double add(double a, double b) {return a + b;}
}

示例:方法重写

public class Animal {public void makeSound() {System.out.println("动物发出声音");}
}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("猫在喵喵叫");}
}
多态的应用
Animal animal = new Cat();
animal.makeSound(); // 输出:猫在喵喵叫

接口与抽象类

接口的定义与实现

定义接口

public interface Movable {void move();
}

实现接口

public class Car implements Movable {@Overridepublic void move() {System.out.println("汽车在行驶");}
}
抽象类

定义抽象类

public abstract class Shape {public abstract double getArea();
}

继承抽象类

public class Circle extends Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}
}
接口与抽象类的区别
比较项接口抽象类
默认方法Java 8 之后可以有默认方法可以有具体方法
构造方法没有构造方法可以有构造方法
多继承一个类可以实现多个接口一个类只能继承一个抽象类
适用场景定义规范,强调做什么定义模板,强调怎么做

示例:

// 接口实现
public interface Flyable {void fly();
}public class Bird implements Flyable {@Overridepublic void fly() {System.out.println("鸟在飞翔");}
}// 抽象类继承
public abstract class Vehicle {public abstract void run();
}public class Bicycle extends Vehicle {@Overridepublic void run() {System.out.println("自行车在行驶");}
}

4. Java 内置类与库

常用类

String 类

字符串创建

String str = "Hello, World!";

常用方法

  • 长度str.length()
  • 连接str.concat(" Welcome!")
  • 截取str.substring(0, 5)
  • 替换str.replace('l', 'p')

示例:

String greeting = "Hello";
String name = "Alice";
String message = greeting + ", " + name + "!";
System.out.println(message); // 输出:Hello, Alice!
Math 类

常用方法

  • 取整Math.floor(), Math.ceil(), Math.round()
  • 随机数Math.random()
  • 最大/最小值Math.max(a, b), Math.min(a, b)
  • 指数/对数Math.pow(a, b), Math.log(a)

示例:

double randomNumber = Math.random(); // 生成 0.0 到 1.0 之间的随机数
int max = Math.max(10, 20);          // 20
常用方法与用途总结
方法用途
Stringlength()获取字符串长度
StringcharAt(index)获取指定位置的字符
Stringequals(str)比较字符串内容
Mathabs(a)取绝对值
Mathsqrt(a)求平方根

集合框架

Java 集合框架提供了一组用来存储和操作数据的接口和类。

List 接口

ArrayList

  • 动态数组,支持随机访问。
  • 适合读多写少的场景。

LinkedList

  • 双向链表,增删速度快。
  • 适合频繁插入和删除的场景。

示例:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list.get(0)); // 输出:Apple
Set 接口

HashSet

  • 不允许重复元素,无序。
  • 基于哈希表实现。

TreeSet

  • 不允许重复元素,有序。
  • 基于红黑树实现。

示例:

Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // 重复元素,不会添加
System.out.println(set.size()); // 输出:2
Map 接口

HashMap

  • 键值对存储,键不可重复。
  • 无序,线程不安全。

TreeMap

  • 键值对存储,按键排序。
  • 基于红黑树实现。

示例:

Map<String, Integer> map = new HashMap<>();
map.put("Apple", 3);
map.put("Banana", 2);
System.out.println(map.get("Apple")); // 输出:3
List、Set、Map 的区别与对比
接口特点是否允许重复是否有序
List有序集合,按插入顺序允许
Set无序集合,不允许重复元素不允许否(HashSet)
Map键值对存储键不允许重复视实现而定

Java 时间与日期 API

Java 8 引入了新的日期和时间 API,更加易用和安全。

LocalDate, LocalTime, LocalDateTime

获取当前日期和时间

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

指定日期和时间

LocalDate specificDate = LocalDate.of(2021, 12, 31);
LocalTime specificTime = LocalTime.of(23, 59, 59);

日期和时间操作

LocalDate tomorrow = date.plusDays(1);
LocalTime nextHour = time.plusHours(1);
DateTimeFormatter

格式化日期和时间

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
System.out.println(formattedDateTime); // 输出:2021-08-20 14:30:00
Java 8 时间 API 常用类和方法总结
用途
LocalDate表示日期(年、月、日)
LocalTime表示时间(时、分、秒)
LocalDateTime表示日期和时间
DateTimeFormatter格式化日期和时间

文件 I/O 操作

File 类

用于表示文件或目录的信息,但不涉及文件内容的读写。

File file = new File("test.txt");
if (file.exists()) {System.out.println("文件存在");
}
BufferedReader 和 BufferedWriter

用于高效地读写文本文件。

读取文件

try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

写入文件

try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {writer.write("Hello, World!");
} catch (IOException e) {e.printStackTrace();
}
I/O 类的对比与应用场景
用途
FileReader读取字符文件
FileWriter写入字符文件
BufferedReader提高读取效率,支持 readLine()
BufferedWriter提高写入效率
FileInputStream读取字节文件
FileOutputStream写入字节文件

通过以上内容,我们详细介绍了 Java 的基础知识,从基本语法到面向对象编程,再到常用的内置类与库。每个部分都配有示例代码和总结表格,帮助读者更好地理解和掌握 Java 编程的核心概念。

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

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

相关文章

SpringBoot新技能:零停机更新代码

在个人或者企业服务器上&#xff0c;总归有要更新代码的时候&#xff0c;普通的做法必须先终止原来进程&#xff0c;因为新进程和老进程端口是一个&#xff0c;新进程在启动时候&#xff0c;必定会出现端口占用的情况&#xff0c;但是&#xff0c;还有黑科技可以让两个SpringBo…

【机器学习】--- 深度学习中的注意力机制

深度学习中的注意力机制 在深度学习领域&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;已经成为近年来最受瞩目的研究热点之一。它不仅提升了现有模型的性能&#xff0c;更启发了全新的网络结构&#xff0c;如Transformer模型。注意力机制被广泛应用于自…

c语言中的局部跳转以及全局跳转

一、前言 在c语言中&#xff0c;当我们在处理某些异常情况的时候&#xff0c;经常会使用goto语句来进行跳转。goto用起来很方便&#xff0c;但可能很多人都不知道&#xff0c;goto只能在一个函数里面跳转&#xff0c;并不能够跨函数跳转。本文将介绍能够跨函数跳转的接口setjm…

升级VMware

1、vm17pro安装包 VMware Workstation 17 Pro软件下载&#xff1a; 官网下载&#xff1a;Download VMware Workstation Pro 2、点击下一步更改地址 3、注册码 VMware Workstation 17 Pro注册码&#xff1a; 4A4RR-813DK-M81A9-4U35H-06KND 4、打开虚拟机 注&#xff1a; 升…

ip地址数字范围是多少?ip地址四段数字的含义是什么

IP地址&#xff0c;作为互联网上的唯一标识&#xff0c;是由一串数字组成的。这些数字不仅代表了设备的网络位置&#xff0c;还蕴含了丰富的信息。本文将深入探讨IP地址的数字范围以及四段数字的具体含义。 一、IP地址数字范围是多少 IP地址由四段数字组成&#xff0c;每一段数…

JavaEE:文件内容操作(二)

文章目录 文件内容操作读文件(字节流)read介绍read() 使用read(byte[] b) 使用 read(byte[] b, int off, int len) 使用 写文件(字节流)write介绍write(int b) 使用write(byte[] b) 使用write(byte[] b, int off, int len) 使用 读文件(字符流)read() 使用read(char[] cbuf) 使…

基于python+django+vue的鲜花商城系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

如何做系统架构?从动态系统思考的角度

在动态系统思考的背景下&#xff0c;系统架构不再只是一个静态的、结构化的设计&#xff0c;而是一个随着时间推移、基于不同要素互动产生涌现行为的动态过程。系统架构师的任务不仅仅是定义系统的形态和结构&#xff0c;更是通过剖析系统的互动网络、功能涌现和使用场景&#…

UVA1395 Slim Span(最小生成树)

*原题链接*(洛谷) 非常水的一道题。看见让求最小边权差值的生成树&#xff0c;很容易想到kruskal。 一个暴力的想法是以每条边为最小边跑一遍kruskal&#xff0c;然后统计答案。时间复杂度&#xff0c;再看题中很小的数据范围和3s的时限。最后还真就过了。 不过我天真的想了…

三维点云处理(C++)学习记录——PDAL

一、OSGeo4W简概 OSGeo4W是一个基于Windows系统&#xff08;版本7-11&#xff09;的开源地理软件二进制包发布平台。OSGeo4W包括开源GIS桌面应用程序&#xff08;QGIS、GRASS GIS&#xff09;、地理空间库&#xff08;PROJ、GDAL/OGR、GEOS、SpatiaLite、SAGA GIS&#xff09;、…

鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值

鸿蒙开发笔记整理,方便以后查阅! 由于上班较忙,只能抽空闲暇时间,快速整理更新中。。。 登录页面跳转到我的页面、并传值 效果图 我的设置页面 /*** 我的设置页面*/ import CommonConstants from ./CommonConstants import ItemData from ./ItemData import DataModel fr…

面试官问:你为什么对这个职位感兴趣?

当面试官问到你为什么对某个职位感兴趣时&#xff0c;你的回答应该反映出你对该职位的热情&#xff0c;以及你如何能够为公司带来价值。 重点&#xff1a;在面试前一定要去研究下这家公司&#xff0c;包括他们的团队&#xff0c;文化&#xff0c;产品&#xff0c;服务等各个方…

55 mysql 的登录认证流程

前言 这里我们来看一下 mysql 的认证的流程 我们这里仅仅看 我们最常见的一个 认证的处理流程 我们经常会登录的时候 碰到各种异常信息 认证失败的大体流程 大概的流程是这样 客户端和服务器建立连接之后, 服务器向客户端发送 salt 然后 客户端根据 salt 将客户端传入的…

不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff…

运行QWen2-1.5b模型时报错“RuntimeError: cutlassF: no kernel found to launch!”

运行QWen2-1.5b模型时报错“RuntimeError: cutlassF: no kernel found to launch!” #问题&#xff1a;成功加载QWen2-1.5b模型&#xff0c;但是推理时 “model.generate( model_inputs.input_ids, top_pself.top_p, max_new_tokens512 )时”&#xff0c;报错“RuntimeError: …

【吊打面试官系列-Redis面试题】使用过 Redis 做异步队列么,你是怎么用的?

大家好&#xff0c;我是锋哥。今天分享关于【使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f; 一般使用 list 结构作为队列&#xff0c;rpus…

关系数据库(1,2)

目录 关系 域 笛卡尔集 元组 分量 基数 码 关系模式 关系模式的表示方式 关系数据库 基本关系操作 完整性 关系 单一的数据结构&#xff0c;二维表是一个逻辑结构&#xff0c;关系模型建立在集合代数的基础上。 域 指具有相同数据类型的集合。 笛卡尔集 笛卡尔集是…

pytorch快速入门(一)—— 基本工具及平台介绍

前言 该pytorch学习笔记应该配合b站小土堆的《pytorch深度学习快速入门教程》使用 环境配置&#xff1a;Anaconda Python编译器&#xff1a;pycharm、jupyter 两大法宝函数 dir&#xff08;&#xff09;&#xff1a;知道包中有什么东西&#xff08;函数 / 属性..…

YOLOv5:TensorRT模型加速与部署(wts版)

视频链接&#xff1a;YOLOv5&#xff1a;TensorRT模型加速与部署&#xff08;wts版&#xff09;_哔哩哔哩_bilibili 《YOLOv5&#xff1a;TensorRT模型加速与部署&#xff08;wts版&#xff09;》课程致力于帮助学生实战YOLOv5目标检测算法的TensorRT加速部署。常心老师将手把…

只需一键,AI Manga Translator 帮你解锁多国语言漫画

只需一键&#xff0c;AI Manga Translator 帮你解锁多国语言漫画 翻译漫画从未如此简单&#xff0c;AI Manga Translator Chrome 扩展程序让你只需点击几下&#xff0c;就能将生肉漫画翻译成你熟悉的语言。本文将带你了解这款工具的基本功能、使用方法&#xff0c;以及为什么你…