绪言

Java基础学习视频推荐《传智播客》毕向东老师的视频,很详细易懂。
哔哩哔哩视频:https://www.bilibili.com/video/BV1pt41127na/?share_source=copy_web&vd_source=93c33487936bc576e614294b6118010d
本学习笔记也是基于该视频完成,望砥砺前行。


一、计算机语言概述

我们交流用的是母语,在国外沟通用的外语,同理计算机语言就是计算机能认识的语言,例如:C、C++、Java等,由于计算机只能识别二进制数,就是简单的0和1,这些语言最终都会编译转换成计算机能够识别的机器码。

1.1 软件开发

软件定义:一系列按照特定顺序组织的计算机数据和指令的集合(大白话就是一系列操作数据的集合)。
常见的系统软件:DOS、Windows、Linux、MacOS等等。
常见的应用软件:扫雷、微信、网易云音乐等等。

开发的定义:制作软件。

1.2 人机交互

定义:人与软件之间的互动,看到的界面和反馈数据信息都是交互的方式。
图形化界面(Graphical User Interface):简称GUI,软件界面,通过点击输入等一些操作,简单直观易上手。
指令交互(Command Line Interface):简称CLI,控制台输入特定的指令,让计算机完成一些操作。


二、Java语言概述

Java是SUN(Stanford University Network)斯坦福大学网络公司1995年推出的一门高级编程语言,于2009年4月20日被Oracle公司以74亿美元收购。
Java是一种面向Internet的编程语言。随着Java技术在Web方面的不断成熟,已经成为Web应用程序的首选开发语言。简单易学,完全面向对象,安全可靠,跨平台的编程语言。

2.1 Java三种技术架构

  1. J2EE(Java 2 Platform Enterprise Edition,JAVAEE)企业版
    适用于企业级应用开发,提供分布式、多层架构支持。典型场景包括大型电商平台、银行系统、ERP等需要高并发、高可靠性的场景。核心技术包括EJB、JMS、Servlet/JSP,依赖应用服务器(如WebLogic、WildFly)。
  2. J2SE(Java 2 Platform Standard Edition,JAVASE)标准版
    Java核心平台,适用于桌面应用、工具开发和小型服务端程序。典型场景包括Swing桌面程序、Android开发基础库、嵌入式设备应用。核心特性涵盖集合框架、IO、多线程等基础API,直接运行于JVM。
  3. J2ME(Java 2 Platform Micro Edition,JAVAME)小型版
    针对资源受限设备优化,适用于嵌入式系统和移动端开发。典型场景包括功能手机应用、物联网设备(如传感器)、智能卡程序。技术特点为精简的JVM(CLDC配置)和专用API(如MIDP),现已逐步被Android替代。

说明:Java5.0版本后,更名为JAVAEE、JAVASE、JAVAME。

2.2 Java跨平台原理

Java跨平台是基于JVM虚拟机,因为Java程序在JVM上执行,所以只要不同的操作系统安装对应操作系统的JVM,同一个Java程序就能在不同操作系统上执行,实现了Java程序的跨平台性。

注意:JVM不跨平台,需要安装对应操作系统的JVM,实现一次编写,到处运行的跨平台特性。

原理图如下:

在这里插入图片描述

说明:JavaC编译器,在安装JDK后,JDK所在bin目录下的Javac.exe可执行文件。


三、Java开发环境搭建

3.1 什么是JDK和JRE?

  1. JRE(Java Runtime Environment):Java运行环境
    JRE包含Java虚拟机(JVM,Java Virtual Machine)和Java程序所需的核心类库等,如果要运行一个开发好的Java程序,计算机只需安装JRE。
  2. JDK(Java Development Kit):Java开发工具包
    JDK是提供给Java开发人员使用,其中包含Java的开发工具,也包含了JRE,所以安装了JDK,就不用单独安装JRE了。其中开发工具包含:编译工具(javac.exe)、打包工具(jar.exe)等

简单而言:JDK开发完的Java程序,交给JRE去运行。

3.2 JDK官网下载

Oracle官网下载:https://www.oracle.com/cn/java/technologies/downloads/
访问官网下载页,滚动页面找到如下,选择Java8,根据自身Windows系统选择x64或x86位。

在这里插入图片描述

说明:Oracle官网需要登录账号后才能下载,没有的话需要注册一个,或在CSDN资源里下载《Oracle JDK8 Windows版x64》,或蓝奏云下载:https://wwln.lanzoul.com/ibB0q39j4jte

3.3 JDK安装和环境配置

3.3.1 JDK安装

下载后找到所在的目录,双击.exe文件进行安装(根据提示点击下一步就行),注意安装过程中修改一下安装路径,默认在C盘,不建议放C盘(如果只有一个C盘那就默认)
在这里插入图片描述

3.3.2 JDK系统环境配置

在任务栏中的搜索框中输入编辑系统环境变量
在这里插入图片描述

在系统属性界面,选择环境变量。
在这里插入图片描述

配置环境变量。

变量名 配置路径 说明
JAVA_HOME D:\Softwares\……\Java\jdk1.8.0_351(参考) JDK安装所在目录(根据自己安装目录设置)
CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar class文件路径,该路径用于JVM查找编译后的class文件(注意路径前面前面的.
Path %JAVA_HOME%\bin 运行的二进制文件路径(其中%JAVA_HOME%是引用前面JAVA_HOME变量的意思)

补充说明:

  • JAVA_HOME和CLASSPATH变量需要新建,Path不需要新建,找到已有的Path变量编辑,新增路径(如果是单行输入框,多个路径用分号;隔开),最后点确认。
  • CLASSPATH配置是为了JVM找到编译后的字节码文件,如果不配置ClASSPATH,默认是在当前目录下查找。
  • 环境配置是为了在Dos窗口下的任意目录都可以使用JDK可执行文件(编译运行),如果是使用IntelliJ IDEA工具,可以不配置系统环境,直接在IDEA导入本地的JDK(不过还是建议配置一下啦)。

3.4 JDK系统环境自测

配置完后,检验配置是否成功,在Windows任务栏的搜索框输入cmd(命令提示符),打开DOS命令窗口,输入java -version
在这里插入图片描述
如果输入指令后显示Java版本,则环境配置成功,若提示无效指令,请重新检查配置的环境变量是否正确。

3.5 Windows Dos常用指令(了解)

指令语法 说明
dir 列出当前目录下所有的文件和文件夹
cd [当前目录下的文件夹名] | [\其他盘符名 指定目录路径] 进入指定目录
cd .. 退回上一级目录
cd \ 退回根目录
md [文件夹名] 创建文件夹
rd [文件夹名] 删除文件夹(前提要是空文件夹)
del [文件名] 删除文件(删除所有文件可以用 del *)
exit 退出dos窗口
help | help 指令名 【重要】查看dos帮助文件,里面包含所有的dos指令

在这里插入图片描述 在这里插入图片描述


四、Intellij IDEA工具下载安装设置

为了开发效率,我们直接使用Intellij IDEA工具进行开发,不用笔记本和Exlipse开发,也可以提前熟悉这款开发工具,市场上企业级开发用的都是它。

4.1 Intellij IDEA下载

Jetbrains官网下载:https://www.jetbrains.com/idea/download/?section=windows
访问官网下载页,这里直接点Download是下载最新版本,选择Other versions下载其他版本,这里我下载2021.2.2版本。

在这里插入图片描述

4.2 Intellij IDEA的安装和设置

找到下载后的路径,双击.exe文件进行安装,注意安装过程中默认在C盘,建议安装到其他盘(如果只有一个C盘那就默认)

Intellij IDEA详细设置和快捷键:https://blog.csdn.net/qq_45674493/article/details/135400839
Intellij IDEA 2021.2.2无限试用:https://blog.csdn.net/qq_45674493/article/details/129038576


五、Intellij IDEA工具快速上手

在使用之前,我们先简单了解项目结构,一个项目里可以包含多个功能模块,一个功能模块里可以包含多个类包,一个类包里可以包含多个类文件。
在这里插入图片描述
我们使用Intellij IDEA新建一个项目,后面学习都在该项目中,项目名为JavaBaseStudy

5.1 创建Project(项目)

打开Intellij IDEA,新建一个新项目。
在这里插入图片描述

Project SDK我们选择上面安装的JDK(如果配置了系统环境,这里下拉会有提示,version是JDK版本;如果没有配置系统环境,就需要自己手动导入一下),然后Next下一步。
在这里插入图片描述

不勾选Create project from template(根据模板创建项目),Next下一步。
在这里插入图片描述

修改Project name项目名为JavaBaseStudy,项目路径建议放其他盘(不建议放C盘),然后点Finish完成。
在这里插入图片描述

完成后进入项目(上标题栏是IDEA操作栏,左侧是项目目录和相关文件,右侧灰色区域是代码编辑区)。
在这里插入图片描述

5.2 创建Module(功能模块)

在JavaBaseStudy项目下,鼠标右键新建Module。
在这里插入图片描述

这里和新建项目时一样,选择本地安装的JDK(我本地安装了二个版本的JDK,这里选择1.8版本),Next下一步。
在这里插入图片描述

模块命名(注意:模块名称字母全部小写,多个词可以用-隔开),模块路径默认在当前项目下,Finish完成。
在这里插入图片描述

模块Module就创建完成,在自己项目下就能看到。
在这里插入图片描述

5.3 创建Package(类包)

在功能模块(Module)下的src目录下,鼠标右键新建Package包。
在这里插入图片描述

给包命名(注意:包名统一使用小写,使用单数形式,点分隔符之间有且仅有一个自然语义的英语单词;例如:域名+个人/组织/公司名称缩写+包名称;每个点分隔符表示下级目录),然后回车创建包。
在这里插入图片描述

创建完包后,可以看到在src目录下创建了一个多级目录。
在这里插入图片描述

5.4 创建Class(类)

在指定的demo包下,鼠标右键新建一个类。
在这里插入图片描述

给新建的类命名(注意:类名使用 UpperCamelCase 风格,每个单词首字母大写,POJO类命名除外),默认选中Class,回车创建。
在这里插入图片描述

可以在指定的demo包下看到一个HelloWorldDemo.java文件,类就创建好了。
在这里插入图片描述

5.5 演示HelloWorld(程序执行的过程)

在HelloWorldDemo类中编写并运行输出Hello World!字符串,可以复制下面源代码,然后在自己本地运行看看运行结果。

源代码:

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

点击main主函数左边的绿色三角形,选择Run 'HelloWorldDemo.main()'运行,并在控制台看到输出的结果。
在这里插入图片描述

我们运行完后会发现左侧目录下生成了out文件夹,这是存储编译后生成的class字节码文件目录。
在这里插入图片描述

程序执行流程:
在这里插入图片描述
说明:如果javac编译出错,则不会生成class文件;java运行会启用JVM虚拟机,虚拟机会识别class的main主函数入口,并执行该方法,最后输出结果。


六、Java基础语法

6.1 关键字(50个)

关键字都是小写字母,Java关键字总共有50个。这些关键字是Java语言中的保留字,不能用作标识符(如变量名或方法名)。以下是按作用分类排序列出的Markdown表格,包含每个关键字的分类和简要说明。分类基于主要用途分为:访问控制、修饰符、流程控制、异常处理、包控制、基本类型、类和对象、其他(包括未使用的保留字)。

关键字 作用 说明
package 包管理 声明类所在的包
import 包管理 导入其他包的类
class 类与对象 声明类
interface 类与对象 声明接口
enum 类与对象 声明枚举类型(Java 5+)
extends 类与对象 表示继承关系
implements 类与对象 实现接口
new 类与对象 创建对象实例
this 类与对象 引用当前对象
super 类与对象 引用父类对象或构造器
instanceof 类与对象 检查对象是否为指定类的实例
public 访问控制 公开访问权限
protected 访问控制 受保护访问权限(同包或子类)
private 访问控制 私有访问权限(仅本类)
abstract 修饰符 声明抽象类或方法
final 修饰符 声明不可继承的类/不可重写的方法/常量
static 修饰符 声明静态成员(类级共享)
volatile 修饰符 确保变量在多线程中的可见性
transient 修饰符 标记不参与序列化的字段
synchronized 修饰符 声明同步方法或代码块(线程安全)
native 修饰符 声明本地方法(由 JNI 实现)
strictfp 修饰符 声明严格浮点计算
void 返回类型 表示方法无返回值
boolean 基本数据类型 布尔类型(true/false
byte 基本数据类型 8 位整数类型
char 基本数据类型 16 位 Unicode 字符
double 基本数据类型 双精度浮点数
float 基本数据类型 单精度浮点数
int 基本数据类型 32 位整数
long 基本数据类型 64 位整数
short 基本数据类型 16 位整数
if 流程控制 条件判断
else 流程控制 if 的否定分支
switch 流程控制 多分支选择
case 流程控制 switch 的分支标签
default 流程控制 switch 的默认分支
while 流程控制 循环结构
do 流程控制 while 循环前置执行
for 流程控制 通用循环结构
break 流程控制 跳出循环或 switch
continue 流程控制 跳过当前循环迭代
return 流程控制 从方法返回值
try 异常处理 声明需捕获异常的代码块
catch 异常处理 捕获并处理异常
finally 异常处理 无论是否异常都执行的代码块
throw 异常处理 主动抛出异常
throws 异常处理 声明方法可能抛出的异常
assert 异常处理 断言条件(需启用 -ea 参数)
const 保留字(未使用) 保留关键字,无实际作用
goto 保留字(未使用) 保留关键字,无实际作用

关键说明:

  1. 保留字:constgoto 在 Java 中无实际功能,仅为保留字。
  2. 字面量:true/false/null 不属于关键字,是特殊字面量。
  3. 版本差异:enum 是 Java 5 新增,_(下划线)在 Java 9 后成为保留字(未列入表格)。

6.2 标识符(命名规则)

Java标识符是程序中用于命名变量、方法、类、接口、包等元素的自定义名称。它们相当于程序实体的唯一标识符,标识符必须遵循特定规则,以确保代码的可读性和正确性(见名知意)。

标识符命名组成:

  • 字母(A-Z, a-z):包括英文字母和Unicode字符(如中文,但不推荐)。
  • 数字(0-9):但不能作为首字母开头。
  • 特殊符号:仅允许下划线 _ 和美元符号 $(注意:空格也是符号)。

标识符命名规则:

  1. 首字符规则
    必须以字母、_$开头,不能以数字开头

  2. 区分大小写
    ageAge 被视为不同标识符。

  3. 长度无限制
    理论上长度任意,但建议保持简洁(通常不超过255字符)。

  4. 禁止关键字
    不能使用Java的50个保留关键字。

合法示例

_count, $price, user123, 学生姓名 (不推荐)

非法示例

2user(数字开头), first-name(含连字符), class(关键字)

演示结果: 不符合标识符命名的变量,编译都会失败。
在这里插入图片描述

行业命名约定

  • 类名/接口名:大驼峰式(首字母大写),例如:EmployeeManager, PaymentService
  • 方法名/变量名:小驼峰式(首字母小写),例如:getUserName(), studentCount
  • 常量名:全大写+下划线分隔,例如:MAX_SIZE, PI_VALUE
  • 包名:全小写+点分隔,例如:com.example.project

参考阿里Java开发手册(黄山版):https://wwln.lanzoul.com/iCI7O39qvudi


6.3 注释(单行/多行/文档注释)

注释用于程序员对代码进行解释说明,有助于代码的可阅读性。注释不会参与代码的编译,注释有文档注释、多行注释、单行注释。

注释的作用:

  1. 对代码解释说明。
  2. 定位问题。
  3. 保留暂时不用的代码。

文档注释语法:

/**
这是一个文档注释,一般用于类、接口和方法的说明。
*/

多行注释语法:

/*
这是一个多行注释,一般用于变量、代码片段的说明。
*/

单行注释语法:

// 这是一个单行注释,一般用于变量、代码片段的说明。

说明:单行注释和多行注释可以嵌套使用,多行注释不能互相嵌套。

源代码:

 /**
  * 这是一个测试方法
  */
 public static void test(){
     //定义一个变量
     int a = 1;
     int b = 2;
     int c = a + b;
     /*
     输出变量c;
     其中变量c的值为变量a和变量b的和
     */
     System.out.println(c);
 }

如下所示,源文件编译后,生成的字节码文件里,是没有注释的,所以注释不参与代码的编译。
在这里插入图片描述 在这里插入图片描述

6.4 数值常量类型

定义:不能改变的数值;大白话就是一旦定义了的数值就不会发生改变。

类型 关键字 说明
整数型 byte | short | int | long 所有整数
小数型 float | double 所有小数
布尔型 boolean 只有true和false
字符型 chart 将一个数字、字母或符号用单引号标识(''
字符串型 String 将一个或多个字符用双引号标识(""
null null 只有一个数值就是null

源代码示例:

public static void numTypeTest(){
     //整数
     byte byteVal = 1; //8位整数
     short  shortVal = 3; //16位整数
     int intVal = 39; //32位整数
     long longVal = 354678900; //64位整数
     //浮点数
     float floatVal = 3.14f; //单精度浮点数
     double doubleVal = 3.14; //双精度浮点数
     //布尔
     boolean blnVal = true;
     //字符
     char charVal = 'a';
     //字符串
     String strVal = "hello world";
     //null
     String nullVal = null;
  }

6.5 进制和转换

整数类型分别有:byte、short、int、long四种类型,每个类型对应的精度不同。

整数类型 对应的bit位
byte 8位
short 16位
int 32位
long 64位

进制表现形式:

进制 表现形式 说明
二进制 0,1 满2进1
八进制 0-7 满8进1,用0开头
十进制 0-9 满10进1
十六进制 0-9,A-F 满16进1,用0x开头

注意:整数默认是十进制形式表示,计算机中的二进制0或1其实就是1个比特(bit),1个字节(byte)等于8个比特(bit)。

进制转换参考文章:https://xinzhi.wenda.so.com/a/1537180588200142

6.5.1 负数的二进制

负数的二进制表示是通过补码来实现,补码不仅用于表示负数,还用于二进制的算术运算,因为它简化了加法和减法运算的硬件实现。了解负数的二进制表示,首先需要理解几个基本概念:原码、反码和补码。

原码:
原码是将一个数值直接转换为二进制形式,但在最高位加上符号位,其中0表示正数,1表示负数。

5的原码:00000000 00000000 00000000 00000101
-5的原码:10000000 00000000 00000000 00000101

反码:
反码是将原码的非符号位取反(即1变为0,0变为1)。正数的反码与其原码相同,而负数的反码则是将其原码(除符号位外)的每一位取反。

-5的反码:11111111 11111111 11111111 11111010

补码:
补码是在反码的基础上加1。正数的补码与其原码相同,而负数的补码是在其反码的基础上加1。

-5的补码:11111111 11111111 11111111 11111011

说明:补码的优点在于它消除了+0和-0的区别,只有一个零的表示,并且使得加法和减法运算可以统一处理。例如,5 - 5可以表示为5 + (-5),在补码系统中,这两个操作是等价的。

6.6 变量

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐