Java语言基础 - 图4 思维导图

Java语言基础 - 图5

Java语言基础 - 图6 计算机的语言发展

Java语言基础 - 图7
• 第一代语言:机器语言
指令以二进制代码形式存在,最开始使用穿孔卡片。
• 第二代语言:汇编语言。
使用助记符表示一条机器指令,如:ADD、SUB等。
• 第三代语言:高级语言
Java、C ,C++,PHP , Python,Scala等。

  1. java发展历史

• 1995年Java问世。
• 1996年Java 1.0。
• 1999年Java 1.2发布(JAVA SE\JAVA EE\JAVA ME)。
• … … …
• 2004年Tiger 发布(JAVA5.0),Java 登录火星。
• 2011年7月由Oracle正式发布Java7.0。
• 2014年3月19日,Oracle公司发布Java8.0的正式版。
• 2017年9月21日,Java9.0正式发布。
• 2018年9月25日,Oracle官方宣布Java11正式发布。

  1. java三大版本

Java SE(Java Platform, Standard Edition)称之为“Java平台标准版”,是Java平台的基础。

  • Java SE包含了运行Java应用所需要的基础环境和核心类库。
  • Java SE还定义了基于桌面应用的基础类库,通过使用这些类库,我们可以编写出类似于像Office那样的丰富多彩的桌面应用。

Java EE(Java Platform,Enterprise Edition)称之为“Java平台企业版”。

  • Java EE构建在Java SE基础之上,用于构建企业级应用。所谓企业级应用是指那些为商业组织、大型企业而创建的应用系统,例如:电信的“计费系统”、银行的“网银系统”、企业中的“客户关系管理系统”等等。

Java ME(Java Platform,Micro Edition)称之为Java 平台微型版。

  • 为机顶盒、移动电话和PDA等嵌入式消费电子设备提供的Java解决方案。随着3G移动智能平台时代的到来,特别是以Java为核心编程语言的Android智能平台的迅速普及,Java ME已经走向淘汰。
  1. Jdk的目录结构
  • bin目录 - 该目录下主要存放JDK的各种工具命令。
  • conf目录 - 该目录下主要存放jdk的相关配置文件。
  • include目录 - 该目录下主要存放了一些平台的头文件。
  • jmods目录 - 该目录下主要存放了JDK的各种模块。
  • legal目录 - 该目录下主要存放了JDK各模块的授权文档。
  • lib目录 - 该目录下主要存放了JDK工具的一些补充jar包和源代码。 Java语言基础 - 图8
  1. jdk、jre、jvm之间的关系

JDK - 称为Java开发工具包( Java Development Kit)。Java开发人士需
要下载和安装JDK,目前的主流版本为JDK11。
JRE - 称之为Java SE运行时环境(Java SE Runtime Environment),提供了运行Java应用程序所必须的软件环境等。无论是开发还是运行Java应用都必须安装。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的
Java语言基础 - 图9

  1. 常见的错误
  • 错误: 需要class, interface或enum => 通常都是class关键字拼写错误
  • 错误: 找不到符号 => 通常因为单词拼写错误或Java中不支持这样的单词
  • 错误: 需要’;’ => 通常都是因为少写分号,加上英文版分号即可
  • 错误: 非法字符: ‘\uff1b’ => 通常是因为出现了中文标点符号,修改为英文版即可
  • 错误: 在类 PrintTest 中找不到 main 方法, 请将 main 方法定义为: =>main写成了mian
  1. 编译和运行

javac.exe - 编译器,主要用于将高级Java源代码翻译成字节码文件。
java.exe - 解释器,主要用于启动JVM对字节码文件进行解释并执行。
Java语言基础 - 图10

Java语言基础 - 图11 变量和数据类型

变量

Java语言基础 - 图12

1.1变量的基本概念

当需要在程序中记录单个数据内容时,则声明一个变量即可,而声明变量的本质就是在内存中申请一个存储单元,由于该存储单元中的数据内容可以发生改变,因此得名为”变量“。
由于存放的数据内容大小不一样,导致所需存储单元的大小不一样,在Java语言中使用数据类型加以描述,为了便于下次访问还需要给该变量指定一个名字,用于记录该变量对应的存储单元。

1.2变量的声明方式

数据类型变量名= 初始值;

1.3变量的注意事项

  • Java是强类型语言,变量在使用前必须声明来指明其数据类型。
  • 变量在使用之前必须初始化。
  • 变量不能重复声明

    1.4标识符的命名法则

  • 由数字、字母、下划线以及$等组成,其中数字不能开头(后面讲到)。

  • 不能使用Java语言的关键字,所谓关键字就是Java语言用于表示特殊含义的单词。
  • 区分大小写,长度没有限制但不宜过长。
  • 尽量做到见名知意,支持中文但不推荐使用。
  • 标识符可以给类/变量/属性/方法/包起名字。

    1.5案例-提示用户从键盘输入自己的姓名和年龄信息并打印出来

    1. public class VarTest {
    2. public static void main(String[] args) {
    3. // 1.声明一个变量并初始化 数据类型 变量名 = 初始值;
    4. int age = 18;
    5. // 2.打印变量的数值 + 字符串连接符 用于将两边的内容拼接/连接起来结果还是字符串
    6. System.out.println("age = " + age); // age = 18
    7. System.out.println("-----------------------------------------")
    8. // 3.使用变量的注意事项
    9. // 3.1 使用变量之前需要声明
    10. // System.out.println("name = " + name); // 错误: 找不到符号
    11. // 3.2 使用变量之前需要初始化
    12. //String name;
    13. //System.out.println("name = " + name); // 错误: 可能尚未初始化变量name
    14. String name = "Bruces";
    15. System.out.println("name = " + name); // name = 奇点
    16. // 3.3 变量不能重复声明
    17. //int age = 17; // 错误: 已在方法 main(String[])中定义/声明了变量 age
    18. int aGe = 17;
    19. int 年龄 = 16;//可以使用,但是不推荐
    20. }
    21. }
  1. 数据类型

在Java语言中数据类型主要分为两大类:

  • 基本数据类型:byte、short、int、long、float、double、boolean、char
  • 引用数据类型:数组、类、接口、枚举、标注

    2.1整数类型

  • Java语言中描述整数数据的类型有:byte、short、int、long,荐int类型

  • 其中byte类型在内存空间中占1个字节,表示范围是:-2^7 ~ 2^7-1.
  • 其中short类型在内存空间中占2个字节,表示范围是:-2^15 ~ 2^15-1.
  • 其中int类型在内存空间中占4个字节,表示范围是:-2^31 ~ 2^31-1.
  • 其中long类型在内存空间中占8个字节,表示范围是:-2^63 ~ 2^63-1.
  • 在Java程序中直接写出的整数数据叫做直接量/字面值/常量,默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L。

    2.2浮点类型

  • Java语言中用于描述小数数据的类型:float 和double,推荐double类型

  • 其中float类型在内存空间占4个字节,叫做单精度浮点数,可以表示7位有效数字,范围:-3.403E38~3.403E38。
  • 其中double类型在内存空间占8个字节,叫做双精度浮点数,可以表示15位有效数字,范围:-1.798E308~1.798E308。
  • Java程序中直接写出的小数数据叫做直接量,默认为double类型,若希望表达float类型的直接量,则需要在直接量的后面加上f或者F.

    2.3 布尔类型

  • Java语言中用于描述真假信息类型有:boolean,数值只有:true 和false。

  • 布尔类型在内存空间中所占大小没有明确的规定,可以认为是1个字节。

    2.4字符类型

    Java语言中用于描述单个字符的数据类型:char类型。如:’a’、’中’等。
    其中char类型在内存空间中占2个字节并且没有符号位,表示的范围是:0 ~ 65535,由于现实生活中很少有数据能够被单个字符描述,因此以后的开发中更多的使用由多个字符串起来组成的字符串,使用String类型加以描述,如:“hello”、“京京呀”等。

    2.5基本数据类型之间的转换

  • Java语言中基本数据类型之间的转换方式:自动类型转换和强制类型转换。

  • 其中自动类型转换主要指从小类型到大类型之间的转换。 Java语言基础 - 图13

其中强制类型转换主要指从大类型到小类型之间的转换,语法格式如下:
目标类型变量名= (目标类型)源类型变量名;

  1. 常用的进制

    3.1二进制

    在计算机的底层采用0和1组成的二进制序列进行数据的描述,逢二进一,二进制的权重是2^0、2^1、2^2、…
    二进制中的最高位(最左边)用于代表符号位,若该位是0则表示非负数,若该位是1则表示负数。
    八进制和十六进制其实都是二进制的简写。

    3.2十进制

    在日常生活中采用十进制进行数据的描述,逢十进一,十进制权重是:10^0、10^1、10^2、…
    Java语言基础 - 图14

    3.3十转二

    正十进制转换为二进制的方式
  • 除2取余法,使用十进制整数不断地除以2取出余数,直到商为0时将余数逆序排序。
  • 拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0。

Java语言基础 - 图15
负十进制转换为二进制的方式

  • 先将十进制的绝对值转换为二进制,然后进行按位取反再加1。
  • 负数的需要补码:按位取反,再加1 。

Java语言基础 - 图16
3.4二转十
正二进制转换为十进制的方式
加权法,使用二进制中的每个数字乘以当前位的权重再累加起来。
Java语言基础 - 图17
负二进制转换为十进制的方式
先减1再按位取反,合并为十进制整数后添加负号。
Java语言基础 - 图18

3.4单个字节表示的整数范围

  • 在计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位,使用0代表非负数,使用1代表负数,具体表示的整数范围如下:
  • 非负数表示范围:0000 0000 ~ 0111 1111 => 0 ~ 127 => 0 ~ 2^7-1
  • 负数表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1 => -2^7 ~ -2^0
  • 单个字节表示的整数范围是:-2^7 ~ 2^7-1,也就是-128 ~ 127.

Java语言基础 - 图19

运算符

Java语言基础 - 图20

1.算术运算符

  • 表示加法运算符
    -表示减法运算符
    * 表示乘法运算符
    / 表示除法运算符
    % 表示取模/取余运算符

    2.字符串连接运算符

    •+ 可以实现字符串的连接。同时可以实现字符串与其他数据类型“相连”。

    3.关系/比较运算符

    •> 表示是否大于运算符>= 表示是否大于等于运算符
    •< 表示是否小于运算符<= 表示是否小于等于运算符
    •== 表示是否等于运算符!= 表示是否不等于运算符
    •所有以关系运算符作为最终运算的表达式结果一定是boolean类型。
  1. 自增减运算符

•++ 表示自增运算符,用于使得当前变量自身的数值加1的效果
•—表示自减运算符,用于使得当前变量自身的数值减1的效果
•只能用于变量,常数不可以

  1. 逻辑运算符

•&& 表示逻辑与运算符,相当于”并且”,同真为真,一假为假。
•|| 表示逻辑或运算符,相当于”或者”,一真为真,同假为假。
•! 表示逻辑非运算符,相当于”取反”,真为假,假为真。
•逻辑运算符的操作数均为boolean表达式。
Java语言基础 - 图21
5.2逻辑运算符的短路特性
•对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;
•对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式;

  1. 条件/三目运算符

•条件表达式? 表达式1: 表达式2
•判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2 。

7.赋值运算符

•= 表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量原来的数值。
•赋值表达式本身也有值,其本身之值即为所赋之值。
•+=、-=、*=、/=、…

8.移位运算符(了解)

•<< 左移运算符,用于将数据的二进制位向左移动,右边使用0补充
•>> 右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充
•>>> 表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充

9.位运算符(了解)

•& 表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0.
•| 表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0.
•~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
•^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.

10.运算符的优先级

•()的优先级极高。
•=的优先级极低。
•若无法确认优先级,则使用()来确保即可。 Java语言基础 - 图22

流程控制语句

  1. 分支结构

Java语言基础 - 图23

1.1if分支结构

  1. if(条件表达式) {
  2. 语句块;
  3. }

Java语言基础 - 图24
判断条件表达式是否成立
=> 若成立,则执行语句块;
=> 若不成立,则跳过语句块;

1.2if else分支结构

  1. if(条件表达式) {
  2. 语句块1;
  3. } else {
  4. 语句块2;
  5. }

Java语言基础 - 图25
•判断条件表达式是否成立
=> 若成立,则执行语句块1;
=> 若不成立,则执行语句块2;

1.3if else if else分支结构

  1. if(条件表达式1) {
  2. 语句块1; }
  3. else if(条件表达式2) {
  4. 语句块2; }
  5. else {
  6. 语句块n; }

Java语言基础 - 图26
•判断条件表达式1是否成立
=> 若成立,则执行语句块1;
=> 若不成立,则判断条件表达式2是否成立
=> 若成立,则执行语句块2;
=> 若不成立,则执行语句块n;

1.4switch case分支结构

  1. switch(变量/表达式) {
  2. case 字面值1: 语句块1; break;
  3. case 字面值2: 语句块2; break;
  4. ...
  5. default:语句块n;
  6. }

Java语言基础 - 图27
•计算变量/表达式的数值=> 判断是否匹配字面值1
=> 若匹配,则执行语句块1 => 执行break跳出当前结构
=> 若不匹配,则判断是否匹配字面值2
=> 若匹配,则执行语句块2 => 执行break跳出当前结构
=> 若不匹配,则执行语句块n
switch()中支持的数据类型有:byte、short、char以及int类型,从jdk1.5开始支持枚举类型,从jdk1.7开始支持String类型。

  1. 循环结构

    2.1循环结构

    1. for(初始化表达式; 条件表达式; 修改初始值表达式) {
    2. 循环体;
    3. }

Java语言基础 - 图28
执行初始化表达式=> 判断条件表达式是否成立
=> 成立则执行循环体=> 修改初始值表达式=> 判断条件是否成立
=> 若不成立,则循环结束

2.2continue关键字

continue语句用在循环体中,用于结束本次循环而开始下一次循环。

2.3break关键字

•break用于退出当前语句块,break用在循环体中用于退出循环。
•for(;;) -这种没有循环条件的循环叫做无限循环,俗称“死循环”。

2.4双重for循环

  1. for(初始化表达式1; 条件表达式2; 修改初始值表达式3) {
  2. for(初始化表达式4; 条件表达式5; 修改初始值表达式6) {
  3. 循环体;
  4. }
  5. }

执行表达式1 => 判断表达式2是否成立
=> 若成立,则执行表达式4 => 判断表达式5是否成立
=> 若成立,则执行循环体=> 执行表达式6 => 表达式5是否成立
=> 若不成立,则内层循环结束=> 表达式3 => 表达式2是否成立
=> 若不成立,则外层循环结束
•外层循环用于控制打印的行数,内层循环用于控制打印的列数,外层循环改一下,内层循环从头到尾跑一圈。
•在以后的开发中若需要打印多行多列时,需要使用双重循环。
•多重循环不宜嵌套太多层,否则效率很低。一般到三重循环即可,最常见的就是双重循环。

2.5while循环

  1. while(条件表达式) {
  2. 循环体;
  3. }

Java语言基础 - 图29
判断条件表达式是否成立
=> 若成立,则执行循环体=> 判断条件表达式是否成立
=> 若不成立,则循环结束

2.6while循环和for循环比较

•while循环和for循环完全可以互换,当然推荐使用for循环。
•while循环更适合于明确循环条件但不明确循环次数的场合中。
•for循环更适合于明确循环次数或范围的场合中。
•while(true) 等价于for(;;) 都表示无限循环。

2.7do while循环

  1. do {
  2. 循环体;
  3. } while(条件表达式);

Java语言基础 - 图30
执行循环体=> 判断条件表达式是否成立
=> 若成立,则执行循环体=> 判断条件表达式是否成立
=> 若不成立,则循环结束
do-while循环主要用于至少执行一次循环体的场合中。

数组

Java语言基础 - 图31

  1. 一维数组

Java语言基础 - 图32

1.1一维数组的基本概念

•当需要在Java程序中记录单个数据内容时,则声明一个变量即可。
•当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数组即可,一维数组本质上就是在内存空间中申请一段连续的存储单元。
•数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在Java语言中体现为一种引用数据类型。
Java语言基础 - 图33

1.2一维数组的声明方式

•数据类型[] 数组名称= new 数据类型[数组的长度];
•调用数组的length属性可以获取数组的长度:
•可以通过下标的方式访问数组中的每一个元素。需要注意的是:数组的下标从0开始,对于长度为n的数组,下标的范围是0~n-1。

1.3一维数组的初始化方式

•基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false。
•可以在数组声明的同时进行初始化,具体如下:
数据类型[] 数组名称= {初始值1, 初始值2, …};

1.4内存结构

内存结构之栈区
•栈用于存放程序运行过程当中所有的局部变量。一个运行的Java程序从开始到结束会有多次变量的声明。
内存结构之堆区
•JVM会在其内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字创建的数组和对象。
Java语言基础 - 图34

1.5数组的优缺点

•可以直接通过下标(或索引)的方式访问指定位置的元素,速度很快。
•数组要求所有元素的类型相同。
•数组要求内存空间连续,并且长度一旦确定就不能修改。
•增加和删除元素时可能移动大量元素,效率低。

1.6数组工具类的概念

•java.util.Arrays类可以实现对数组中元素的遍历、查找、排序等操作。
•常用方法如下: Java语言基础 - 图35

  1. 二维数组

Java语言基础 - 图36

2.1二维数组的概念

•二维数组本质上就是由多个一维数组摞在一起组成的数组,二维数组中的每个元素都是一维数组,而一维数组中的每个元素才是数据内容。

2.2二维数组的声明和初始化方式

•数据类型[][] 数组名称= new 数据类型[行数][列数];
•数据类型[][] 数组名称= {{元素1, 元素2,…}, …};

  • java语言基础笔记 -