明天也有晚霞嘛 发表于 2021-3-13 00:12

Day05——Java基础知识

# Day05——Java基础知识

## 注释

1. 单行注释:只能注释当前行,以//开始,直到本行结束

   ``` java
   //单行注释
   ```

2. 多行注释:注释一段文字

   ``` java
   /*多行注释
   注释并不会被计算机编译
   注释是为了提高程序代码的可读性*/
   ```

3. 文档注释:(又称 说明注释)用于生产API文档,配合JavaDoc。

   > 说明注释在程序中嵌入关于程序的信息。可以使用 JavaDoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息。

   以**/**** 开始,以***/**结束。

   ``` java
   /**
   * 这个类演示了文档注释
   * @AuThor 明天也有晚霞嘛   //作者
   * @version 1.8         //使用版本
   */
   ```

   ## 关键字

   [百度百科——关键字](https://baike.baidu.com/item/java%E5%85%B3%E9%94%AE%E5%AD%97)


   ### 标识符

   类名、变量名以及方法名都被称为标识符。

   - 所有的标识符都应以**大小字母**(A-Z 或 a-z)、**美元符号($)**、或者**下划线(_)**为开始

   - 不能使用关键字作为变量名或方法名。

   - 标识符区分大小写。(即 Man 和 man 不同。)

   > JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准的国际字符集。

## 数据类型

Java的数据类型分为两大类:

- ***(八大)基本数据类型***(Primitive Type)

1. 整数类型:

    - **byte**   占1个字节,范围[-128,127]

      - **short**   占2个字节,范围2^15[-32678,32767]

      - **int**      占4个字节,范围2^31[-2147483648,2147483647]

      - **long**   占8个字节,*long类型要在数字后加L*,范围[-2^63,2^63-1]

2. 浮点类型:

   - **float**      占8个字节,*float类型要在数字后加F*

   - **double**占8个字节

       > Java语言的整型常数默认为int型,浮点数默认是Double

3. 字符类型:

   - **char**       占2个字节(单字符)

       > 字符串要用String(类)来定义

4. boolean类型:

   - **boolean**      占1**位**(true、false)

- ***引用数据类型***(Reference Type)

1. 类(class)
2. 接口
3. 数组

> 1B(byte,字节)=8bit(位)

---

###         整数拓展

1. 二进制:0b开头,0b101=5;

2. 八进制:0开头,010=8;

3. 十六进制:0x开头,0x10=16;      0~9   A~F

   ### 浮点拓展

   ​      浮点数一般都存在舍入误差,无法精确表示,其结果只能是接近。

- **最好完全避免使用浮点数比较 !**

​      如果需要进行不产生舍入误差的精确数字计算,需要使用**BigDecimal**类。

> ​                Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数 值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

###         字符型拓展

​                单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示一个字符串。

​                Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符。

> ​                Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为 u表示Unicode)

- 转义字符

1. \b:退格
2. \n:换行
3. \r:回车
4. \t:制表符(tab)

- **String类,其实是字符序列(char sequence)。**

``` java
//代码1
String sa=new String("Hello world");
String sb=new String("Hello world");
System.out.println(sa==sb); // false
//代码2
String sc="Hello world";
String sd="Hello world";
System.out.println(sc==sd); // true

```

> - 引用数据类型 比较 地址值,基本数据类型 比较 数值。
> - JVM为了提升性能和减少内存开销,避免字符串的重复创建,维护了一块特殊的内存空间——**字符串实例池**。

先看代码二中例String str = "test";

以这种方式赋值时,JVM会先从**字符串实例池**中查询是否存在"test"这个对象,

> String sc="Hello world";**字符串实例池**中没有"Hello World"对象。

如果不存在,则会在**实例池**中创建"test"对象,并把该对象的地址返回给str。

> 不存在"Hello World"对象,因此该行代码会在**实例池**中创建"Hello World"对象,并把该对象的地址返回给sc。

如果存在,直接把**实例池**中"test"的地址返回给str。

> String sd="Hello world";
>
> 此时**字符串实例池中**存在"Hello World"对象,直接把**实例池**中"Hello World"的地址返回给sd。
>
> 因而,此时sc与sd地址指向**实例池**中同一对象(地址)**(引用数据类型String 比较 地址值)**,sc==sd成立。

​                而在代码一中例String str =**new String**("test");

以这种方式赋值时,JVM会先从**字符串实例池**中查询是否存在"test"这个对象,

> String sa=new String("Hello world");字符串实例池中没有"Hello World"对象。

​                若不存在则会在**实例池**中创建"test"对象,同时在**堆**中创建"test"这个对象,然后将**堆**中的这个对象的地址返回赋给引用str。

> 不存在"Hello World"对象,因此该行代码会在**实例池**中创建"Hello World"对象,同时在**堆**中创建"Hello World"这个对象,然后将**堆**中的这个对象的地址返回赋给引用sa。

​                若**实例池**存在则直接在**堆**中创建"test"这个对象,然后将**堆**中的这个对象的地址返回赋给引用str。

> String sb=new String("Hello world");
>
> ​                此时**字符串实例池中**存在"Hello World"对象,直接在**堆**中创建"Hello world"这个对象,然后将**堆**中的这个对象的地址返回赋给引用sd。
>
> ​                此对象为sb在**堆**中新建的第二个"Hello world"对象,与sa在**堆**中创建的对象不同。
>
> ​                因而,此时sa与sb地址指向**堆**中不同对象(地址)**(引用数据类型String 比较 地址值)**,sa==sb不成立。

- 详细请见 (https://www.cnblogs.com/wdfordream/p/9449710.html)

### 布尔类型拓展

boolean类型占一位(bit),有两个值,true和false,

不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

---

### 类型转换

- 自动类型转换:低-->高
- 强制类型转换:高-->低

不同类型的数据进行混合运算时,先转化为同一类型,然后进行运算。

运算时,从低级到高级**自动类型转换**。

```java
低 ------------------------------------> 高

byte,short,char—> int —> long—> float —> double
```

【注】转换过程中可能导致溢出或损失精度,例如:

```java
int i =128;
byte b = (byte)i;
```

因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

【注】浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:

```java
(int)23.7 == 23;
(int)-45.89f == -45
```

---

【扩展】数字之间可以用下划线分割,例:

```java
int num = 100_0000_0000;
System.out.println(num);      //1000000000
```

luminousman 发表于 2021-3-13 01:36

可以,跟着一起学。

Inch 发表于 2021-3-13 10:07

原来数字还可以加下划线啊, 学习了, 之前就觉得很容易输错:lol
页: [1]
查看完整版本: Day05——Java基础知识