# 大数据学习笔记第2天-Java语言基础 #
## 大纲 ##
- 关键字
- 标识符
- 常量和变量
- 运算符
- 流程控制
- 方法
- 数组
## 第一节课
- 关键字
- 标识符
- 常量与变量
## 第二节课
- 二进制
- 进制基本转换
- 负数的表现形式
## 第三节课
- 变量
- 基本数据类型
## 第四节课
- 基本数据类型之间的类型转换
## 关键字
Java系统中已经赋予了特殊含义的单词。特点:全部是小写字母。
Java中的保留字:现在暂时没有使用,以后可能会使用的单词,如:goto, const
### 关键字的分类:
- 定义数据类型;
- 定义流程控制;
- 布尔值;
- 引用类型空值;
- 访问权限修饰符;
- 用于定义类、方法、变量修饰符的关键字;
- 用于定义类与类之间关系的关键字;
- 用于定义建立实例及引用实例,判断实例的关键字;
- 用于异常处理的关键字;
- 用于包的关键字;
- 其他修饰关键字;
### 分析例子
Hello.java中用到的关键字:
public class Hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
关键字分析:
- public: 权限修饰符,说明该类是公共的;
- static: 静态类;
- class: 用于定义类
- void: 该方法返回空值;
## 标识符
用于给方法、变量、类、接口等命名的字符序列;
组成规则:
- 由26个英文字母大小写、$、下划线、数字组成;
- 不能以数字开头;
- 不可以使用关键字,但可以包含关键字;
Java中严格区分大小写,比如:main和Main是2个不同的方法;
### 标识符的命名规范
Java中的名称规范:
- 包名:多单词组成时,所有单词小写
- 类名、接口名:多单词组成时,所有单词首字母大写
- 变量名、方法名:多单词组成时,第一个单词的首字母小写,第二个单词开始每个单词的首字母大写
- final变量名:所有的字母大写,多单词时单词之间使用下划线分隔
- 在命名时,为了提高代码的可阅读性,需要做到见名知意;
## 常量与变量
常量表示不能改变的值;
Java中常量(6种字面量常量)的分类:
- 整型常量:直接出现的整数
- 小数常量:直接出现的小数
- 布尔值常量:只有2个值true或false
- 字符常量:用单引号括起来的,1个数字,1个字母或符号
- 字符串常量:将1个或多个字符用双引号括起来
- null常量:只有一个值 null
对于整数,有4种表现形式:
- 二进制:由0,1组成,满2进1,用`0b/0B`开头表示(大小写一样)
- 八进制:由0,7组成,满8进1,用`0`开头表示
- 十进制:由0,9组成,满10进1
- 十六进制:由0-9,A-F组成,满16进1,用`ox/0X`表示(大小写一样)
计算机底层是二进制存储数据的;
## 二进制
- 每个位只能表示 0 和 1 两种状态。
- 多个位组合起来可以表示更多的状态
## 十进制转二进制、八进制、十六进制
计算机以`8bit`作为存储数据的基本单位。 `1byte = 8bit`,1个字节等于8个比特。
- 1byte=8bit
- 1kb=1024byte
- 1M=1024kb
- 1G=1024M
- 1T=1024G
- 1P=1024T
- 1E=1024P
### 实现原理:
- 八进制:把二进制数三位一组,计算出对应的十进制数,组合起来就是对应的八进制数。
- 十六进制:把二进制数四位一组,计算出对应的十进制数,组合起来就是对应的十六进制数。
### 如何从十进制转化为二进制?
除以2,直到商为0,将余数倒排。
![](./img/02/8bit.jpg)
十进制转八进制,基数换成8;十进制转十六进制,基数换成16。注意:0-9只能表示最多10个数字,所以A:10, B:11, C:12, D:13, E:14, F:15, G:16。
## 二进制、八进制、十六进制转十进制
### 从二进制转十进制
位权展开法,每位上的数字x进制数的n次幂(从右往左,从0开始)求和。
### 从二进制转八进制
每三位为一组,最后组合成的就是八进制
### 从二进制转十六进制
每四位为一组,最后组合成的就是十六进制
了解:遵守 8421 法则。
## 负数的表现形式
- 补码:负数在计算机中都是以补码的形式存在的。最高位表示符号位:0正数、1负数。负数补码是对其原码取反加1,不包含符号位。
- 正数:原码,反码,补码(二进制)都相通。
### 求一个负数的补码
1. 求对应正数的原码
2. 把正数的原码符号位变1(负数的原码)
3. 把负数的原码除了符号位之外,取反(负数的反码)
4. 在反码基础上+1(负数的补码)
### 磨刀小试:-7的二进制
数字7,使用8421法则,是1+2+4,所以:7转化为二进制是 0000 0111
0000 0111 // 7转化为2进制
1000 0111 // 符号位变为1,表示是负数,得到负数的原码
1111 1000 // 将负数的原码,除了符号位进行取反,得到反码
1111 1001 // 将反码加1,最终得到负数的二进制
### 总结:快速求一个负数的补码规律
+7 0000 0111
-7 1111 1001
从右往左,遇到第1个1,往右原样,往左全取反。
## 变量
- 内存就是程序运行的地方,存放着数据和指令。
- 不同的数据存储在不同的空间,互不影响。
- 内存空间使用之前,必须先申请。
### 变量的概念:
- 内存中的一块存储区域。
- 该区域有自己的名称(变量名)和类型(数据类型)。
### 为什么要定义变量
就是为了使用内存空间。
### 变量的三个要素
- 类型(数据类型:能存放的数据类型)
- 变量(标识符:通过标识符可以访问内存空间里的值)
- 值(存储的内容)
### 定义变量的格式
- 数据类型 变量名=初始值;
- 数据类型 变量名; 变量名=初始值;
## 基本数据类型(四类八种)
整数默认是:int;小数默认是:double;字符串是String类(是引用数据类型)
- 数值型
- 整数类型:byte, short, int, long
- 浮点类型:float, double
- 字符型:char
- 布尔型:boolean
![](./img/02/2018-07-15_114638.png)
## 定义变量的注意事项
### 作用域
变量定义在哪个大括号里,它的作用就是所在的大括号,同一个作用域中,不能定义同名的变量(类型不同也不行);
### 初始化值
- 初始化有两种格式,定义时赋值,或先定义后赋值;
- 变量在使用前一定要赋值
### 可读性
一行上最好只定义一个变量(虽然一行上可以定义多个变量,如:int x,y,z;)
## 类型转换
- 类型相同的数才能进行运算。
- 不同类型的数进行运算,首先要进行类型转换,变成相同类型:
- 有的转换时系统自动完成的(自动类型转换/隐式类型转换);
- 有的转换时强制手动完成的(强制类型转换/显式类型转换);
- 什么时候用到强制类型转换(大范围转小范围)
举例:
- 自动类型转换:double d = 1 + 2.5; //整型自动转换为double类型
- 强制类型转换:byte b = (byte)128; //1byte的取值范围是: -128-127
当定义一个字符类型,赋值一个整数,会自动按照ASCII表进行转换:
![](./img/02/ASCII.jpg)
### 表达式的数据类型自动提升:
- 所有byte, short, char型将提升为int型;
- char型参与运算实际上是对应的Unicode编码值;
- 如果表达式中还有更大表数范围的类型,则继续提升;
- boolean类型不参与数值运算,也不能和其他类型进行转换;
![](./imgg/02/2018-07-15_120838.png)
如果遇到:char 和 byte 相加的运算,会全部转换为整型,再进行运算