一、Java 代码基本格式

每一种编程语言都有一套自己的语法规范,譬如中语,英语等;同样Java 语言也不例外,也需要遵守一定的语法规范

  • Java 所有的程序代码都必须放在一个类中
  • 类需要使用 class 关键字定义,在class前面可以有一些修饰符,格式如下:

    1. 修饰符 class 类名 {
    2. 程序代码
    3. }

    注意点:
    ① Java程序代码可分为 结构定义语句功能执行语句,其中结构定义语句用于声明一个类或方法;功能执行语句用于实现具体的功能。每条功能语句执行语句最后一定需要使用 英文格式分号;结束
    ② Java 是严格区分大小写
    ③ 编写 Java 代码时,为了便于阅读,通常使用良好格式排班

    二、Java 注释

    2.1 注释

  • 注释就是对代码的解释和说明。

  • 注释的目的是让人们能够更加轻松的了解代码,为代码添加注释,是十分必要的,它不会影响程序的编译和执行。

    2.2 Java 中的注释、

  • Java 中的注释有 单行注释多行注释文档注释 三种。

  • 单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。

  1. // 这是单行注释文字
  • 多行注释。多行注释的格式是使用/*_ __*_/将一段较长的注释括起来。
  1. /*
  2. 这是多行注释文字
  3. 这是多行注释文字
  4. 这是多行注释文字
  5. */
  6. 注意:
  7. 多行注释中可以嵌套单行注释
  8. 多行注释之间不能嵌套使用
  • 文档注释。文档注释以/**开始,以*/结束。
  • javadoc 命令可以抽取每个类、方法中的文档注释,生成 API 手册。
  1. package com.lhl.demo;
  2. /**
  3. * 这里是一个文档注释,通常包括对类或方法的介绍,还有作者、日期等信息。
  4. * @author lhl
  5. * @ClassName HelloWorld
  6. * @description TODO 将要做的事情
  7. * @data 2022/04/01 03:14
  8. * @Version V1.0
  9. **/
  10. public class HelloWorld {
  11. /*
  12. 多行注释:注释内容可以分很多行编写。
  13. 注意:多行注释不能嵌套,嵌套会导致多行注释提前结束。
  14. main函数是整个程序的入口。
  15. main函数的声明格式是固定的。
  16. 每一个类中最多只有一个main函数。
  17. */
  18. public static void main(String[] args) {
  19. // 单行注释:在命令行窗口打印一句话
  20. // 单行注释仅对当前行有效
  21. System.out.println("Hello World");
  22. }
  23. }

image.png

三、Java 标识符

3.1 概述

  • 在编程过程中,经常需要在程序中定义一些符号来标记某些名称:如包名 ,类名,方法名,参数名,变量名等等,这些符号被称为标识符;
  • 简单的讲,凡是程序员自己命名的部分都可以称为标识符。

    3.2 标识符的命名规则(必须遵守)

  • 规则是硬性规定,一旦违反,程序就会在编译过程中报错。

  • ① 标识符只能由任意顺序的26英文大小写字母、0~9数字、下划线“_”、美元符号“$”组成

  • ② 不能使用 Java 的关键字或保留字和特殊值。
  • ③ 数字不能开头。
  • ④ 不能包含空格。
  • ⑤ 严格区分大小写。

示例:

username username123 user_name _username $username

3.3 标识符的命名规范

规范是柔性规范:违反规范,不会导致编译报错,但是如果不遵守基本的规范,可能会被大家鄙视。

  • ① 见名知意,最好用英文,不要中英混拼。
  • 类名、接口名等:大驼峰式命名(UpperCamelCase)
    • 每个单词的首字母都大写,形式:XxxYyyZxx 。如:ArrayList
  • 变量、方法名等:小驼峰式命名(lowerCamelCase)
    • 从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz 。 如:lineNumber
  • ④ 包名等:包名所有字母一律小写,单词之间使用点 . 分隔,
    • 例如**com.lhl.test**,一般是公司域名倒写
  • 常量名等:每一个单词都大写,单词之间使用下划线 _ 分隔,形式:XXX_YYY_ZZZ

    四、Java 中的关键字

4.1 关键字概述

关键字是指被java语言赋予了特殊含义的单词。
目前java中总共有53个关键字(48个关键字+2个保留字),后续会慢慢接触到

4.2 关键字的特点:

  • 关键字的字母全部小写。
  • 常用的代码编辑器对关键字都有高亮显示,比如现在我们能看到的public、class、static等。

    4.3 Java 关键字

    | abstract | assert | boolean | break | byte | | —- | —- | —- | —- | —- | | case | catch | char | class | const | | continue | default | do | double | else | | enum | extends | final | finally | float | | for | goto | if | implements | import | | instanceof | int | interface | long | native | | new | package | private | protected | public | | return | strictfp | short | static | super | | switch | synchronized | this | throw | throws | | transient | try | void | volatile | while |

注意:

  • 关键字一共50个,其中 constgoto 是保留字。
  • truefalsenull 看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。

五、常量

5.1 概述

常量:在程序运行过程中,其值不可以发生改变的量。
在 java 中,常量包括 整型常量,浮点数常量,布尔常量,字符常量等

5.2 常量的分类

  • 自定义常量:通过 final 关键字定义。
  • 字面值常量: | 字面值常量 | 说明 | 举例 | | —- | —- | —- | | 字符串常量 | 用双引号括起来的多个字符(可以包含0个、一个或多个) | "HelloWorld""a""abc""中国" | | 整数常量 | 整数 | 12,-23 | | 浮点常量 | 小数 | 12.34 | | 字符常量 | 用单引号括起来的一个字符 | ‘a’,’0’,’沙’ | | 布尔常量 | 布尔值,表示真假,只有两个值true和false | true,false | | 空常量 | 一个特殊的值,空值,值为null | null |
  • ①如何理解 字面
  • 我们看到的字面,就是数据本身,字面含义就是数据。
  • ②对照 变量 来理解 字面量
  • int a = 10; // 这里的变量 a 不代表 a 这个字符,它代表一个等于 10 的整数。
  • 'a' // 这里的 ‘a’ 就是字面常量,它就是按照字面意思,代表 ‘a’ 这个字符。
public class Demo {
    public static void main(String[] args) {
        System.out.println(10); // 输出一个整数
        System.out.println(5.5); // 输出一个小数
        System.out.println('a'); // 输出一个字符
        System.out.println(true); // 输出boolean值true
        System.out.println("欢迎来到Java"); // 输出字符串
    }
}

注意:除空常量外,其他常量均可使用输出语句直接输出。

5.3 特殊字符 — 反斜杠(\)

定义:在字符常量中,反斜杠(\)是一个特殊的字符,被称为转义符,它的作用是用来转义紧随其后的一个字符
说明:转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如“**\n**”表示换行。
常见的转义字符:

\r : 表示回车,将光标定位到当前行的开头,不会跳到下一行。
\n : 表示换行,换到下一行的开头。
\t : 表示制表符,将光标移到下一个制表符的位置,就像在文档中用Tab键一样。
\b : 表示退格符号,就像键盘上的Backspace。
\\\\ \\
\\" "
\\' '

譬如""''\字符都有特殊含义,在Java中无法直接表示,所以用反斜杠加上另一个字符来表示

六、变量(variable)

在程序运行期间,随时可能会产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元用一个标识符来标识,这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值

6.1 变量的概念

  • 变量:在程序执行的过程中,其值可以发生改变的量。

    6.2 变量的作用

  • 变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的。

6.3 变量的数据类型

  • Java 中的数据类型分为两大类:
    • 基本数据类型:整型浮点类型字符类型布尔类型
    • 引用数据类型:数组接口

image.png

  • 8中基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同的大小和属性
  • 引用数据类型是Java程序中由编程人员自己定义的变量类型,后续会详解

6.3.1 8种数据类型详解

企业微信截图_16487566579550.png

说明: E+38表示:乘以10的38次方。同理E-45表示:乘以10的负45次方 Java 中的默认类型:整数类型是 int 、浮点类型是 double 。

  • 常量整数值:
    • 赋值给 byte,只要在 byte 范围内即可。
    • 赋值给 short,只要在 short 范围内即可。
    • 赋值给 int,只要在 int 范围内即可。
    • 赋值给 long,在 int 范围内的,可以加 L 也可以不加 L ,会自动升级为 long ,如果数字超过了 int 范围,必须加 L 。
  • 小数常量值:
    • 无论多大,不加 F ,就是 double 类型。

6.4 变量的声明、赋值和使用语法

6.4.1 变量的三要素

  • 数据类型
  • 变量名

6.4.2 变量的声明语法

  • 声明变量并赋值
数据类型 变量名 = 初始化值; // 声明变量并赋值
int age = 18;
System.out.println(age);
  • 先声明,后赋值
// 先声明,后赋值(使用前赋值即可)
//数据类型 变量名;
//变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
  • 同时定义多个变量

在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。

int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开
System.out.println(a);
System.out.println(b);

int c,d; // 声明int类型的变量c和d,中间使用逗号隔开
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);

6.4.3 变量的修改

int a = 10;
a = 30;  //修改变量的值
System.out.println(a);

变量前面不加数据类型时,表示修改已存在的变量的值

6.5 变量的作用域

  • 概念:一个变量的有效范围。
  • 变量需要先定义后使用
  • 变量必须在有效范围内使用。
  • 具体范围:在 Java 语言中,变量的作用域就是它所在的一组 {}

image-20210903172147635.png

6.6 变量使用的注意事项

  • ① 先声明后使用。
  • ② 在使用之前必须初始化(赋值)(看情况,如果是类属性,系统会根据其数据类型,自动赋予初始化值)。
  • ③ 变量有作用域。
  • ④ 在同一个作用域中不能有同样的变量名,换言之,一个变量在作用域中只能使用一次。
  • ⑤ 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
  • ⑥ 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。

七、变量类型转换

7.1 概述

在 Java 程序中,不同的基本数据类型的值经常需要进行互相转换,Java 语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种方式:自动类型转换强制类型转换

7.2 自动类型转换(隐式类型转换)

把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:

double num = 10; // 将int类型的10直接赋值给double类型
System.out.println(num); // 输出10.0

图片1.png

  • 自动类型转换的场景:
  • ① 当将存储范围小的值(常量值、变量值、表示式计算的结果值)赋值给存储范围大的变量时:

    int i = 'A'; //char自动升级为int
    
    double d = 10; // int自动升级为double
    
    byte b = 127; // 右边的整数常量值必须在 -128 ~ 127 范围内
    
    long num = 12345678; // 右边的整数常量如果在int范围内,编译和运行都可以通过,这里涉及到数据类型转换
    
    long bigNum = 1234567898103433433L; // 右边的整数常量值如果超过int范围,必须加L,否则编译不通过
    
  • ② 当存储范围小的数据类型和存储范围大的数据类型一起混合运算时,会先转换为存储范围大的数据类型,然后再计算: ```java int i = 10; byte b = 10; double d = 10;

double sum = i + b + d;

System.out.println(sum); // 混合运算,升级为double


- ③ 当 byte 、short 、char 数据类型进行算术运算的时候,会按照 int 类型处理:
```java
byte b1 = 1;
byte b2 = 2;

// byte b3 = b1 + b2; // 编译报错,b1 + b2 自动升级为int
char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2); // 113
  • ④ boolean 类型不参与。

7.3 强制类型转换

  • 强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型
  • 语法:
    数据类型 变量名 = (数据类型)被强制转换值;
    

    注意:强制类型转换可能会损失精度或溢出。

  • 强制类型转换的场景:
  • ① 当将存储范围大的值(常量值、变量值、表示式计算的结果值)赋值给存储范围小的变量时:

    int i = (int) 3.14; // 强制类型转换,损失精度
    
    double d = 1.2;
    int num = (int) d; // 损失精度
    
    int i = 200;
    byte b = (byte) i;
    System.out.println("b = " + b); // 溢出 -56
    
  • ② boolean 类型不参与。

  • ③ 当某个值想要提升数据类型的时候,也可以使用强制数据类型: ```java int i = 1; int j = 2;

double d = (double) i / j; System.out.println(d);

> 注意:③ 场景下的强制类型转换是没有风险的。

<a name="ilsL3"></a>
## 7.4 常量优化机制
案例代码:
```java
byte a = 3;
byte b = 4;
byte c = a + b; //错误。因为两个byte变量相加,会先提升为int类型
byte d = 3 + 4; //正确。常量优化机制

常量优化机制: 先判断值是否是常量, 然后再看值是否在该数据类型的取值范围内. 一旦有变量参与表达式,那么就不会有编译期间的常量优化机制 只有byte, short, char 可以使用常量优化机制,而且只能特定int赋值,byte/short/char,其他基本数据类型不行 在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在byte取值范围内, 在:编译通过 不在:编译失败

7.5 特殊的数据类型转换

  • ① 任意数据类型的数据和 String 类型进行 + 运算的时候,结果一定是 String 类型。

    System.out.println("" + 1 + 2); //12
    
  • ② String 类型不能强制类型转换,转为其他类型:

    String str = "123";
    int num = (int)str;// 错误
    
    String str = "123";
    int num = Integer.parseInt(str);// 正确
    

    八、两种常见的输出语句

  • 换行输出语句:输出内容,完毕后进行换行,格式如下:

    System.out.println("输出内容");
    
  • 直接输出语句:输出内容,完毕后不做任何处理,格式如下:

    System.out.print("输出内容");
    

    注意事项:

    • ① 换行输出语句,括号内可以什么都不写,只做换行处理。
    • ② 直接输出语句,括号内什么都不写,直接报错。
    • ③ 如果输出语句的括号内有多向内容,那么必须使用 + 连接起来。
    • ④ 如果某些内容想要原样输出,就用 "" 引起来;如果想要输出变量中额内容,则不要将变量名用 "" 引起来。
public class PrintDemo {
    public static void main(String[] args) {
        // 带有换行效果的输出
        System.out.println("Hello Java");

        // 不带有换行效果的输出
        System.out.print("Hello Java");
        System.out.print("Hello Java");

        // 调用print()函数的时候,不传参数,编译直接报错
        // System.out.print();

        // "age"是一个字面量,也可以说是一个字符串常量
        System.out.println("age");

        int age = 18;
        // age是一个变量,在打印语句中会输出这个变量的值
        System.out.println(age);
        // 输出很多内容的时候,可以使用 + 做字符串连接
        System.out.println("age = " + age);

    }
}

九、计算机是如何存储数据的?

9.1 概述

  • 计算机世界只有二进制,那么在计算机中存储和运算所有的数据都要转为二进制,包括数字、字符、图片、声音和视频等。

9.2 进制(了解)

9.2.1 进制的分类

  • ① 十进制:
    • 数字组成:0~9
    • 进位规则:逢十进一。
  • ② 二进制:
    • 数字组成:0~1
    • 进位规则:逢二进一。
  • ③ 八进制:很少使用
    • 数字组成:0~7
    • 进位规则:逢八进一。
    • 和二进制的换算规则:每三位二进制是一位八进制。
  • ④ 十六进制:
    • 数字组成:0~9A~F
    • 进位规则:逢十六进一。
    • 和二进制的换算规则:每四位二进制是一位十六进制。

9.2.2 进制的换算

十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 a或A
11 1011 13 b或B
12 1100 14 c或C
13 1101 15 d或D
14 1110 16 e或E
15 1111 17 f或F
16 10000 20 10

9.2.3 在代码中如何表示四种进制的值(了解)

  • 十进制:正常表示
System.out.println(10);
  • 二进制:0b0B 开头
System.out.println(0B10);
  • 八进制:0 开头
System.out.println(010);
  • 十六进制:0x0X 开头
System.out.println(0X10);

9.3 计算机中存储单位

**位(bit)**: 数据存储的最小单位,也就是二进制。
我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。二进制数系统中,每个 0 或 1 就是一个位
**字节(Byte)**:是计算机信息技术用于计量存储容器的一种计量单位
计算机中最基本的存储单元叫“字节(byte)”,通常用大写字母”B”表示,字节是由连续的8个位组成。1Byte 等于 8bit

位、字节.png

  • 转换关系:
    • 1 Byte = 8 bit。
    • 1 KB = 1024 Byte。
    • 1 MB = 1024 KB。
    • 1 GB = 1024 MB。
    • 1 TB = 1024 GB。
    • ……

9.4 如何存储数据

9.4.1 概述

  • Java 中使用的字符集是:Unicode 编码集。

9.4.2 编码表

  • 在计算机的内部都是二进制的 0 和 1 的数据,如何让计算机可以直接识别人类文字的功能,就产生了编码表的概念。简而言之,编码表就是将人类的文字和一个十进制数进行对应起来形成一张表格,如下所示: | 字符 | 数值 | | —- | —- | | 0 | 48 | | A | 65 | | a | 97 |

  • 将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表 ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。

  • Unicode (统一码、万国码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。