Java - 基础语法
一、注释
- 单行注释:以
//
开头,以换行
结束
1 | // 注释内容 |
- 多行注释:以
/*
开头,以*/
结束
1 | /* |
文档注释:以
/**
开头,以*/
结束,Java特有的注释@author
标明开发该类模块的作者,多个作者之间使用,
分割@version
标明该类模块的版本@see
参考转向,也就是相关主题@since
从哪个版本开始增加的- 只用于方法的注释:
@param 形参名 形参类型 形参说明
对方法中某参数的说明,可并列多个@return 返回值类型 返回值说明
对方法返回值的说明@exception 异常类型 异常说明
/@throws 异常类型 异常说明
对方法可能抛出的异常进行说明,可并列多个
- 使用javadoc工具可以基于文档注释生成API文档:
javadoc [options] [packagenames] [sourcefiles] [@files]
(例:javadoc -author -d doc Comments.java
)
- 使用javadoc工具可以基于文档注释生成API文档:
1 | /** |
二、关键字
- 关键字:Java已经定义好的单词,具有特殊含义
- 关键字全部都是小写字母
- 关键字一共50个,其中
const
和goto
是保留字
三、标识符
- 标识符:给类、变量、方法、包等命名的字符序列
1、标识符的命名规则
(1)Java的标识符只能使用26个英文字母大小写
,0-9
的数字,下划线_
,美元符号$
(2)不能使用Java的关键字(包含保留字)和特殊值
(3)数字不能开头
(4)不能包含空格
(5)严格区分大小写
2、标识符的命名规范
(1)见名知意
(2)类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz
(3)变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz
(4)包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz
(5)常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ
四、数据类型
基本数据类型:包括
整数
、浮点数
、字符
、布尔
- float:单精度浮点型,精度:科学记数法的小数点后6~7位
- double:双精度浮点型,精度:科学记数法的小数点后15~16位
- 引用数据类型:包括
数组
、类
、接口
、枚举
、注解
五、常量值
- 常量值:在程序执行的过程中,其值不可以发生改变
Java中的输入的整数常量值默认为int类型,浮点常量值默认为double类型
类型 | 规则 | 举例 |
---|---|---|
整数常量值 | 要表示long类型,必须加L 或l |
12,-23, 1567844444557L |
浮点常量值 | 要表示float类型,必须加F 或f |
12.34F,12.34 |
字符常量值 | 必须使用单引号,单引号中有且只能有一个字符 | ‘a’,’0’,’尚’ |
布尔常量值 | true 或者false |
true,false |
字符串常量值 | 必须使用双引号,双引号中可以没有其他字符,表示空字符串 | “HelloWorld” |
六、变量
变量:在程序执行的过程中,其值可以发生改变的量
变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的
变量的声明格式:
数据类型 变量名;
,变量的数据类型可以是基本数据类型,也可以是引用数据类型变量的赋值:
变量名 = 值;
,给变量赋的值类型必须与变量声明的类型一致或兼容变量的三要素
- 数据类型
- 决定在内存中开辟多大空间
- 决定该变量可以存什么值
- 变量名:见名知意非常重要
- 值
- 基本数据类型的变量:存储数据值
- 引用数据类型的变量:存储地址值,即对象的首地址(例:String类型)
使用变量的注意事项
- 先声明后使用
- 在使用之前必须初始化
- 变量有作用域,且在同一个作用域中不能重名
- 变量值的类型必须与变量声明的类型一致或兼容
七、最终变量/常量
- 最终变量:不能修改值的变量,格式:
final 数据类型 变量名;
- 最终变量名通常称为常量名
八、基本数据类型转换
Java语言所提供的七种数值类型之间可以相互转换(boolean类型不参与)
1、自动类型转换(隐式类型转换)
自动类型转换:将
取值范围小的类型
自动提升为取值范围大的类型
- 当把存储范围小的值赋值给存储范围大的变量时,会自动转换为存储范围大的类型
- 当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算
- 当
byte
,short
,char
数据类型进行算术运算时,会按照int类型处理
- 当
2、强制类型转换(显示类型转换)
强制转换格式:
数据类型 变量名 = (数据类型)被强转数据值;
- 当把存储范围大的值赋值给存储范围小的变量时,需要强制类型转换(有风险,可能会损失精度或溢出)
- 当某个值想要提升数据类型时,也可以使用强制类型转换
3、基本数据类型与字符串类型的转换
1、任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
2、String类型不能通过强制类型转换为其他的类型
九、运算符
在Java中,一共有38个运算符
运算符的分类
- 按照功能分
分类 | 运算符 |
---|---|
算术运算符(7个) | +、-、*、/、%、++、– |
赋值运算符(12个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等 |
关系运算符(6个) | >、>=、<、<=、==、!= |
逻辑运算符(6个) | &、|、^、!、&&、|| |
条件运算符(2个) | (条件表达式)?结果1:结果2 |
位运算符(7个) | &、|、^、~、<<、>>、>>> |
Lambda运算符(1个) | -> |
- 按照操作数个数分
分类 | 运算符 |
---|---|
一元运算符(单目运算符) | 正号(+)、负号(-)、++、–、!、~ |
二元运算符(双目运算符) | 除了一元和三元运算符剩下的都是二元运算符 |
三元运算符 (三目运算符) | (条件表达式)?结果1:结果2 |
1、算术运算符
算术运算符 | 符号解释 |
---|---|
+ |
加法运算,正号,字符串连接运算 |
- |
减法运算,负号 |
* |
乘法运算 |
/ |
除法运算(整数/整数结果为整数) |
% |
求余运算(余数的符号只看被除数) |
++``-- |
自增自减运算++变量 :先自身加1,然后再参与运算变量++ :先参与运算,然后自身加1 |
1 | public class OperatorDemo03 { |
2、关系运算符/比较运算符
比较运算符:两个数据之间进行比较的运算,运算结果一定是boolean值
>
,<
,>=
,<=
不支持boolean
,String
类型!=
、==
不建议用于引用数据类型
关系运算符 | 符号解释 |
---|---|
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
== |
等于 |
!= |
不等于 |
3、逻辑运算符
- 逻辑运算符:用来连接两个布尔类型值的运算符(
!
除外),运算结果也是boolean值
逻辑运算符 | 符号解释 | 符号特点 |
---|---|---|
& |
逻辑与 | 有false 则false |
` | ` | 逻辑或 |
^ |
逻辑异或 | 相同为false ,不同为true |
! |
非 | 非false 则true ,非true 则false |
&& |
双与/短路与 | 左边为false ,则右边就不看 |
` | ` |
&&
、||
比&
、|
效率高
4、条件运算符
条件运算符格式:
条件表达式 ? 结果1 : 结果2
条件运算符计算方式:
- 若条件判断的结果为
true
,则取结果1 - 若条件判断的结果为
false
,则取结果2
- 若条件判断的结果为
5、位运算符
位运算符的运算过程都是基于补码运算,结果需要转换为原码,再转换为十进制
byte
,short
,char
在计算时按照int
类型处理
位运算符 | 符号解释 |
---|---|
& |
按位与(当两位均为1时才返回1) |
` | ` |
~ |
按位非(将操作数包含符号位的每一位全部取反) |
^ |
按位异或(当两位相同时返回0,不同时返回1) |
<< |
左移运算符 |
>> |
右移运算符 |
>>> |
无符号右移运算符,空位补0 |
6、赋值运算符
- 扩展赋值运算符在将最后的结果赋值给左边的变量前,多做了一步强制类型转换
运算符 | 符号解释 |
---|---|
= | 将右边的常量值/变量值/表达式的值,赋值给左边的变量 |
+= | 将左边变量的值和右边的常量值/变量值/表达式的值进行相加,最后将结果赋值给左边的变量 |
-= | 将左边变量的值和右边的常量值/变量值/表达式的值进行相减,最后将结果赋值给左边的变量 |
*= | 将左边变量的值和右边的常量值/变量值/表达式的值进行相乘,最后将结果赋值给左边的变量 |
/= | 将左边变量的值和右边的常量值/变量值/表达式的值进行相除,最后将结果赋值给左边的变量 |
%= | 将左边变量的值和右边的常量值/变量值/表达式的值进行相模,最后将结果赋值给左边的变量 |
<<= | 将左边变量的值左移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量 |
>>= | 将左边变量的值右移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量 |
>>>= | 将左边变量的值无符号右移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量 |
&= | 将左边变量的值和右边的常量值/变量值/表达式的值进行按位与,最后将结果赋值给左边的变量 |
|= | 将左边变量的值和右边的常量值/变量值/表达式的值进行按位或,最后将结果赋值给左边的变量 |
^= | 将左边变量的值和右边的常量值/变量值/表达式的值进行按位异或,最后将结果赋值给左边的变量 |
7、运算符优先级
单目运算排第一;
乘除余二加减三;
移位四,关系五;
等和不等排第六;
位与、异或和位或;
短路与和短路或;
依次从七到十一;
条件排在第十二;
赋值一定是最后;
十、不同数据类型表示原理
1、布尔类型
- true:底层使用1表示
- false:底层使用0表示
2、整型
使用补码形式存储,最高位是符号位(1代表负数,0代表正数)
- 正整数:三码合一(补码、反码、原码都一样)
- 负整数:
- 原码:十进制转为二进制,最高位设置为1
- 反码:在原码的基础上,最高位不变,其余位取反
- 补码:反码+1
3、小数
把小数转为二进制,然后把二进制表示为科学记数法
- ①符号位
- ②指数位(需要移位)
- ③尾数位
4、字符
- 每一个字符对应一个唯一的Unicode编码值(0~65535)
- 在JVM内存中,一个字符占2个字节