目录
一 关键字
编辑 二 标识符
三 变量
变量数据类型
变量注意点
四 数据类型
前置知识 - 计算机存储单位
整型数据类型
浮点数据类型
字符数据类型
布尔数据类型
五 数据类型间的计算
基本数据类型之间的计算
自动类型提升
强制类型转换
引用数据类型 Sting 类 与 基本数据类型之前的计算
一 关键字
定义: 被java赋予了特殊含义的,用做专门用途的字符串或单词(与前端定义一样,如const let 等)
注意: 全是小写
官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
二 标识符
定义: java中变量,方法,类名等命令时的符号为标识符(凡是需要自定义名称的地方)
标识符命名规则:
1.只能由26个英文字母大小写,0-9,_或$组成
2. 数字不能开头
3. 不可以使用关键字和保留字
4.严格区分大小写,长度无限制
5. 标识符不能包含空格
备注: 总的来说标识符的命名规则和前端区别不大,但是后端java有很多自己的小的命名规范
1. 包名: 多单词组成时所有字母小写
例如: java.lang com.baidu
2.类名接口名:多单词所有单词的首字母大写 XxxYyyZzz
例如:HelloWord, String,System
3.变量名,方法名:多单词第一个单词首字母小写,第二个单词首字母大写xxxYyyZzz
例如: name,age,gender,bookName,getName
4.常量名:所有字母都大写,多单词下划线连接
例如:MAX_VALUE,PI
三 变量
定义: 内存中的一个存储区域,该区域的数据在同一类型范围不断变换
定义格式: 数据类型 变量名 = 变量值
变量数据类型
1.基本数据类型
- 整型:byte / short / int / long
- 浮点型:float / double
- 字符型:char
- 布尔型:boolean
2.引用数据类型
- 类:class
- 数组:array
- 接口 interface
- 枚举:enum
- 注解:annotation
- 记录: record
备注:与前端一样,数据也分为基本数据类型和引用数据类型,但是不同的是,前端是一门弱类型的语法,只需要大致定义变量var const等,不需要将数据类型定义出来。java是一门强类型的定义变量的语言,定义变量需定义出数据类型
变量注意点
1. 与前端一样,变量也有自己的作用域,出作用域就失效
2. 同一个作用域,不能声明两个同名变量
3. 变量在赋值时,必须满足变量的数据类型和数据类型有效的范围内变化
class Test {public static void main(String[] args) {// 定义变量char gender;// 变量赋值gender = '女';// 定义和赋值变量int age = 18;System.out.println("性别:" + gender);System.out.println("年龄:" + age);}
}
四 数据类型
前置知识 - 计算机存储单位
字节(byte): 是计算机存储容量的基本单位,一个单位为8个bit
位(bit):是数据存储的最小单位,二进制中每个0或1就是一个位,为bit.8个bit就是一个字节
转换关系
- 8bit = 1Byte
- 1024Byte = 1KB
- 1024KB = 1MB
- 1024MB = 1GB
- 1024GB = 1 TB
整型数据类型
类型:byte short int long
不同的整型类型有固定的表数范围和字段长度,如下
注意:
1. 定义long类型的变量,赋值需要以l或L作为后缀
2. java中定义变量通常声明为int,除非较大的数,才使用long
3. java的整型常量默认为int
浮点数据类型
类型:float double
不同的浮点数据类型固定的表数范围和字段长度
浮点型的常量有两种表示范围
- 科学计数法:5.12e2, 512E2, 100E2
- 十进制表示法: 5.12, 512.0f, .512 (必须有小数点)
注意:
1. float:单精度,尾数可以精确到7位有效数字
2. double:双精度,精度是float的两倍
3. 定义float类型,赋值要以f或F结尾
4. java的浮点型常量通常定义为double
5. 并不是所有的小数都可以精确二进制浮点数,二进制浮点数不能精确表示0.1,0.01,0.001这样10的负次幂(和前端一样0.1 + 0.2 != 0.3)
6.float和double均不适合不允许四舍五入的金融计算领域,要精确数字需要使用BigDecimal类
class Test2 {public static void main(String[] args) {float f1 = 1234f;float f2 = f1 + 1;System.out.println(f1);System.out.println(f2);System.out.println(f1 == f2); // false}
}
字符数据类型
char: 通常意义的字符,占2个字节和short(可以简单理解为前端的string类型)
定义字符的3种方式
class Test3 {public static void main(String[] args) {// 第一种 '' 定义单个字符(''中有且只有一个字符)char c1 = 'a';char c2 = '中';char c3 = '1';// 这个1 代码的是ASCII码值,对应的ASCII表示的字符char c4 = 1;// char c1 = '' 错误// 第二种 使用unicode编码char c5 = '\u0023';// 第三种,使用转义字符char c6 = '\n';}
}
布尔数据类型
boolean数据类型是用于判断逻辑的,只有true和false两种值;(和其他语法不同,0和非0都不行)
扩展:java虚拟机中没有提供任何boolean值专用的字节码指令,java语法所表达的boolean值,在编译之后,虚拟机会用int来表示,true为1表示,false用0表示,因此真正内存分配,也是占用4个字节
五 数据类型间的计算
基本数据类型之间的计算
以下都不包含boolean
自动类型提升
数据与数据之间计算,将取值范围小(或容量小)的类型自动提升为取值范围大的(或容量大的)类型
一般来说转换
byte,short,char ---> int ----> long ---->float ---->double
注意: 1 byte,short ,char 进行计算都会是int类型
2. 此时的容量大小,并非指的是占用内存空间,而是代表数据范围大小
class UpVar {public static void main(String[] args) {byte b1 = 10;byte b2 = 12;int i1 = b1 + b2; // 必须用int接收char c1 = 'a';byte b4 = 4;int i2 = c1 + b4; // 必须用int接收long l1 = 123L;long l2 = 123; // 自动类型提升 int-->longfloat f3 = 12.3; // 报错 12.3为double类型,不满足自动提升 }
}
强制类型转换
将取值范围大(或容量大)的类型自动提升变为取值范围小的(或容量小的)类型
注意:
1. 强制类型转换,需要使用强制转换符()
2. 强制类型转换会造成精度丢失
class Compel {public static void main(String[] args) {double d1 = 12.9;int i = (int)d1;int i2 = 128;byte b1 = (byte)i2; // -128}
}
解释案例2 :-128
int 128在数据存储时候为4个字节32位bit -》 0000 0000 0000 0000 0000 0000 1000 0000
截取为bit后精度丢失== 1000 0000 ==》在转换为10进制 -128
其他思考
为什么标识符不能声明为数字开头
如: int 124L = 12; long l = 124L ; 此时124L到底是变量还值会存在歧义
引用数据类型 Sting 类 与 基本数据类型之前的计算
String类,是引用类型也叫字符串(与前端不同,前端的String为基本数据类型)。
String与其他类型(所有基本类型)进行计算,是一种连接运算。
class CompleStr {public static void main(String[] args) {String str = "";String str1 = "aaa";boolean b1 = true;int i1 = 12;String str2 = str + b1;// String str3 = b1 + i1 + str2; // 编译不通过,不能将boolean可以基本数据计算String str4 = "1";// 将其他数据类型转换为StringInteger.parseInt(str4);}
}