首页 > 代码库 > java基础语法
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("不及格!"); } }
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); }}
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语句 :其之后的语句将不再执行
java基础语法