JAVA语法基础
Java中标识符的命名必须满足以下原则:
p 标识符必须以字母、下划线(_)或美元符($)开头,后面可以跟字母、数字、下划线或美元符
p 除下划线“_”和“$”符号外,标识符中不包含任何特殊字符,如空格
p 标识符区分大小写,比如,“abc”和“Abc”是两个不同的标识符
p 对于标识符的长度没有限制
p 不能使用Java关键字作为标识符
根据上述原则,可知:myvar、_myvar、$myvar、_9myvar等都是合法的标识符,而下面的标识符都是不合法的:
my var //包含空格
9myvar //以数字开头
a+c //包含特殊字符“+”
注意:Java中的关键字都是小写的,但是true和false都不是Java中的关键字。
标识符应该见名知意。
Java中的关键字(保留字),就是Java保留下来用作特殊用途的一些词。这些关键字不能当做标识符使用。Java中的关键字如下:
abstract |
assert |
Boolean |
break |
byte |
case |
catch |
char |
class |
continue |
const |
default |
do |
double |
else |
extends |
enum |
final |
finally |
float |
for |
goto |
if |
implements |
import |
instanceof |
int |
interface |
long |
native |
new |
package |
private |
protected |
public |
return |
short |
static |
synchronized |
super |
strictfp |
this |
throw |
throws |
transient |
try |
void |
volatile |
while |
其中goto和const现在基本上不用了。另外true、false和null虽然不是关键字,但是也不能用作标识符。
变量:所谓的变量就是利用声明的方式将内存中的某个区域保留下来,然后起一个名字供程序使用。变量包含三个要素:变量名、变量的数据类型和变量的值,变量必须先声明然后再使用。
变量的定义方式:
<data_type> var_name = var_value;
其中data_type是Java中的数据类型,var_name是变量名,要符合标识符的命名规则。
例如:int num;
可以同时声明多个同类型的变量,变量之间用“,”隔开:
int num,num1,num2;
但是不建议使用这种方式,每行定义一个变量。
常量:程序运行期间不变的量。在Java中使用final来定义常量。定义方式如下:
final <data_type> var_name = var_value;
其中final是关键字,表示该变量只能赋值一次,必须注明,
举例如下:
final double PI = 3.1415926; //
final Boolean IS_MAN = true; //
注意:常量名通常全部采用大写字母,如果常量名由多个单词组成,则单词之间用下划线“_”来分割,另外需要在定义的同时对常量进行初始化。
2、Java的数据类型,运算符
Java是一种强类型的语言,所有的变量在使用之前必须要声明,这就涉及到变量的类型和名称,名称前面已经介绍过了;在Java中,数据类型分为:原生数据类型(primitive type)和引用数据类型(reference type)。
原生数据类型(primitive type)又称为基本数据类型,是Java中最基本最简单的数据类型,原生数据类型一次只能存放一个值,它又分为下面几种:
整数类型:int,long,short,byte
浮点类型:double,float
布尔类型:boolean
字符类型:char ‘\u0000’-‘\uffff’
类型 |
大小/位 |
取值范围 |
说明 |
默认值 |
byte字节型 |
8 |
-27-27-1 |
8-bit有符号数的二进制补码 |
0 |
short短整型 |
16 |
-215-215-1 |
16-bit有符号数的二进制补码 |
0 |
int整型 |
32 |
-231-231-1 |
32-bit有符号数的二进制补码 |
0 |
long长整形 |
64 |
-263-263-1 |
64-bit有符号数的二进制补码 |
0L |
float单精度 |
32 |
大约-3.4E+38~3.4E+38 |
32-bit IEEE754 |
0.0f |
double双精度 |
64 |
大约-1.7E308~1.7E308 |
64-bit IEEE754 |
0.0d |
boolean布尔型 |
|
true/false |
|
false |
char字符型 |
16 |
‘\u0000’-‘\uffff’ |
16-bit Unicode |
‘\u0000’ |
说明:由于float和double表示的都是约数,所以不要用它们表示需要精确的数,比如货币等,如果要表示精确值,需要使用java.math.BigDecimal类。
boolean表示1位信息,但是它的长度/大小没有确切的定义。
默认值,在Java中,当字段(属性)在声明时没有初始化,则编译器会为其赋上一个合理的默认值。
char类型的值要使用一对西文单引号’’括起来,在Java中,西文单引号和双引号是定界符,所以在Java中要想输出西文单引号这样的特殊字符时,需要使用特殊的格式,这就是转义字符,常用的转义字符如下:
转义字符 |
含义 |
\ddd |
1~3位8进制数所表示的字符 |
\uxxxx |
1~4位16进制数所表示的字符 |
\’ |
单引号Single Quote |
\” |
双引号Double Quote |
\\ |
反斜线Backslash |
\b |
退格Backspace |
\r |
回车Carriage Return |
\n |
换行Linefeed |
\t |
制表符Tab |
\f |
换页Formfeed |
类型转换,类型转换分为自动类型转换和强制类型转换两种。
自动类型转换:将一种类型的值赋给另一种类型的变量时发生的类型转换,自动类型转换需要满足以下两个条件:1)转换前的类型和转换后的类型兼容;2)转换后的类型的表示范围大于转换前的类型的表示范围。通常的转换如下:
byte→short→char→int→long→float→double 白芍茶因狼服大宝
1 public class TypeCast {
2 public static void main(String[] args) {
3 int i = 100;
4 char c1 = 'a';//注意用char生命的是要加''的
5 byte b = 3;
6 long l = 567L;//声明长整形的变量,其后要加上类型符L
7 float f = 1.89f;//声明float类型的变量,其后要加上类型符f
8 double d = 2.1;
9 int i1 = i + c1; // char类型的变量c1自动转换为int类型参加运算
10 long l1 = l - i1; // int类型的变量i1自动转换为long类型参加运算
11 float f1 = b * f; // byte类型的变量b自动转换为float类型参加运算
12 /* int类型的变量i1自动转换为与f1一致的float类型f1/i1计算结果为float类型. 然后再转换为与d一致的double类型。 */
13 double d1 = d + f1 / i1;
14 System.out.println("i1=" + i1);
15 System.out.println("l1=" + l1);
16 System.out.println("f1=" + f1);
17 System.out.println("d1=" + d1);
18 }
19 }
i1=197
l1=370
f1=5.67
d1=2.1287817269563676
强制类型转换:当要将一个类型表示范围的数赋值给表示范围小的数的时候,例如要将一个double类型的数赋值给int类的数的时候,就需要强制类型转换,语法格式如下:
data_type var1=(data_type)var2;
例如:
float flag = 30.33f;
int num = (int)flag;
在强制类型转换中会丢失精度。在上面的例子中num的值是30。
运算符:算术,比较,逻辑,位,赋值运算符,条件运算符。
算术运算符:
运算符 |
数学含义 |
示例 |
运算符 |
数学含义 |
示例 |
+ |
加 |
a+b |
% |
取模 |
a%b |
- |
减或负号 |
a-b,-b |
++ |
自增 |
a++,++a |
* |
乘 |
a*b |
-- |
自减 |
a--,--a |
/ |
除 |
a/b |
|
|
|
比较运算符:
运算符 |
数学含义 |
示例 |
运算符 |
数学含义 |
示例 |
> |
大于 |
a>b |
>= |
大于等于 |
a>=b |
< |
小于 |
a<b |
<= |
小于等于 |
a<=a |
== |
等于 |
a==b |
!= |
|
|
逻辑运算符:
运算符 |
数学含义 |
示例 |
! |
非 |
!a |
&& |
与 |
a&&b |
|| |
或 |
a||b |
位运算符:
运算符 |
数学含义 |
说明 |
示例 |
~ |
按位非(NOT) |
按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。 |
~ 00101010 = 11010101 |
& |
按位与(AND) |
按位与运算符“&”,如果两个运算数都是1,则结果为1。其他情况下,结果均为零。 |
00101010 & 00001111 = 00001010 |
| |
按位或(OR) |
按位或运算符“|”,任何一个运算数为1,则结果为1。 |
00101010 | 00001111 = 00101111 |
^ |
按位异或(XOR) |
按位异或运算符“^”,只有在两个比较的位不同时其结果是1。 |
|
<< |
左移 |
value << num。左移运算符<<使指定值的所有位都左移num位。每左移一个位,高阶位都被移出(并且丢弃),并用0填充右边。 |
11111000 << 1 = 11110000 |
>> |
右移 |
右移运算符>>使指定值的所有位都右移num位。当值中的某些位被“移出”时,这些位的值将丢弃。右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。 |
11111000 >> 1 = 11111100 |
>>> |
无符号右移 |
无符号右移运算符>>>使指定值的所有位都右移num位。当值中的某些位被“移出”时,这些位的值将丢弃。右移时,被移走的最高位(最左边的位)固定由0补充。 |
11111000 >>> 1 = 01111100 |
赋值运算符:
运算符 |
示例 |
运算符 |
示例 |
+= |
a += b |
/= |
a /= b |
-= |
a -= b |
%= |
a %= b |
*= |
a *= b |
= |
a = b |
条件运算符:
条件运算符是三目运算符,其语法格式如下:
<条件表达式>?表达式1:表达式2
当条件表达式的值为真时,运算表达式1,否则运行表达式2。
运算符的优先级
优先级 |
运算符 |
运算符名称 |
运算次序 |
1 |
() |
Parentheses |
left to right |
() |
Method Call |
left to right |
|
[] |
Array Subscript |
left to right |
|
. |
Object member access |
left to right |
|
2 |
++ |
Postincrement/Preincrement |
right to left |
-- |
Postdecrement/Predecrement |
right to left |
|
+ |
Unary plus |
right to left |
|
- |
Unary minus |
right to left |
|
! |
Unary logical negation |
right to left |
|
~ |
unary bitwise complement |
right to left |
|
3 |
(type) |
Unary casting |
right to left |
new |
Creating Object |
right to left |
|
4 |
* |
Multiplication |
left to right |
/ |
Division |
left to right |
|
% |
Remainder |
left to right |
|
5 |
+ |
Addition or string concatenation |
left to right |
- |
Subtraction |
left to right |
|
6 |
<< |
Left shift |
left to right |
>> |
Right shift with sign extension |
left to right |
|
>>> |
Right shift with zero extension |
left to right |
|
7 |
< |
Less than |
left to right |
<= |
Less than or equal to |
left to right |
|
> |
Greater than |
left to right |
|
>= |
Greater than or equal to |
left to right |
|
instanceof |
Checking object type/type comparison |
left to right |
|
8 |
== |
Equal comparison |
left to right |
!= |
Not equal |
left to right |
|
9 |
& |
bitwise AND/unconditional AND |
left to right |
10 |
^ |
bitwise exclusive OR/boolean logical exclusive OR |
left to right |
11 |
| |
bitwise inclusive OR/boolean logical inclusive OR |
left to right |
12 |
&& |
conditional AND |
left to right |
13 |
|| |
conditional OR |
left to right |
14 |
?: |
conditional |
right to left |
15 |
= |
assignment |
right to left |
+= |
Addition assignment |
right to left |
|
-= |
Subtractionassignment |
right to left |
|
*= |
Multiplication assignment |
right to left |
|
/= |
Division assignment |
right to left |
|
%= |
Remainder assignment |
right to left |
|
16 |
&= |
bitwise AND assignment |
right to left |
|= |
bitwise inclusive OR assignment |
right to left |
|
^= |
bitwise exclusive OR assignment |
right to left |
|
<<= |
bitwise left shift assignment |
right to left |
|
>>= |
bitwise signed-right-shift assignment |
right to left |
|
>>>= |
bitwise unsigned-right-shift assignment |
right to left |
注意:运算符的优先级自上到下,由高到低。同一组中的运算符优先级相同。
引用数据类型reference type分为:
数组array 类:class 接口:interface;枚举:enum 注解:annotation
import java.util.Scanner;
public class GradeIf {
public static void main(String[] args) {
System.out.println("Please input the score:");
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
char grade = 'A';
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else{
grade = 'E';
}
System.out.println("Grade = " + grade);
}
}
switch语句
import java.util.Scanner; public class Grade { public static void main(String[] args) { System.out.println("Please input the score:"); Scanner scanner = new Scanner(System.in); int score = scanner.nextInt(); switch(score/10){ case 10: case 9: System.out.println("优秀!"); break; case 8: System.out.println("良好!"); break; case 7: System.out.println("中等!"); break; case 6: System.out.println("及格!"); break; default: System.out.println("不及格!"); } }
注意switch 与 case break default 的搭配!!!!!!!!
while语句
public class WhileOP {
public static void main(String[] args) {
int count = 5;// 循环上限
int i = 1;// 迭代指示器
while (i < count) {
System.out.println("当前是: " + i);
i++;
}
}
}
do-while语句
public class DoWhileOP {
public static void main(String[] args) {
int count = 5;// 循环上限
int i = 1;// 迭代指示器
do {
System.out.println("当前是: " + i);
i++;
} while (i < count);//注意do{}后面是没有分号的,而while()后面有分号
}
}
while do 和 do while
循环次数一样
for(initialization;condition;update){
statements;
}
举例如下:
public class ForOP {
public static void main(String[] args) {
int count = 5;// 循环上限
for (int i = 0; i < count; i++) {
System.out.println("当前是: " + i);
}
}
}
3.3控制转移语句
break语句:在循环中用于立即从当前循环终止控制
continue语句:从其调用处跳至循环的开始处
return语句 :其之后的语句将不再执行