不论使用何种语言,最终都是为了实现业务逻辑。在面向对象的编程语言中 ,业务逻辑都在方法中实现。因此,对于初学者来说,了解完成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);//输出trueSystem.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语法。
为了一些琐事吵架,然后冷战,疯狂思念对方,最后和好。