#大数据学习笔记第2天# Java语言基础

# 大数据学习笔记第2天-Java语言基础 #
## 大纲 ##
– 关键字
– 标识符
– 常量和变量
– 运算符
– 流程控制
– 方法
– 数组

## 第一节课
– 关键字
– 标识符
– 常量与变量

## 第二节课
– 二进制
– 进制基本转换
– 负数的表现形式

## 第三节课
– 变量
– 基本数据类型

## 第四节课
– 基本数据类型之间的类型转换

## 关键字
Java系统中已经赋予了特殊含义的单词。特点:全部是小写字母。

Java中的保留字:现在暂时没有使用,以后可能会使用的单词,如:goto, const

### 关键字的分类:

– 定义数据类型;
– 定义流程控制;
– 布尔值;
– 引用类型空值;
– 访问权限修饰符;
– 用于定义类、方法、变量修饰符的关键字;
– 用于定义类与类之间关系的关键字;
– 用于定义建立实例及引用实例,判断实例的关键字;
– 用于异常处理的关键字;
– 用于包的关键字;
– 其他修饰关键字;

### 分析例子
Hello.java中用到的关键字:

Select Code
1
2
3
4
5
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,将余数倒排。

十进制转八进制,基数换成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

## 定义变量的注意事项
### 作用域
变量定义在哪个大括号里,它的作用就是所在的大括号,同一个作用域中,不能定义同名的变量(类型不同也不行);

### 初始化值
– 初始化有两种格式,定义时赋值,或先定义后赋值;
– 变量在使用前一定要赋值

### 可读性
一行上最好只定义一个变量(虽然一行上可以定义多个变量,如:int x,y,z;)

## 类型转换
– 类型相同的数才能进行运算。
– 不同类型的数进行运算,首先要进行类型转换,变成相同类型:
– 有的转换时系统自动完成的(自动类型转换/隐式类型转换);
– 有的转换时强制手动完成的(强制类型转换/显式类型转换);
– 什么时候用到强制类型转换(大范围转小范围)

举例:

– 自动类型转换:double d = 1 + 2.5; //整型自动转换为double类型
– 强制类型转换:byte b = (byte)128; //1byte的取值范围是: -128-127

当定义一个字符类型,赋值一个整数,会自动按照ASCII表进行转换:

### 表达式的数据类型自动提升:
– 所有byte, short, char型将提升为int型;
– char型参与运算实际上是对应的Unicode编码值;
– 如果表达式中还有更大表数范围的类型,则继续提升;
– boolean类型不参与数值运算,也不能和其他类型进行转换;

如果遇到:char 和 byte 相加的运算,会全部转换为整型,再进行运算