【Java基础学习笔记】3 - Java基础语法(命名规约,变量定义机制,基本数据类型,常量,运算符,流程控制)
1.命名规则
在Java语法中,命名规则有三点:
- 不允许和关键字重复
- 符号只允许
下划线_
和美元符$
- 不允许以数字开头
Java中的保留字如下:
其中需要注意的有:
-
true
、flase
、null
这三个关键字都是小写,而在C/C++中是大写; - 没有
sizeof
运算符; -
goto
和const
在java中虽然保留,但没有意义;
除了Java中规定的语法之外,根据《阿里巴巴Java开发手册》,有以下规约:
- 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束;
- 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式;
- 类名使用 UpperCamelCase 风格,必须遵从驼峰形式;
- 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从
驼峰形式。 - 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
2.基本数据类型
-
整型
- Java中所有的整型都是有符号整型,不存在无符号整型;
- byte是8位,short是16位,int是32位,long是64位;
-
浮点型
- float为32位(单精度), double为64位(双精度);
-
字符型
- Java中的char是两个字节的16位无符号型数据,注意和C/C++区别;
- Java对应使用unicode编码字符集(双字节编码);
-
逻辑类型
- Java中的boolean占用一个字节8位;
- Java中的逻辑变量是
true
和false
;
Java所有数据类型的长度和表示是固定的,与平台无关,不是像在C/C++语言中那样数据类型的长度根据不同的平台而变化。
3.常量(重点)
Java中定义变量的语法和C语言相同,但定义的机制和C语言有所差别,比如同样定义一个变量a并赋初值:
int a = 123;
- 在C语言中,123这个数(常量)被直接赋给我们定义的整型变量a;
- 在Java语言中,123这个数先根据默认数据类型(int)保存,然后再赋给我们定义的整型变量a;
由于Java中这个机制,把握住一个常量的数据类型就非常重要,接下来慢慢体会。
3.1.整型常量
整型常量默认是int类型,如果数字过大,需要在末尾加L
表示long类型。
比如:
long i = 123456789123456789;
编译后报错:
这个例子很好的说明了这个机制:
既然变量i已经定义为long类型,为什么还会报错提示整数太大呢?
因为Java的变量定义机制,123456789123456789
这个常量默认保存为int类型,但是int类型只有4个字节,显然会发生整数太大的错误,在常量末尾后面加上L即可,表明这是个long类型数据:
long i = 123456789123456789L;
3.2.浮点型常量
浮点型常量默认是double类型,如果将double类型常量赋给float类型变量,编译会出错,所以需要在末尾加f
或F
表示float类型。
比如:
float i = 3.3;
编译后报错:
这个例子再次说明了这个机制:
程序中定义的是float变量i,哪里来的double呢?
因为Java的变量定义机制,3.3
默认保存为double类型常量,而我们定义的变量i是float类型,所以赋值时会报错,在常量后加一个F
表示float类型数据即可:
float i = 3.3F;
3.3.字符型常量
字符常量默认就是char类型,与变量是对应的,都是两个字节。
字符型常量直接使用单引号'
表示即可,比如:'a'
,'您'
。
在所有的这些字符型常量中,有一部分字符拥有特殊功能,称为转义字符:
-
'\\'
:反斜线 -
'\r'
:回车 -
'\n'
:换行 -
'\''
:单引号 -
'\t'
:制表符
在Java中还有一个特殊的转义字符:
\u<十六进制unicode码值>
这个转义字符也表示对应unicode码值的那个字符,比如下面这两行代码作用相同:
char ch = '您';
char ch = '\u60a8';
3.4.布尔型常量
布尔型常量默认就是boolean类型,与变量是对应的,都是一个字节,并且只有两个值:true和false。
4.数据类型转化
Java数据类型根据所占位数从小到大依次排列如下:
byte -> short -> int -> long -> float -> double
类型间转化有两种:
- 低级向高级的自动类型转化
- 高级向低级的强制类型转化
4.1.自动类型转化
低级数据类型可以自动转化为高级数据类型。
比如:
byte i = 10;
int j = 200;
j = i; //正确,byte型自动转化为int型
i = j; //错误,int型不可以自动转化为byte型
另外,由于之前介绍的Java变量定义机制,数据混合运算时会进行自动类型转化,最后为其中*的数据类型:
比如:
float i = 10*0.2; //错误,10*0.2结果为double类型,不可以转化为float类型
float i = 10*0.2f; //正确,10*0.2结果用f表明为float类型
4.2.强制类型转化
高级数据类型可以强制转化为低级数据类型,必须指明数据类型,要注意精度丢失问题。
比如:
byte i = 10;
int j = 200;
j = i; //正确,byte型自动转化为int型
i = (byte)j; //正确,int型强制转化为byte型
5.运算符
- 算术运算符
-
+
、-
、*
、/
(整数和浮点数运算结果还是浮点数)、%
(两个操作数都可以是浮点数)
-
- 关系运算符
-
>
、>=
、<
、<=
、==
、!=
-
- 逻辑运算符
-
!
、&&
(左边为假,右边不执行)、||
(左边为真,右边不执行)
-
- 赋值运算符
-
=
、+=
、-=
、*=
、/=
、%=
-
- 位运算符
-
&
、|
、~
、^
-
6.流程控制
6.1.顺序
6.2.分支
条件分支if_else
格式如下:
if(<条件表达式>)
{
//语句块1
}
else
{
//语句块2
}
程序执行流程如图:
if判断条件中必须是条件表达式,即最后要是布尔变量值true或false,而在C语言中,if的判断条件只有零和非零,这一点Java和C/C++不一样,要特别注意。
比如:
if(3)
{
//语句块
}
- 在C/C++中是正确的,3是非零值,并且语句块会执行;
- 在Java中直接编译报错,3不是布尔值;
多重分支switch
格式:
switch(<表达式>)
{
case <值1>:
//语句块1
break;
case <值2>:
//语句块2
break;
case <值n>:
//语句块n
break;
default:
//语句块n+1
}
程序执行流程如图:switch
语句中的表达式的数据类型可以是byte、char、short、int类型。
6.3.循环
- while循环(先判断条件,如果满足则执行循环语句块)
while(条件表达式)
{
//循环语句块
}
- for循环
for(循环变量赋值语句;循环判断条件;循环变量变化语句)
{
//循环语句块
}
注意首先执行循环变量赋值语句
,然后执行循环判断条件
,如果不满足则结束循环,满足则执行循环语句块,执行完毕后执行循环变量变化语句,然后转入执行循环判断条件
。
- do…while循环(先执行循环语句块,然后判断)
do
{
//循环语句块
}while(条件表达式);
- 跳转语句:
continue
和break