Java基础语法
运算符与表达式
- 从功能角度分,Java中的运算符可以分为算术、关系、位、逻辑运算符四类;
- 运算符既可以对变量进行运算,也可以对常量进行运算,被运算的数据称作操作数;
- 多数运算符的操作数只能是基本数据类型,只有、、例外,其中+不仅能对基本数据类型进行加运算,还能将字符串进行连接;、除了可以比较基本数据类型的二进制值外,还能比较基本数据类型的地址;
- 算术运算符用来对操作数进行数学运算;+比较特殊,除了能做加运算外,还能对两个字符串进行连接;
注意:++在前,先自加1,后进行赋值。++在后,先进行赋值运算,再自加1。
运算符 | 运算规则 | 范例 | 结果 |
+ | 正号 | +31 | 31 |
+ | 加 | 2+32 | 43 |
+ | 连接字符串 | “浙江”+“大学” | 浙江大学 |
- | 负号 | int a=43;-a | -43 |
- | 减 | 3-1 | 2 |
* | 乘 | 2*3 | 6 |
/ | 除 | 15/2 | 7 |
% | 取模 | 15/2 | 1 |
++ | 自增 | int a=1;a++/++a | 2 |
– | 自减 | int b=3;a–/--a | 2 |
public class Test1 {
/*
*运算符
*/
public static void main(String[] args) {
int num1=12;
int num2=5;
int i=1;
int a=1;
int j=++i; //先自加,再赋值
int x=a++; //先赋值,再自加
System.out.println("num1+num2="+(num1+num2)); //17
System.out.println("num1-num2="+(num1-num2)); //7
System.out.println("num1*num2="+(num1*num2)); //60
System.out.println("num1/num2="+(num1/num2)); //结果是商的整数部分,2
System.out.println("num1%num2="+(num1%num2)); //2
System.out.println("i="+i); //2
System.out.println("j="+j); //2
System.out.println("a="+a); //2
System.out.println("x="+x); //1
}
}
- 关系运算符又叫比较运算符,用来运算两个操作数的大小关系,返回值是true或false;
- ==以及!=也可以对引用类型进行运算,比较是否是同一个对象,其实比较的是引用类型的地址;
注意:=表示赋值, ==表示的比较
运算符 | 运算规则 | 范例 | 结果 |
== | 相等于 | 14==13 | false |
!= | 不等于 | 14!=13 | true |
< | 小于 | 14<13 | false |
> | 大于 | 14>13 | true |
<= | 小于等于 | 14<=13 | false |
>= | 大于等于 | 14>=13 | true |
- 位运算符针对操作数的二进制位进行运算;
15的二进制是00001111,6的二进制是00000110
运算符 | 运算规则 | 范例 | 结果 |
& | 位与 | 15&6 | 6 |
| | 位或 | 15|6 | 15 |
^ | 异或 | 15^6 | 9 |
~ | 取反 | ~6 | -16 |
<< | 左移位 | 8<<2 | 32 |
>> | 右移位 | 8>>2 | 2 |
>>> | 无符号右移位 | 8>>>2 | 2 |
- 逻辑运算符示例如下:
注意:&和&&区别 &&有短路现象
• 如果存在T1&T2,当T1为false时,返回值已经确定为false,但是依然还会运算T2表达式;所以称为非短路;
• 如果存在T1&&T2,当T1为false时,返回值已经确定为false,就不会运算T2表达式;所以称为短路;
|和||区别 ||有短路现象
运算符 | 运算规则 | 范例 | 结果 |
& | 与 | false&true | false |
| | 或 | false|true | true |
^ | 异或 | false^true | true |
! | 非 | !true | flase |
&& | 双与 | false&&true | false |
|| | 双或 | false||true | true |
public class Test2 {
/*
&&和||有短路现象
如果存在T1&T2,当T1为false时,返回值已经确定为false,但是依然还会运算T2表达式;所以称为非短路;
如果存在T1&&T2,当T1为false时,返回值已经确定为false,就不会运算T2表达式;所以称为短路;
*/
public static void main(String[] args) {
int i=10;
int j=20;
int x=10;
int y=20;
if (i==11&++j==21){
System.out.println("符合条件");
}
System.out.println("i="+i);
System.out.println("j="+j);
if (x==11 && ++y==21){
System.out.println("符合条件");
}
System.out.println("x="+x);
System.out.println("y="+y);
}
}
- 条件运算符是唯一的一个三元运算符,它有三个表达式操作数(不是典型的两个操作数),使用下面的格式:
表达式1?表达式2:表达式3
在这个语句中,表达式1必须产生一个布尔值。如果表达式1的值为true,那么表达式2被计算。如果表达式值为false,那么表达式3被计算,并且整个表达式的值是有条件的。三元操作符与典型的if语句部分相似。
public class Test3 {
public static void main(String[] args) {
int num1 = 2;
int num2 = 5;
int max;
//方式1
if (num1 > num2) {
max = num1;
} else {
max = num2;
}
System.out.println("最大值:"+max); //5
//方式2:三目运算符
max=(num1>num2?num1:num2);
System.out.println("最大值:"+max); //5
}
}
- Java中的赋值可以使用普通的=进行赋值;也可以=与其他运算符一起进行复合赋值,即运算后赋值,复合赋值运算符。
运算符 | 运算规则 | 范例 | 结果 |
= | 赋值 | int a=7 | 7 |
+= | 加后赋值 | int a=7,a+=2 | 9 |
-= | 减后赋值 | int a=7,a-=2 | 5 |
*= | 乘后赋值 | int a=7,a*=2 | 14 |
/= | 整除后赋值 | int a=7,a/=2 | 3 |
%= | 取模后赋值 | int a=7,a%=2 | 1 |
- 运算符的优先级:算术运算符优先级较高,关系和逻辑运算符优先级较低。
- Java注释:
- // 单行注释,简单的解释语句含义.
- /* 多行注释,用来说明更多的内容,包括算法等.
……
*/ - /** Java文档注释,可以通过javadoc生
成类和接口的HTML格式的帮助文档。
这种注释有其特殊的格式(参见相关文档)
*/
- 标识符的命名法规则
字母、数字、下划线和$符号组成。但是不能以数字开头。避开关键字或者保留字。
- 保留字:具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word);
- 注意:全部都是小写
abstract 、 break 、 byte 、 boolean、 catch、 case 、class 、 char 、continue、 default 、double 、 do、 else 、 extends、 false 、 final 、 float、 for 、 finally 、 if、 import 、 implements、 int 、 interface 、 instanceof 、 long、 length、 native 、new、 null、 package 、private 、protected 、public、 final、 return、 switch、 synchronized、 short、 static 、super、 try 、true 、this、 throw、 throws 、transient 、 void、 while
注意:run不是。goto是。C/C++中,goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。Java中依然保留了goto这个关键字留作备用,但这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。
- 变量:程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分
- 作用域(Scope):决定了变量可使用的范围
a) 全局变量(Global variables):变量可以在整个类中被访问;
b) 局部变量( Local variables ):变量只能在定义其的代码段中被访问。
作用域规则:在一个代码段中定义的变量只能在该代码段或者该代码段的子代码段中可见。
使用局部变量比使用全局变量更安全。 - 常量就是特殊的变量,不能修改值的变量。
//常量定义格式:
//一般用大写单词命名。
final int NUM_F = 1;
System.out.println("num="+NUM_F);
NUM_F = 100; //会报错,无法赋值
System.out.println("num="+NUM_F);