1. 标识符遵守的规则
1. 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
2. 不能以数字开头,不能是关键字
3. 严格区分大小写
4. 标识符的可以为任意长度
**
2. 标识符命名规范
**
1. 包名
多个单词组成时所有字母小写(例:package com.cn)
2. 类名和接口
多个单词组成时所有单词的首字母大写(例:HelloWorld)
3. 变量名和函数名
多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
4. 常量名
多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE)
注意:只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最好见名知意,提高代码阅读性。
3. 转义字符
\r 表示接受键盘输入,相当于按下回车。
\n 表示换行。
\t 制表符,相当于Table键
\b 退格键,相当于Back Space
\’ 单引号
\’’ 双引号
\\ 表示一个斜跨
4. 变量
概述
变量是用来存储可变数据的容器
特点
引入的实例:
正常情况下牛奶盒装的都是牛奶,而且会根据牛奶的多少去决定要多大的容量的牛奶盒,A和B两位同学同时把牛奶盒放进篮子里面,但是需要区分两个牛奶盒是谁的,都需要在牛奶盒上做一个标志。
此处牛奶盒就是一个变量。所以可以得到一下的特点:
1.变量有大小
2.存储的数据是一定格式的数据
3.变量需要有名字
数据类型(给变量指定数据类型,即给变量指定了大小)
- 整型
byte 代表一个字节的大小 8bit 2(8) -128~127 256
short 代表两个字节的大小 16bit 2(16) -2(15)~2(15)-1
int 代表四个字节的大小 32bit 2(32) -2(31)~2(31)-1
long 代表八个字节的大小 64bit 2(64) -2(63)~2(63)-1
如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。
可以使用数值后面添加L或小写L改变默认的整数类型。 - 浮点型
float 代表四个字节的大小 32bit
double 代表八个字节的大小 64bit
java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。 - 字符型
char 代表两个字节的大小 16bit 2(16)
原理:将字符映射为码表中对应的十进制数据加以存储。 - 布尔型
boolean 占一个字节。只有true与false两个值。
- 整型
声明变量
格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,; 案例: int i 声明了一个整形的变量。 double d 声明了一个double数据类型的变量 float f 声明了一个float数据类型的变量。
初始化变量(即给变量赋值)
初始化方式1: 数据类型 变量名字 = 数值。 初始化方式2: 数据类型 变量名字 , 变量名字 = 数值。 案例: 方式1: double d = 3.14; 方式2: double d ; d = 3.14 ;
5. 数据类型的转换
自动类型转换(也叫隐式类型转换)
需要满足以下条件才能进行自动转换 1.第一两种类型彼此兼容 2.目标类型取值范围必须大于源类型 Java内部其实做的工作就是自动将数值进行了类型提升 例如:可以将一个数赋值给更大数值范围的变量,可以将int变量赋值给long变量。
强制类型转换(也叫显式类型转换)
当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int) 无法自动转换,此时就需要进行强制类型转换。 案例: byte b = 100; b = b + 2; System.out.println(b) 解析:b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为 了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。 更正: byte b=100; b=(byte)(b+2); 注意: 强制类型转换会损失精度!!!(把大碗的酒倒入小碗里面总会出现点小问题) 所以问:什么时候进行强制类型转换呢? 答:比如小数部分只想保留整数部分.一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.
public static void main(String[] args) {
byte b = 100;
b = (byte) (b + 2);
System.out.println(b); // 102
//舍弃小数部分
double d=5.5;
int num=(int)d;
}
思考1
byte b=126;
问:
既然数据默认的有数据类型,那么126 默认是int类型的,为什么存储到byte类型时不会报错呢。
答:
126 是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。
思考2:
问:
byte b=128;能否正常的编译和运行。类型转换后运行的结果又是什么?为什么是这个结果?
答:
该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。运行结果是-128
因为int是4个字节,byte是一个字节。
思考3
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
问:
哪一句编译失败?为什么?
答:
b =3+4 可以, 3和4都是常量,所以java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。例如b=128+1 就无法编译通过。b=127+1;也是无法通过。
b =b1+b2 不可以,因为b1 和b2 是变量,表达式求值时,变量值会自动提升为int型,表达式结果也就成了int型,这是要赋值给byte型的b,必须进行强制类型转换了。
思考:1.System.out.println(‘a’+1)的结果?
2.
int i='a'+'b';
System.out.println(i);//结果?
System.out.println("hello"+'j'); //结果?
总结:
所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。
6. 负数的存储过程
1.先取负数的绝对值,求出绝对值的二进制的二进制(原码)
2.原码取反得到反码
3.反码+1得到补码
以-7为例