1.Java基础语法
1.概述
1.1 大数据
- 海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集合
- 大数据=海量数据+复杂类型
1.2 特征
1.3 应用
数据采集-数据存储-数据清洗-数据分析-数据可视化》》》》记录-描述-预测
2.Java
2.1 发展历程
- Sun Microsystems于1995年推出
- 1996年发布JDK1.0
- 1999年发布J2SE、J2EE、J2ME
- 2005年更名为Java SE、Java EE、Java ME
- 2009年被Oracle收购
- 2014年发布Java8.0
2.2 特点
- 面向对象:使用计算机模拟现实世界、解决现实问题
- 简单:不易造成内存溢出,减少代码量,代码可读性强 (相较于C、C++、C#)
- ★跨平台:跨系统、服务器
2.3 执行机制
*.java →(编译)→ .class →(运行)→ JVM for Windows/Linux/MacOS/Others
- 将源文件编译成字节码文件(平台中立文件、.class),再将字节码进行解释执行
2.4 相关名词
- JDK(Java Development Kit)开发环境:包含JRE、类库、开发工具包
- JRE(Java Runtime Enviroment)运行环境:包含JVM和解释器,完整的Java运行环境
- JVM(Java Virtual Machine)虚拟机:在不同系统中模拟相同环境
2.5 环境搭建
2.6 第一个Java程序
源文件:
class First{
public static void main(String[] args){
System.out.println("HelloWord!");
}
}
↓
编译:javac First.java
↓
运行:java First
↓
结果:Hello, world
2.7 开发软件
- IDEA Version2019.3
3.进制
3.1 概念
- 进位计数制,是一种计数方法
3.2 分类
- 二进制:用数字0和1表示所有自然数,逢2进1,用“0b”开头
- 十进制:用数字0~9表示所有自然数,逢10进1
- 八进制:用数字0~7表示所有自然数,逢8进1,用“0”开头
- 十六进制:用数字09和字母af表示所有自然数,逢16进1,用“0x”开头
3.3 转换★
-
十进制数字转成其他进制:辗转相除法
-
其他进制转成十进制:累加法
例:0b10010 = 1*2^4 + 1*2^1 = 18 022 = 2*8^1 + 2*8^0 = 18
-
A进制转成B进制:先将A进制转成十进制,让后将十进制转成B进制
-
二进制与八进制、十六进制相互转换:
1个八进制位可等价替换成3个二进制位
例:0b001 101 010 101 110 010 = 0152562
1个十六进制位可等价替换成4个二进制位
例:0b0011 1010 0101 1101 1100 1110 1010 = 0x3A5DCEA
3.4 常用表
| 二进制 | 八进制 | 十进制 | 十六进制 |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 10 | 2 | 2 | 2 |
| 11 | 3 | 3 | 3 |
| 100 | 4 | 4 | 4 |
| 101 | 5 | 5 | 5 |
| 110 | 6 | 6 | 6 |
| 111 | 7 | 7 | 7 |
| 1000 | 10 | 8 | 8 |
| 1001 | 11 | 9 | 9 |
| 1010 | 12 | 10 | a |
| 1011 | 13 | 11 | b |
| 1100 | 14 | 12 | c |
| 1101 | 15 | 13 | d |
| 1110 | 16 | 14 | e |
| 1111 | 17 | 15 | f |
| 10000 | 20 | 16 | 10 |
3.5 数据存储
-
bit(位)->byte(字节)->Kb->Mb->Gb->Tb->Pb->Eb->Zb->……
-
1 btye=8 bit 1Kb=1024byte
-
负数的表示:第一位是符号位
-100 = 0b1110 0100
200 = 0b0000 0000 1100 1000;
0b1100 1000表示200,但是在计算机中存的是 - 0b100 1000
-
在用二进制表示数字时,通常会写满1个字节(8位,00000001);如果1个字节表示不了,使用2个字节
-
注意:对于大于127的正数,其二进制表示的第8位是1,但其符号位应是0,这表示1个字节已经无法表示该数字,故应用2个字节
15 = 0b0000 1111
128 = 0b0000 0000 1000 0000
3.6 原反补★
- 计算机使用二进制存储、计算数字时,因为符号位的存在,直接计算会出现错误。为了规避符号位对计算产生的影响,人们发明了补码
- 所有的二进制数字在计算机中存储和计算时均用补码
- 浮点型底层存储采用科学计数法 3.14 => 31410^-2 开辟两个空间,一个存整数部分,一个存次幂部分
- 对于正数而言,原码、反码、补码相同
- 对于负数而言,反码的符号位不变、其他位取反(包括扩展的0);补码是反码+1
26 = 16 + 8 + 2 => 0000 1010 ;原反补相同
-26 = -(16 + 8 + 2) => [原]1000 1010 =>[反]1111 0101 => [补]1111 0110
-200 = -(128 + 64 + 8) => [原]1000 0000 1100 1000=> [反]1111 1111 0011 0111 => [补]1111 111 0011 1000
- 计算机中的加、减法计算方法
8 + 4 = 0000 1000 + 0000 0100 = 0000 1100 = 12
8 - 4 = 0000 1000 + 1111 1100 = 1 0000 0100 == 0000 0100 = 4 //出现溢出,溢出位不要!
4 - 8 = 0000 0100 + 1111 1000 = 1111 1100 ==> [原]1000 0100 => -4 //补码以1开头,说明是负数
- 由补码求原码:补码的补码是原码(补码求反再加1)
- 注意:
1111 1111 => 1000 0001 => -1
1111 1110 => 1000 0010 => -2
1111 1101 => 1000 0011 => -3
...
1000 0001 => 1111 1111 => -127
1000 0000 => 0000 0000 => -0 => 约定表示-128
- 区分清楚是现实中的二进制表示,还是在计算机中的存储!
4.编码规范
4.1 注释
-
对某一段代码的批注,不是给用户看的而是给程序员看的
-
单行注释:只对一行的内容生效,在这一行最前方加“//”
-
多行注释:对某一段内容生效,以“/”开头,以“/”结束
-
文档注释:常作用于类前、方法前,表示对类、方法的描述,以“/**”开头,以"*/"结束
5.基础语法
5.1 基本数据类型
-
8位存储的最大数字 0b0111 1111 = 127
-
整形取值范围:-2的(位数-1)次幂 到 2的(位数-1)次幂-1
-
ASCII码
5.2 标识符
5.2.1 概念
- 由字母、数字、下划线和$组成的一个有序的字符序列,用来表示程序中的一个数据
5.2.2 命名规范
-
不能以数字开头、不能与系统关键字和保留字重名、在Java中标识符区分大小写
-
望文知意
-
驼峰(camel)命名法:首单词除外,其余单词首字母大写
-
类名、文件名采用大驼峰命名法/Pascal法
-
禁止使用拼音、一般不用$
5.3 变量、常量
扩展:
1.内存是瞬时状态下的存储空间,造价高、设计难
2.Java虚拟机(Java程序)默认分配到的物理内存是电脑内存的1/8
| 类型 | 关键字 | 大小 | 取值范围 | 取值范围 | ||
|---|---|---|---|---|---|---|
| 字节型 | byte | 1字节 | 二进制 | [-27,27-1] | 十进制 | [-128,127] |
| 短整型 | short | 2字节 | [-215,215-1] | [-32768,32767] | ||
| 整型 | int | 4字节 | [-231,231-1] | 十亿级别 | ||
| 长整型 | long | 8字节 | [-263,263-1] | |||
| 单精度浮点型 | float | 4字节 | ||||
| 双精度浮点型 | double | 8字节 | ||||
| 布尔 | boolean | 1字节 | true | false | ||
| 字符 | char | 2字节 | Unicode码 | 0~65535 |
5.3.1 概念
- 计算机内存中的一块存储空间,是存储数据的基本单元。
5.3.2 定义语法
- 变量 int a,b;
- 常量 final int a = 10;
5.4 不同数据类型的变量的定义及使用★
5.4.1 整型
- 赋值时要考虑该类型的取值范围,整型字面量最大能到2^31-1;
- 如果需要写更大的数字(即用long型),需在后面加“L”
5.4.2 浮点型
- 给float变量赋值时,需要在字面量最后加“f”或“F”
- 小数字面量默认的类型是double
- 可用科学计数法给浮点型数据赋值
5.4.3 布尔型
5.4.4 字符型
- 字符需要写在单引号内,且单引号内有且只能有一个字符
5.4.5 字符串
- 字符串需要写在双引号内,双引号内字符数量不限
5.5 引用数据类型
- 字符串:String--" 任意字符 "
- 数组
- 类
5.6 转义字符
5.6.1 语法
- “ \ ”
5.6.2 用法
- 配合某些具有特殊含义的字符使用,使其没有特殊含义,变成一个普通字符
- 配合某些普通字符使用,使其具有特殊含义;
如: \n:换行符 \r:回车符 \t:制表符 \d:退格符
5.7 数据类型转换★
5.7.1 概念
- 定义一个不同类型的新变量,然后将原变量赋值给该变量
5.7.2 分类
-
自动类型转换:取值范围小的数据类型转型为取值范围打的数据类型
-
强制类型转换:取值范围⼤的数据类型向取值范围小的数据类型转型
整型转成字符:char c = (char)num;
整型转成字符串:String s = num + "";
5.8 自动类型提升
5.8.1 定义
- 使用运算符连接的变量或字面值,并可以得到一个最终结果的语句成为表达式
5.8.2 规则
- 两个操作数有一个为double时,结果提升为double;
- 如果操作数中没有double,但有一个float,结果提升为float;
- 如果操作数中没有float,但有一个long,结果提升为long;
- 如果操作数中没有long,但有一个int,结果提升为int;
- 如果操作数中没有int,均为short、byte、char,结果提升为int;
5.8.3 注意
- 任何类型与String相加(+)时,实为拼接,结果提升为String;
5.8.4 运算符与拼接的优先级
- “数字+数字+字符串”,运算顺序从左到右,第一个+表示加法运算,第二个+表示拼接;
- “字符串+数字+数字”,此时俩个+均表示拼接
- float、double、long、int与char相加,等价于与char对应Unicode码相加,结果的类型取决于与char相加的变量的类型
5.9 运算符
| 操作符 | 描述 | 操作符 | 描述 | ||
|---|---|---|---|---|---|
| 算数 | + | 赋值 | = | 直接赋值 | |
| 运算符 | - | 运算符 | += | 求和赋值 | |
| * | -+ | 求差赋值 | |||
| / | *= | 求积赋值 | |||
| % | 模 | /+ | 求商赋值 | ||
| ++ | 递增+1 | %= | 求余赋值 | ||
| -- | 递减-1 | 逻辑 | & | 与 | |
| 关系 | >= | 运算符 | | | 或 | |
| 运算符 | <= | ! | 非 | ||
| == | ^ | 异或 | |||
| != | |||||
| 三目运算符 | ? 1:2 | true时 | 结果1 | false时 | 结果2 |
5.9.1 基本介绍
-
算数运算符:
-
整型和整型的计算结果还是整型;对于除法,只保留整数部分
-
★★自增、自减
++a表示先进行加1运算,然后再使用这个值;++a的优先级最高
a++表示先取a的值,运用到别的函数中,再对a进行加1运算;a++的优先级最低
-
加号的特殊用法:字符串的拼接算数的顺序是从左到右,故当有3个及以上“+”时,字符串后面出现的“+”均变成“拼接”
-
-
赋值运算符:是有运算结果的,赋值运算的结果是赋值完成后这个变量的值
-
逻辑运算符:
- 参与运算的一定是boolean型变量
- &&:短路与操作,运算结果与&完全相同;
- ||:短路或操作,运算结果与|完全相同
- 短路操作:如果逻辑运算符的前半部分已经可以决定整体的结果,则此时右半部分将不参与运算
- ^ :异或,同为true时结果为fales
-
位运算符:
- 概念:将两个整型数字分别求出补码,将补码中的每一位进行类似与逻辑预算的操作;1相当于true,0相当于false
- x&y:位与
- x|y:位或
- x^y:位异或
- ~y:按位取反
-
位移(移位)运算符:
-
<<:将补码中的每一位依次向左移动指定位数;在最右侧位补0,左侧溢出位直接删除;每向左移动一位,都相当于这个数字*2
System.out.println(10 << 2); //10:0000 1010 -- 0010 1000 :48 -
>>:将补码中的每一位依次向左移动指定位数;在最左侧位补符号位,;每向右移动一位,都相当于这个数字除2,但这里遵循“向下取整”
System.out.println(10 >> 2); //10:0000 1010 -- 0000 0010 :2 System.out.println(-9 >> 2); //移符号位、向下取整 -
>>>:无符号位右移;将补码中的每一位依次向左移动指定位数;在最左侧位补0
-
-
三目运算符:布尔表达式? 结果1 : 结果2;true时输出结果1,false时输出结果2
char c = c1 > cs ? c1 : c2; //c1 > c2 ? c = c1 : c = c2; 报错!
5.9.2 运算符的分类
- 一元运算符:++ -- ! ~ + -
- 二元运算符:+ - * / % > < <= >= ...
- 三元运算符:三目运算符
5.9.3 运算符的优先级(priority of operations)
- 一元运算符 > 二元运算符 > 三元运算符 > 赋值运算符
- 算术运算符:乘、除、模 > 加、减
- 逻辑运算符:非 > 与 > 或、异或
- 赋值运算符:优先级最低;只有当等号后侧所有逻辑都执行完了,才会给变量赋值
- 括号:优先级最高
5.10 控制台输入
5.10.1 Scanner包
- 控制台输入,其实是将输入的内容放在了一个“缓冲区”,使用方法读取输入内容的时候,其实是从“缓冲区”读取的
- 读取表示调走,即调用并将该内容从“缓冲区”删除
- nextLine():从缓冲区中读取一行数据,读取到换行符时结束,包括换行符
- next():从缓冲区中读取一个单词字符串,读取到换行符或者空格时结束,包括换行符和空格
- nextInt()、nextDouble()、nextFloat()...:使用next()方法,将从缓冲区中读取的一个单词字符串
“缓冲区”实质上是IO流,之后会讲
5.11 局部变量
5.11.1 概念
-
定义在某个方法或者某一个代码段中的变量
全局变量:定义在某个类中,与方法平级的变量
5.11.2 作用域
- 从声明行开始,到声明所在的代码段(大括号)结束
5.11.3 使用方式
- 每个局部变量必须赋值,否则无法调用
- 每个局部变量都有自己的作用域(即该局部变量的作用范围),在该范围内,可以使用这个变量,且不许再出现同名的变量

浙公网安备 33010602011771号