不论使用何种语言,最终都是为了实现业务逻辑。在面向对象的编程语言中,业务逻辑都在方法中实现。因此,对于初学者来说,了解完成Java类方法体的基本知识点是非常必要的。本文中,将介绍编写方法体必须了解的两个方面:运算符,流程控制。
Java中的运算符根据其功能,可以分成4类。首先需要注意的是,Java中的运算符是不能重载的。下面分别对4类运算符进行介绍。
1、 算术运算符:+,-,*,/,%,++,--
算术运算符是对基本数据类型进行运算的操作符,其中容易混淆的是/表示除,而%表示取余。另外需要注意的是++,--两个自加自减运算符的区别,如下程序。
package com.csst.test;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=0;
System.out.println(i++);
System.out.println(++i);
int j=0;
System.out.println(j--);
System.out.println(--j);
}
}
++,--在变量后,是先取变量没有运算前的值,当作表达式的返回值,然后进行运算。而++,--如果在变量前,是先对变量进行运算,然后将运算结果作为表达式的返回值。需要注意的是,不管在前还是在后,对于参与运算的变量本身,都是进行了一次加1或者减1的操作,没有区别,有区别的是返回值的值。
算术运算符都是针对基本数据类型进行运算的,只有+除外,可以使用+连接两个字符串。如:
String s=”Hello”+” World”;//String的值是Hello World
2、 位运算符:&,|,^,~,<<,>>,>>>
位运算符是针对二进制的数进行运算的操作符。与操作&的运算规则是两个都是1才是1,或操作 | 的规则是一个是1就是1,异或 ^ 的规则是不同的是1,相同的为0。取反操作~是1变0,0变1。
<<:左移运算符,规则为,抛掉相应位数的高位,在对应的空位补0。如:
0110 1001 << 2 =1010 0100
>>:有符号右移,规则为,抛掉相应位数的低位,如果移位前,最高一位是0,则在对应的高位都补0,如果移位前,最高一位是1,则在对应的高位都补1。
0110 1001 >> 2 =0001 1010
1110 1001 >> 2 =1101 1010
>>>:无符号右移,规则为,抛掉相应位数的低位,在对应的空位补0:
0110 1001 >>> 2 =0001 1010
1110 1001 >>> 2 =0001 1010
注意:右移运算符分有符号和无符号,而左移没有这个区别。另外左移一位相当于乘2,右移一位相当于除以2,速度比较快。
3、 比较运算符:>,<,>=,<=,= =,!=
比较运算符是对基本数据类型的二进制进行比较。需要注意的是==表示比较,=表示赋值。另外,==和!=可以对引用类型比较,比较的是虚地址。如:
String s1=”Hello”;
String s2=”Hello”;
String s3=new String(“Hello”);
System.out.println(s1==s2);//输出true
System.out.println(s1==s3);//输出false
4、 逻辑运算符:&,|,^,!,&&,||
在Java语言中,逻辑值使用true和false进行表示,而1和0不表示逻辑,表示二进制的数。比如:T1&T2,只有当T1和T2都是true时,才返回true
T1|T2:T1和T2只要有一个是true,返回值就是true。
T1^T2:T1和T2不同的时候,返回ftrue,相同的时候返回false。
!T1:T1是true,返回false,T1是false,返回true。
&&,||被称为双与及双或。
T1&&T2: 只有当T1和T2都是true时,才返回true。但是与单与&不同的是,双&
会发生短路问题,如T1是false,则不会判断T2的值,直接返回false。而单与不同,不论T1的值是true还是false,都会判断T2的值。
T1||T2:与双与类似,双或当T1为true时,也会发生短路,直接返回true,而不判断T2。
在运算符这个知识点,有以下几点需要注意:
1、 记清楚每种运算符是针对什么类型进行运算。比如不能对两个字符串使用>比较,因为>只比较基本类型。
2、 移位运算符中的右移分有无符号两种。
3、 比较运算符几乎都用来比较基本数据类型,只有==,!=除外。
4、 &&,||的短路问题。
了解了Java语言中常用的运算符后,再来看看方法的流程控制。程序的流程无非3种:
1. 顺序的:顺序的流程就是一条一条语句执行。
2. 分支流程:分支是常见的流程,Java语言对分支控制和其他语言类似,可以使用if,else以及switch case控制,如下代码:
package com.csst.test;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int x=1;
int y=2;
if(x==1){
System.out.println("x==1");
}else{
System.out.println("x!=1");
}
switch(y){
case 1:System.out.println("1");
case 2:System.out.println("2");
case 3:System.out.println("3");break;
default:System.out.println("default");
}
}
}
该程序运行结果:
x==1
2
3
需要注意的是,if后的括号中,一定是一个布尔值的表达式。而switch的括号中,可以是byte,short,int,char,enum(Java5以后有的新类型,枚举),其他类型不可以。另外,y的值是2,打印结果却是2,3。因为case 2后边的语句没有break来跳出,所以会继续运行,直到遇到第一个break为止。可以说,case后边的开关值,只是决定了switch流程的入口,但是出口完全取决于break的出现位置。
3、循环逻辑
循环逻辑即重复执行某段代码,Java中有三种循环,如for,while,do while,如下:
package com.csst.test;
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<3;i++){
System.out.println("i="+i);
}
int x=4;
while(x>0){
System.out.println("x="+x);
x--;
}
int y=5;
do{
System.out.println("y="+y);
y--;
}while(y>0);
}
}
程序运行结果如下:
i=0
i=1
i=2
x=4
x=3
x=2
x=1
y=5
y=4
y=3
y=2
y=1
Java类中,可以在循环逻辑中,使用标签来标记循环,通过break,continue关键字控制循环,以for循环为例。
package com.csst.test;
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
loop1: for(int i=0;i<4;i++){
loop2: for(int j=0;j<3;j++){
if(i==j){
break;
}
if(i<j){
continue loop1;
}
System.out.println("i="+i+" j="+j);
}
}
}
该类中,有两层for循环,分别以loop1,loop2进行标记,如果break或者continue后没有出现标记,表示控制的是最近的一层循环,即loop2,如果出现标记,则控制的是标记名所表示的循环。break表示中断循环,continue表示继续循环。
该类运行结果如下:
i=1 j=0
i=2 j=0
i=2 j=1
i=3 j=0
i=3 j=1
i=3 j=2
通过学习运算符和流程控制,初学者可以很容易开始写一些小程序,熟悉Java语法。