主要内容:
运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
- 算术运算符
- 比较运算符
- 赋值运算符
- 条件运算符
- 逻辑运算符
- 位运算符
算术运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
下面是我们的代码
public class Test {
public static void main(String[] args) {
int a = 2;
int b = 20;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("b % a = " + (b % a) );
// 在我们算术运算符中需要特殊注意 ++ 和 --
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
System.out.println("++a = " + (++a) );
System.out.println("--a = " + (--a) );
}
}
这个是我们的运行后的结:
在这里说一下我们的自增自减在运算过程中,当++和–在前面的时候,例如++a/–a那么就先把原来的值进行自增或自减1,随后再去进行运算;如果++和–在后面时,例如a++/a–就先拿我们的a去做运算,在进行自增或自减1。
我们总结了一个句子:“当++/–在前,先加减,在自用;如果++/–在后,先自用,在加减”。
比较运算符
下图的变量A =2,变量B = 20的条件下进行的比较。
代码如下:
public class Test {
public static void main(String[] args) {
int a = 2;
int b = 20;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
}
运行结果如下:
赋值运算符
赋值运算如下表:
代码如下:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println("c = a + b = " + c );
c += a ;
System.out.println("c += a = " + c );
c -= a ;
System.out.println("c -= a = " + c );
c *= a ;
System.out.println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
System.out.println("c /= a = " + c );
a = 10;
c = 15;
c %= a ;
System.out.println("c %= a = " + c );
c <<= 2 ;
System.out.println("c <<= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c &= a ;
System.out.println("c &= a = " + c );
c ^= a ;
System.out.println("c ^= a = " + c );
c |= a ;
System.out.println("c |= a = " + c );
}
}
运行结果如下:
条件运算符
条件运算符也被称为三元运算符或三目运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
格式为:数据类型 名字 = 变量1 比较运算符 变量2 ? 变量1 : 变量2;
public class Test{
public static void main(String[] args){
int a=5;
int b=7;
int c=6;
int max = a > b ? a : b;
System.out.println("max = " + max);
String str = a == b? "相等" : "不相等";
System.out.println("str为:" + str);
}
}
运行结果如下:
逻辑运算符
下表列出了逻辑运算符中要注意也是经常用到的运算符,假设布尔变量A为真,变量B为假
这里在详细说一下逻辑运算符:
- & 两边的操作数 都是true才是true,一个为false,结果就为false
- | 两边的操作数 一个为true就是true,两个都为false才是false
- ! 取反
- ^ 相同为false,不同为true
- 短路:如果第一个操作数已经能够决定最终的结果,第二个操作数不再执行
- && 两边的操作数 都是true才是true,一个为false,结果就为false
- || 两边的操作数 一个为true就是true,两个都为false才是false
- 推荐使用&& 或者 ||,提议提高效率
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));
System.out.println("a || b = " + (a||b) );
System.out.println("!(a && b) = " + !(a && b));
}
}
运行结果如下:
位运算符
位运算的详细信息如下表:
代码如下:
public class Test {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 这注释里面的是转成的二进制*/
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}
运行结果如下:
运算符号的优先级
我们在数学中运算的时候是有有优先级的,比如我们的乘数要高于加减一样,那当JAVA代码中有多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
键盘录入和随机函数
我们在之前的练习中自己单独写过很多次类了,那当我在自己创建的类中在使用JAVA中已经封装过的类怎么办呢?我们就需要进行导包才能进行使用,那么我们今天简单地讲一下JAVA给我们提供的类,一个是Scanner(键盘录入)和Random(随机函数)。
键盘录入Scanner
当我们想使用JAVA中自己自带的类怎么使用呢,首先我们需要导包,那么我们应该如何进行导包呢,那需要使用一个关键字“import”,然后在我们代码的最上边进行敲入“import.java.util.Scanner;”即可。
import java.util.Scanner;
public class Test{
public static void main(){
/*
代码
*/
}
}
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。那如何创建呢?请看一下代码
Scanner scan = new Scanner(System.in);
接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串:
next()使用方法
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// next方式接收字符串
System.out.println("next方式接收:");
String str1 = scan.next();
System.out.println("输入的数据为:" + str1);
scan.close();
}
}
运行结果如下:
我们可以看到我输入的runoob com中我们空格及以后的字都没有打印出来,那是因为next()这个方法当它读的时候读到空格键、Tab键的空格、回车键就当做是读完了,不会再管后面的还有没有东西了。
nextLine()使用方法
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// nextLine方式接收字符串
System.out.println("nextLine方式接收:");
String str2 = scan.nextLine();
System.out.println("输入的数据为:" + str2);
scan.close();
}
}
运行结果如下:
在这里我们就可以看到nextLine()方法就可以把我们所输入的信息全部打印出来,那是因为nextLine()方法在对消息的时候它只识别\t(回车键),所以当遇到回车键的时候就当做全都读完了。
当然Scanner用到了I/O里面的流管道,所以我们在我们程序做完后,我们需要把流管道关闭,代码如下:
//创建管道
Scanner scan = new Scanner(System.in);
//那么程序完成后需要把我的管道关闭
scan.close();
那我们总结一下next() 与 nextLine() 区别:
- next():
1)、一定要读取到有效字符后才可以结束输入。
2)、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3)、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4)、next() 不能得到带有空格的字符串。 - nextLine():
1)、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2)、可以获得空白。
随机函数 Random
刚刚我们介绍了Scanner是如何创建的,那么现在讲的Random创建方式和Scanner的创建方式大概相同,都需要导包,那么请看以下代码:
import java.util.Random;
public class Test{
public static void main(String[] args){
Random ran = new Random();
}
}
我们创建出Random后,它有两个方法是我们经常使用的,nextInt();和nextDouble();两个方法
nextInt()方法使用
- nextInt() 随机产生一个int范围内的整数
- nextInt(整数n) 产生一个 [0,n) 随机整数
代码如下:
import java.util.Random;
public class Test{
public static void main(String[] args){
//1.导包
//2.创建该类型的引用或者变量
Random ran = new Random();
//3.使用功能
int i=ran.nextInt();
System.out.println(i);
//[0,19) -->[0,18]
int i2=ran.nextInt(20);
System.out.println(i2);
}
}
nextDouble()使用方法
- nextDouble() 随机产生[0,1)之间的随机小数
import java.util.Random;
public class Test{
public static void main(String[] args){
//1.导包
//2.创建该类型的引用或者变量
Random ran = new Random();
//3.使用功能
//随机小数
double d=ran.nextDouble();
System.out.println(d);
}
}
选择控制语句
if语句
if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句、if-else语句和if-else if-else语句,下面介绍一下if语句。
单个if语句
条件:是一个值为boolean类型的表达式
满足条件,就执行{}中的语句体,不满足条件,跳过整个if结构
if(条件表达式){
//功能代码块;
}
if(…){…}else{…}语句
条件:是一个值为boolean类型的表达式
满足条件执行语句体1;不满足条件,执行语句体2
int a = 10;
if(a >= 0){
//代码
}else{
//代码
}
if(…){…}else if(…){…}else{…}
条件:是一个值为boolean类型的表达式
满足条件执行语句体1;不满足条件,执行语句体2;不满足条件,执行语句体3等等…
只要{}中的语句体只有一句的时候,前后的{}可以省略
public class Test{
public static void main(String[] args){
int score = 100;
if(score == 100){
System.out.println("小明的奖励是:BMW车一辆");
}else if(score > 80){
System.out.println("小明的奖励是:iphone6s一台");
}else if(score >= 60){
System.out.println("小明的奖励是:参考书一本");
}else{
System.out.prinln("...");
}
}
if与条件运算符之间的区别:
- if可以没有结果,条件运算符肯定有一个结果
- if可以同时对多个条件进行判断
- 结果复杂推荐使用if,如果结构简单,推荐使用条件运算符
switch语句
执行流程:
- 计算表达式,得到一个结果,值
- 第一步算出的结果值与case后的值进行判断,如果相等,就执行对应的语句体,如果不相等,就继续向下判断
- 如果执行了语句体,后如果有break,结束整个switch语句,如果没有break会发生case穿透
- 如果以上所有case后的值都不满足条件,执行default(接盘侠 else)。
那我们需要注意的是什么呢?
- 首先是表达式: 只能为byte,short,char,int,String(jdk1.7之后),枚举(jdk1.5) seo 搜索引擎优化
- case穿透: 满足条件的语句体执行之后,如果没有break,下面的case无论是否满足条件,都会执行他们的语句体,直到遇到下一个break或switch的结果而结束
- default:位置可以任意改变,break可以省略,但是如果写在switch最后,省略break没有影响,其他位置会发生case穿透
下面和这个代码就是怎么写
swtich (表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n;
break;
}
if和switch的区别
if…else
只是单纯地一个接一个比较;if…else每个条件都计算一遍;
switch
- 使用了Binary Tree算法;绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true
- 编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,然后都是test , jmp,
- 有很多else if的时候,用switch case比较清晰
- switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。
更多内容可以参考 API 文档:http://www.runoob.com/manual/jdk1.6/