关键字:
关键字: Java预定义的单词,简而言之,有特殊含义的单词,能够使得开发工具(notepad++ editplus eclipse)变颜色的单词
关键字的特点:
1.所有字母都是小写组成
2.关键字不能够作为标识符 (接下来讲解标识符的时候讲解)
3.Java一共有50个关键字,注意const goto也是关键字
const goto在Java中没有特殊含义,作为保留使用,但是也是关键字
注意:
1.{} [] () 一定成对编程
2.{} 里面必须缩进
标识符:
标识符: 给Java当中的 包,类,接口,变量,方法,常量等取名字
四大规则,四大规范。
规则:必须准守
1.由字母,数字,下划线_,美元符号$组成
2.不能以数字开头
3.Java对于大小写严格区分
4.不能是Java中的关键字
规范:
1.见名知意
2.不允许使用中文和拼音
3.满足驼峰命名法(待会讲)
4.命名的长度最好不要超过31个字符
注释:
注释: 为程序进行解释说明,不会被JVM执行
注释分类:
1.单行注释
//
2.多行注释
/x x/
3.文档注释(后面在讲解面向对象的时候详细讲解)
/xx x/
注意:
1.注释不能够嵌套
2.注释不要随意的删除
3.养成一个好的习惯,先写注释,再写代码,能够培养一个程序员的逻辑思维,以及代码的可读性
注释的好处:
1.能够提高程序的可读性
2.开发中工作的交接 (文档注释)
3.程序调试 (后期还会使用Debug断点调试)
常量:
为什么需要有常量?
PI 一周有7天 一年多少天
常量: 在程序的执行过程中,其值不会发生改变的量
常量的分类:
整型常量
二进制 由0,1组成,由0b开头 0101010101
八进制 由0~7组成,由0开头
十进制 由0~9组成,默认就是十进制
十六进制 由0~9,A,B,C,D,E,F 组成,由0x开头
小数常量
0.2F float类型的小数常量
0.2D double类型的小数常量
布尔常量
只能取两个值
true false
字符常量
什么是字符?字符的本质是什么?数字 整数
什么是字节?字节本质是什么? 数据传输的最基本单位 数字
a 1 张 换行 制表符 都是字符 65535
字符在计算机中存储本质还是数字
1byte = 8bit
1kb = 1024byte
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
1bit 能够表示多少种状态 2种 0 1
2bit 4 10 01 11 00
3bit 8
8bit 256
16bit 65536
一般2个字节表示一个汉字GBK
1.字符常量由 '' 包裹
2.里面只能够有一个字符
3.转义字符可以由两个字符组成,第一个是\
先记住常见的字符编码:
a 97
A 65
0 48
\t 制表
\n 换行
\r\n 换行
\'
\\
\"
字符串常量
1.由双引号包裹
2.里面可以有一个字符也可以有多个字符
3.字符串里面可以是空串
null常量
表示的是引用类型的常量,会在后面讲解面向对象的时候详细讲解
自定义常量 后面讲解面向对象的时候讲解
注意:
1.System.out.println();输出的都是数值的十进制
2.默认整型常量默认是 int 类型
3.默认小数类型就是 double 类型
4.字符的数量不会超过65535
5.windows系统的换行符是 \r\n \N \R
变量:
变量: 在程序的执行过程当中,其值可以发生改变的量,类似于数学的未知数X
变量的内存分配
int x = 10;
int x; // 1.声明
x = 10; // 2.赋值
System.out.println(x); // 3.使用
变量的定义:
变量的三要素:
1.声明
2.赋值
3.使用
注意:
1.变量一定要先声明再赋值再使用
2.变量不能够重复定义
3.变量不能够连续定义 int a = b = c = 10;
数据类型:
数据类型: Java是一门强语言类型,Java对每一种数据都提供了对应的类型
比如JavaScript就是弱语言类型
int x = 10; double d = 20;
var x = 10; var d = 20.5;
数据类型的分类
八大基本数据类型
整数类型 字节数 取值范围
byte 1 8bit = 256种状态 -128~127
short 2 00000000 00000000 -2^15 ~ 2^15-1
int 4 -2^31 ~ 2^31-1
long 8 -2^63 ~ 2^63-1
浮点类型
float 4 -3.403E38 ~ 3.403E38
double 8 -1.798E308 ~ 1.798E308
注意:
1.虽然小数表示的范围很大,但是不能够完全表示所有的小数,因为存在无限不循环小数
2.同样是8个字节的long和double类型,为什么double取值范围会比long类型多很多? -- 存储方式不一样
3.在处理金融相关的项目的时候,不能使用float和double类型来计算,因为会出现精度丢失,后面学习BigDecimal类可以解决这个问题
字符类型
char 2 0 ~ 65535
布尔类型
boolean 1 true false
引用数据类型 (之后学习面向对象的时候讲解)
类 class
接口 interface
数组 [] int[]
类型转换:
类型转换的依据: 取决于数据的取值范围,而不是字节数
byte -> short -> int -> long -> float -> double
char ->
注意:
1.char和byte/short有交集关系,而没有子集关系
2.其他的都满足子集关系
3.boolean不能参与类型转换
1.自动类型转换
将小类型赋值给大类型,系统会自动将小类型转换成大类型,不会出现任何问题
2.强制类型转换
将大类型赋值给小类型,可能会出现如下问题
格式:强制类型转换格式:目标类型 变量名=(目标类型)(被转换的数据);
a.精度的丢失
b.数据的溢出
3.byte/short特例
4.byte/short 和 char 之间参与转换,都需要强制类型转换
5.表达式类型提升: 类型会自动向高类型转换
6.byte short char 之间参与运算,底层都会转换成int类型来计算
7.boolean类型不能够参与类型转换
8.字符串和任何类型进行加法运算都是拼接操作,在JavaScript中可以进行其他运算
9.变量计算和常量计算问题
a.常量计算,编译器会自动帮我们计算结果
b.变量计算,编译器无法帮我们识别类型和结果
运算符:
运算符: 针对常量和变量之间进行运算的符号
eg: a + 1 a + b a / b a > b
运算符的分类:
算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 三目运算符
算数运算符
+ - * / % ++ --
+在Java当中含义很多
1.作为正数 单目运算符 双目运算符 三目运算符 +5 a + b a ? b : c
2.加法运算
3.字符串连接符
技巧:
1.如何计算中防止精度丢失
2.如何分离中一个数的每一位
1234
分离个位: 1234 / 1 % 10
分离十位: 1234 / 10 % 10
分离百位: 1234 / 100 % 10
分离千位: 1234 / 1000 % 10
自增自减运算符
++ -- 属于单目运算符
++ 表示自增1
-- 表示自减1
分为
单独使用
表示自增或者自减,没有任何区别
参与运算
如果++放在操作数的左边,就表示先自增再参与运算
如果++放在操作数的右边,就表示先参与运算,再自增或者自减1
赋值运算符
= : 这个等于号在Java中表示赋值的意思,真正数学意义上的相等是 ==
扩展赋值运算符:
+= -= *= /= %=
面试题:short s1 = 1;?s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错??
前者编译失败,short和int类型计算结果是int类型,将int类型赋值给short类型,需要强制类型转换
后者编译通过,因为使用扩展赋值运算符系统会自动帮我们强制类型转换
技巧: 如何交换两个数?
int x = 10;
int y = 20;
定义中间变量temp
关系运算符
> < >= <= != ==
关系运算符的结果是boolean类型
逻辑运算符
作用: 连接多个boolean类型的表达式
boolean类型的表达式1 逻辑运算符 boolean类型的表达式2 逻辑运算符 boolean类型的表达式3
& 按位与
| 按位或
^ 异或
&& 短路与
|| 短路或
! 非
与: 有一个为false结果为false
如果都为true结果才为true
或: 有一个为true结果为true
如果两个都为false结果才为false
面试题: & 和 && 的区别
& 表示按位与,无论什么情况都会同时计算运算符两边的表达式
&& 表示短路与, 如果前面的表达式为false,那么无论后面结果如何,都不会去计算后面表达式的值
&&开发中使用,&基本不用
&常用于位运算,位运算的效率比普通运算要高很多
1001 & 0110 = ?
1 0 0 1
& 1 1 1 0
-----------
1 0 0 0
^ : 相同为false,不同为true
1001 & 0110 = ?
1 0 0 1
^ 1 1 1 0
-----------
0 1 1 1
! : 取反
当!的个数是奇数个的时候,结果相反
当!的个数是偶数个的时候,结果不变
条件运算符(三目运算符)
格式: X ? Y : Z
X表达式必须是boolean类型的表达式
执行流程:
首先计算X表达式的结果, 如果X的结果为true, 那么整个表达式的结果就是Y的值
如果X的结果为false,那么整个表达式的结果就是Z的值
关于三目运算符值的类型问题
表达式与运算符的优先级:
表达式: 符合一定语法规则的运算符和操作数的式子
运算符: 算数运算符,赋值运算符,关系运算符,逻辑运算符,位运算符(了解), 三目运算符
操作数: 变量或者常量
a + b a * 6 4 - 3
表达式的分类:
按照复杂程度来分:
简单表达式: 只有一个运算符的表达式 a + b a * 6 4 - 3
复杂表达式: 两个或者两个以上的运算符组成的表达式 (a > b) && (a < b)
如果复杂表达式就必须要知道运算符的优先级
按照运算符两边的操作数来分
单目 双目 三目
按照名称来分
a + b 算数表达式式
表达式的值: 整个表达式的结果
int a = 30; int b = 40; a * b
表达式的值的类型:
int a = 30; int b = 40; a * b
学习复杂表达式:
(a - b) * c - 4
i < 30 && i % 10 != 0
运算符的优先级
1.有括号先计算括号里面的
2.单目运算符 > 双目运算符 > 三目运算符
3.算数运算符(* / % > + -) > 关系运算符(> <... > == !=) > 逻辑运算符(&& > ||) > 条件运算符 > 赋值运算符
4.如果运算符的优先级相同,从左至右即可
5.+ - > ++ -- !
技巧: 如果针对特别复杂的表达式,可以根据运算符的优先级规律,然后使用()改变优先级,提高程序的可读性