在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述


目录

一、编程语言发展简史

在这里插入图片描述

1.1 机器语言

机器语言是二进制代码表示的指令集合,计算机硬件直接识别和执行。不同型号的计算机使用不同的机器语言,通用性差。

1.2 汇编语言

使用英文助记符(如 ADD、SUB)代替二进制指令,仍依赖于具体硬件,可读性较差。

1.3 高级语言

以人类日常语言为基础,与具体计算机硬件无关。常见的有 Java、C、C++、Python 等。

1.4 第四代语言

非过程化语言,关注“做什么”而非“怎么做”。典型应用为数据库查询语言。

1.5 第五代语言

融合人工智能,支持使用自然语言与计算机交互。


二、Java 概述

2.1 Java 发展历史

  • 1991 年,James Gosling 领导 Sun 公司团队开发面向消费电子产品的语言,最初命名为 Green,后改为 Oak,最终定名为 Java。
  • 1996 年,JDK 1.0 发布。
  • 2004 年,Java SE 5.0 发布(重大更新)。
  • 2014 年,Java SE 8.0 发布(目前广泛使用的长期支持版本)。
  • 2017 年后,Oracle 改为每半年发布一个版本,LTS(长期支持)版本包括 Java 8、11、17 等。

2.2 Java 版本体系

  • Java SE(Standard Edition):标准版,用于桌面应用开发。
  • Java EE(Enterprise Edition):企业版,用于服务器端开发。
  • Java ME(Micro Edition):微型版,用于嵌入式设备。

2.3 Java 特性与优势

  • 简单性:语法简洁,去除了 C++ 中复杂的内容(如指针、多重继承)。
  • 面向对象:以对象和接口为核心。
  • 可移植性:“一次编写,随处运行”(Write Once, Run Anywhere),通过 Java 虚拟机实现跨平台。
  • 高性能:即时编译(JIT)技术提升执行效率。
  • 动态性:支持反射机制,可在运行时动态加载类。
  • 多线程:内置多线程支持。
  • 安全性:提供沙箱安全机制。
  • 健壮性:去除指针和手动内存管理,采用自动垃圾回收。

三、Java 运行环境与开发环境搭建

3.1 JDK、JRE、JVM 的关系

  • JDK(Java Development Kit):Java 开发工具包,包含编译器、运行时环境和类库。
  • JRE(Java Runtime Environment):Java 运行环境,用于执行 Java 程序。
  • JVM(Java Virtual Machine):Java 虚拟机,解释执行字节码,实现跨平台。不同平台需安装不同版本的 JVM。

3.2 环境变量配置

  1. 设置 JAVA_HOME 为 JDK 安装目录(如 C:\Program Files\Java\jdk-17)。
  2. %JAVA_HOME%\bin 添加到 PATH 环境变量中。
  3. 验证:命令行执行 java -versionjavac -version

四、第一个 Java 程序:HelloWorld

4.1 编写源代码

创建 HelloWorld.java 文件,内容如下:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

4.2 编译与运行

  • 传统方式:javac HelloWorld.java 编译生成 HelloWorld.class,然后 java HelloWorld 运行。
  • 新方式(Java 11+):java HelloWorld.java 直接运行。

4.3 常见错误

  • 文件扩展名隐藏导致实际文件名为 HelloWorld.java.txt
  • javac 命令后需带完整文件名(含 .java)。
  • Java 严格区分大小写。
  • 所有标点符号必须为英文半角。
  • 每条语句以分号结尾。
  • main 方法签名必须为 public static void main(String[] args)

4.4 注释

// 单行注释

/*
 * 多行注释
 */

/**
 * 文档注释,可用于生成 API 文档
 */

五、Java 基础语法

5.1 标识符

  • 组成:字母、数字、下划线 _、美元符号 $,数字不能开头。
  • 不能使用 Java 关键字。
  • 大小写敏感。
  • 命名规范:类名首字母大写(大驼峰),变量和方法名首字母小写(小驼峰),常量全大写加下划线。

5.2 关键字

Java 中有 50 多个关键字,如 publicclassstaticvoidintifelseforwhile 等。gotoconst 为保留字,未使用。

5.3 数据类型

基本数据类型(8 种)
类型 字节数 取值范围
byte 1 -128 ~ 127
short 2 -32768 ~ 32767
int 4 -2^31 ~ 2^31-1
long 8 -2^63 ~ 2^63-1(字面量后加 L)
float 4 约 ±3.4E38(字面量后加 F)
double 8 约 ±1.8E308
char 2 0 ~ 65535(Unicode 字符)
boolean 1 位 true / false
引用数据类型
  • 类、接口、数组、枚举、注解、字符串(String)等。
  • 引用变量本身占用 4 字节(存储对象地址)。

5.4 变量作用域

  • 局部变量:定义在方法或代码块内部,必须初始化后才能使用。
  • 成员变量(实例变量):定义在类中、方法外,有默认初始值(数值为 0,布尔为 false,引用为 null)。

5.5 类型转换

  • 自动类型转换:容量小的类型自动转换为容量大的类型(byte → short → int → long → float → double)。
  • 强制类型转换(targetType) value,可能丢失精度或溢出。
  • 整数常量可直接赋值给 byte、short、char,不超出范围即可。

5.6 运算符

算术运算符

+ - * / %(取模)

赋值运算符

= += -= *= /= %=

一元运算符

++(自增)--(自减)

  • 前置:先自增再参与运算。
  • 后置:先参与运算再自增。
关系运算符

> < >= <= == !=(结果为 boolean)

逻辑运算符

&&(短路与)、||(短路或)、!(非)

  • &&|| 采用短路求值,左侧可确定结果时不再计算右侧。
位运算符(了解)

& | ^ ~ << >> >>>

条件运算符(三元)

条件 ? 表达式1 : 表达式2

字符串连接符

+ 两侧若有一个为 String,则进行字符串拼接。

5.7 运算符优先级

建议使用小括号 () 明确运算顺序,避免记忆优先级。


六、控制流程语句

6.1 顺序结构

程序按代码书写顺序依次执行。

6.2 选择结构

if 语句
if (条件) {
    // 条件为 true 时执行
}
if-else 语句
if (条件) {
    // true 分支
} else {
    // false 分支
}
if-else if-else 多分支
if (条件1) {
    // 条件1 为 true
} else if (条件2) {
    // 条件1 false 且条件2 true
} else {
    // 所有条件 false
}
switch 语句
switch (表达式) {
    case 常量1:
        // 执行代码
        break;
    case 常量2:
        // 执行代码
        break;
    default:
        // 默认代码
}
  • 表达式支持 byte、short、int、char、String、枚举。
  • 忘记 break 会发生“穿透”。

6.3 循环结构

for 循环
for (初始化; 条件; 迭代) {
    // 循环体
}
while 循环
while (条件) {
    // 循环体
}
do-while 循环
do {
    // 循环体
} while (条件);
增强 for 循环(for-each)
for (元素类型 变量名 : 数组或集合) {
    // 使用变量
}

6.4 循环控制

  • break:强制终止整个循环。
  • continue:跳过本次循环剩余语句,进入下一次迭代。

七、方法(Method)

7.1 方法定义

修饰符 返回值类型 方法名(形参列表) {
    // 方法体
    return 返回值;  // 若返回值类型为 void,则可省略或写 return;
}
  • 修饰符:暂时使用 public static
  • 方法不能嵌套定义。

7.2 方法调用

  • 静态方法:类名.方法名(实参) 或直接 方法名(实参)。
  • 有返回值的方法可被赋值给变量或直接使用。

7.3 参数传递

  • Java 采用值传递(值拷贝)。基本类型传递数据值,引用类型传递对象地址值。

7.4 方法签名

方法名 + 参数列表(类型、个数、顺序)构成唯一签名,用于区分重载方法。

7.5 方法重载(Overload)

同一类中,方法名相同但参数列表不同的多个方法。返回值类型和修饰符不参与重载判断。


八、递归(Recursion)

递归是方法自身调用自身。需满足:

  • 递归头:终止条件,避免无限递归。
  • 递归体:将问题分解为更小规模的子问题。

示例:计算阶乘

public static int factorial(int n) {
    if (n == 1) return 1;
    return n * factorial(n - 1);
}

缺点:占用大量栈空间,效率低于循环。适合逻辑清晰、层次较浅的场景。


九、数组(Array)

9.1 数组定义

数组是相同类型数据的有序集合,长度固定。

声明
int[] arr;          // 推荐
int arr[];
动态初始化
int[] arr = new int[5];   // 创建长度为5的数组,元素默认为0
静态初始化
int[] arr = {1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3};

9.2 访问数组

  • 索引范围:0 ~ length-1,超出则抛出 ArrayIndexOutOfBoundsException
  • 获取长度:arr.length
  • 访问元素:arr[索引]

9.3 数组遍历

// 普通 for
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// 增强 for
for (int num : arr) {
    System.out.println(num);
}

9.4 二维数组

// 动态初始化
int[][] matrix = new int[3][4];

// 静态初始化(不规则数组)
int[][] arr = {{1,2,3}, {4,5}, {6,7,8,9}};

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

9.5 常用排序算法

冒泡排序

两两比较,较大元素向后冒泡。

for (int i = 0; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] > arr[j+1]) {
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}
选择排序

每次选出最小(或最大)元素放到已排序序列末尾。

插入排序

将元素逐个插入到已有序的序列中。

9.6 数组的增删改查

  • :在末尾或中间插入元素(需移动后续元素,通常借助集合类)。
  • :删除末尾或中间元素(需移动后续元素)。
  • :直接通过索引赋值。
  • :线性查找或二分查找(要求数组有序)。

9.7 二分查找

public static int binarySearch(int[] arr, int key) {
    int low = 0, high = arr.length - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        if (key < arr[mid]) high = mid - 1;
        else if (key > arr[mid]) low = mid + 1;
        else return mid;
    }
    return -1;
}

十、常用工具类

10.1 随机数生成

// Math.random() 返回 [0.0, 1.0) 的 double
double d = Math.random();

// 生成 [min, max] 的整数
int num = (int)(Math.random() * (max - min + 1) + min);

10.2 键盘输入(Scanner)

import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
double salary = sc.nextDouble();
String name = sc.next();      // 以空格分隔
String line = sc.nextLine();  // 读取整行
sc.close();

十一、强化练习题目

以下为 PDF 中提供的练习题,建议独立完成。

11.1 基础循环

  1. 计算 1~100 所有数字的累加和。
  2. 计算 1~100 奇数之和与偶数之和。
  3. 计算 1~100 中能被 7 整除的数字之和。

11.2 图形打印

  • 打印正方形、长方形、直角三角形、倒三角形、等腰三角形。
  • 打印空心图形(正方形、三角形)。
  • 打印菱形(实心、空心)。
  • 打印九九乘法表。

11.3 经典算法题

  • 百鸡百钱:公鸡 5 文,母鸡 3 文,小鸡 1 文三只,百钱买百鸡,求各几何。
  • 韩信点兵:三三数剩二,五五数剩三,七七数剩二,求物几何。
  • 猴子摘桃:每天吃一半加一个,第十天剩一个,求第一天摘了多少。
  • 掷骰子类型判断:三个骰子,判断豹子、顺子、对子、单点。

11.4 数学专题

  • 因数:输出指定数的所有因数,以及多个数的公因数。
  • 回文数:判断一个整数是否为回文数;找出平方回文数。
  • 水仙花数:三位数各位立方和等于自身。扩展至四位、五位等自幂数。
  • 质数:判断质数,输出范围内的质数。

11.5 数组练习

  • 随机生成三个数字并排序。
  • 生成长度为 10 的随机数组并排序(多种方法)。
  • 数字螺旋矩阵:输入 N,输出 N×N 螺旋矩阵。
  • 九宫格(幻方):实现奇数阶幻方。

十二、进阶内容概要

12.1 杨辉三角

二项式系数的三角形排列,可用二维数组生成。

12.2 斐波那契数列(兔子问题)

每月兔子对数:1, 1, 2, 3, 5, 8, …,可用递归或循环实现。

12.3 数组增删改查的通用实现

为后续学习集合框架(ArrayList)奠定基础。


十三、学习建议

  1. 多敲代码:只看不写无法掌握。
  2. 调试能力:学会阅读编译错误和运行时异常信息。
  3. 注意规范:命名、缩进、注释要符合标准。
  4. 循序渐进:先掌握基本语法,再练习循环、数组,最后理解方法和递归。

本文档可作为 Java SE 入门阶段的知识手册。后续可继续学习面向对象(类、继承、多态、接口)、异常处理、集合框架、IO 流、多线程等高级内容。

今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述

更多推荐