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
``` 可以,跟着一起学。 原来数字还可以加下划线啊, 学习了, 之前就觉得很容易输错:lol
页:
[1]