1、运算符
- 算术运算符:+, -, *, /, %,++, –
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40public class Demo1 { public static void main(String[] args) { //算术运算符 long a = 1000000000L; int b = 10000; short c = 32767; byte d = 127; System.out.println(a+b+c+d);//>>> 1000042894 long类型 System.out.println(b+c+d); //>>> 42894 int类型 System.out.println(c+d); // >>> 32894 int类型 System.out.println(d*2); // >>> 254 int类型 System.out.println("======================================================="); //乘除 int num1 = 50; double num2 = 10.0; double num3 = 30; int num4 = 30; float num5 = 30; float num6 = 30; System.out.println(num1/num2); //>>> 5.0 double类型 System.out.println(num1/num3); //>>> 1.6666666666666667 double类型 System.out.println(num1/num4); //>>> 1 int类型 System.out.println(num1/num5); //>>> 1.6666666 float类型 System.out.println(num1%num3); //>>> 20.0 double类型 System.out.println(num1%num4); //>>> 20 int类型 System.out.println(num2/num6); //>>> 0.3333333333333333 double类型 System.out.println("======================================================="); //自增(++),自减(--) int x = 0; int z = x++; //先将x的值赋值给z,然后x再进行自增;等同于z=x;x=x+1 int y = ++x; //先x进行自增,然后再将自增以后的x的值赋值给z;等同于x=x+1;y=x System.out.println(x); //>>> 2 System.out.println(y); //>>> 2 System.out.println(z); //>>> 0 } }
注:
运算过程中,
- 如果都是整型运算,且数值类型中有long类型,那么结果为long类型,否则结果都是默认的int类型;
- 如果是整型与浮点型运算,结果也是浮点型,且浮点型中有double类型,结果为double类型,否则为float类型;
- 浮点型与浮点型运算,结果为浮点型,浮点型中有double类型,结果为double类型,否则为float类型;
- 自增和自减需要注意符号的位置:
- 自增或者自减符号在变量前(++a),先进行自增或自减,后赋值
- 自增或者自减符号在变量后(a–),先进行赋值,后自增或自减
- 赋值运算符:=
- 关系运算符:<,>,<=,>=,==,!=,instanceof
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class Demo2 { public static void main(String[] args) { int a = 10; int b = 20; int c = 30; System.out.println(a<b); //>>> true System.out.println(a>b); //>>> false System.out.println(a==b); //>>> false System.out.println(c==b+a); //>>> true System.out.println(c!=b+a); //>>> false } } //关系预算符返回的结果是boolean类型
- 逻辑运算符:与(&&),或(||),非(!)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class LogicalDemo1 { public static void main(String[] args) { //逻辑运算符 int a = 10; int b = 20; int c = 10; System.out.println(a==c&&b==c); //>>>false &&两边为true才返回true,否则为false System.out.println(a==c||b==c); //>>>false ||两边为false才返回false,否则为true System.out.println(!(b==c)); //>>>false !后面结果为true,返回false;后面结果为false,返回true //短路运算:进行与运算时,将可能为false放在前面(符号左边) int d = 0; if(d > 1 && d++ >=1) { System.out.println(d);//不会输出,此时d=0 }else if(d < 1 && ++d > 2){ System.out.println(d); //不会输出,但是此时d=1 } System.out.println(d); int f = 0; System.out.println(f++ == 1);//>>>false 先比较再自增 int g = 0; System.out.println(++g == 1);//>>>true 先自增再比较 } }
注:
- 逻辑与运算:&&两边为true才返回true,否则为false
- 短路运算:进行与运算时,将可能为false放在前面(符号左边),&&运算只要遇到false就会返回false,不会再计算&&后面的那部分表达式是否为true
- 逻辑或运算:||两边为false才返回false,否则为true
- 逻辑非运算:!后面结果为true,返回false;后面结果为false,返回true
-
位运算符:位与(&),位或(|),异或(^),取反(~),算术左移(<<),算术右移(>>),逻辑右移(>>>)
- 位与(&):相同二进制位为1结果为1,否则为0
- 位或(|):相同二进制位为0结果为0,否则为1
- 异或(^):相同二进制位为相异时为1,否则为0
- 取反(~):将二进制位每位都取反;~m等于 -m-1
- 左移(<<):将二进制位整体左移,符号位不变,低位补0;m<<n 等于m×(2^n)
- 右移(>>):将二进制位整体右移,用符号位补高位,低位丢弃;m<<n 等于m/(2^n)
- 逻辑右移(>>>) :无符号右移,低位溢出,高位补0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class BitwiseDemo { //位运算,针对二进制 public static void main(String[] args) { String i = Integer.toBinaryString(10); // i=0000 1010 String j = Integer.toBinaryString(2); // i=0000 0010 System.out.println(Integer.toBinaryString(10&2)); // s=0000 0010 System.out.println(Integer.toBinaryString(10|2)); // s=0000 1010 System.out.println(Integer.toBinaryString(10^2)); // s=0000 1000 System.out.println(10<<1); // s=20 System.out.println(10>>1); // s=5 } }
- 三元运算符: 条件 ?结果1 : 结果2
- 扩展运算符:+=,-+,*+,/=
1
2
3
4
5
6
7
8
9
10
11public class Demo{ public static void main(String[] args){ int a = 10; int b = 1; System.out.println(a+=b);//11 a+=b ==> a = a+b System.out.println(a-=b);//9 a-=b ==> a = a-b System.out.println(a*=b);//10 a*=b ==> a = a*b System.out.println(a/=b);//10 a/=b ==> a = a/b } }
- 幂运算等其他运算需要使用其他工具类来进行运算
1
2
3
4
5
6
7public class Exponentiation { public static void main(String[] args) { double pow = Math.pow(2,3); System.out.println(pow); } }
2、包机制
为了更好的组织类,java提供了包机制,用于区别类名的命名空间。
包语句语法为:
1
2package pkg1[.pkg2[.pkg3...]];
一般是利用公司的域名倒置作为包名;例如com.baidu.www
Java中包的导入:
1
2
3import package1[.package2[.package3]].classname //导出某个包里面的某个类 import package1[.package2[.package3]].* //导出某个包里面的所有类
1
2
3
4
5
6
7
8
9
10
11
12
13
14package com.muyu.javase.operator; //package必须存在于最顶层,否则无法通过包机制导入包 //导入包com/muyu/javase/operator路径下的Demo1类 import com.muyu.javase.operator.Demo1; //导入包com/muyu/javase/base路径下的所有类 import com.muyu.javase.base.*; public class PackageDemo { public static void main(String[] args) { Demo1 demo1 =new Demo1();//实例化导入进来的类 } }
3、JavaDoc生成java的API文档
JDK帮助文档
使用javadoc来生成自己的API文档;
参数信息:
1
2
3
4
5
6
7
8
9/** * @author 作者名 * @version 版本号 * @since 最早使用的JDK版本 * @param 参数名 * @return 返回情况 * @throws 异常跑出情况 */
使用DOS命名生成JavaDoc文档;
1
2javadoc -encoding UTF-8 charset UTF-8 classname.java
使用IDEA生成JavaDoc文档:
菜单栏>>>Tools>>>Generate JavaDoc
4、Scanner(用户输入)对象
java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户输入。
基本语法:
1
2Scanner input = new Scanner(System.in)
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNextLine()方法判断是否还有输入。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.muyu.javase.ProcessControl; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); //如果有下一句输入就打印。 if(scanner.hasNext()){ System.out.println(scanner.next()); } scanner.close();//IO操作结束后要记得关闭,否则会浪费资源。 } }
next():
- 一定要读取到有效字符才可以结束(如果输入的是空格,next会自动将其去掉,继续等待输入);
- 会将有效字符后面的空格作为分隔符或者结束符
- next()不能获取带有空格的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package com.muyu.javase.ProcessControl; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); // <<<Hello World //如果有下一句输入就打印。 if(scanner.hasNext()){ System.out.println(scanner.next()); //>>> Hello 遇到空格后进行了分隔 } if(scanner.hasNext()){ System.out.println(scanner.next()); //>>> World 输出第一次分隔后面的内容,如还有空格将继续分隔 } scanner.close();//IO操作结束后要记得关闭,否则会浪费资源。 } }
nextLine()
- 以Enter为结束符,输入回车键之前的所有字符都是有效字符
- nextLine()可以输出空格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.muyu.javase.ProcessControl; import java.util.Scanner; public class ScannerDemo2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);// Hello World System.out.println("请输入内容:"); if(scanner.hasNextLine()){ System.out.println(scanner.nextLine()); // Hello World 可以输出空格 } scanner.close();//IO操作结束后要记得关闭,否则会浪费资源。 } }
Scanner的其他方法:
- nextInt(),hasNextInt()
- nextFloat(), hasNextFloat()
- ……等等,自行查看(Ctrl + 右键 点击Scanner查看源码。在IDEA中进入源码页面后可点击左下角的Structure查看Scanner的结构。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package com.muyu.javase.ProcessControl; import java.util.Scanner; public class ScannerDemo3 { public static void main(String[] args) { int i = 0; float j = 0.0f; Scanner scanner = new Scanner(System.in); //输入数据 System.out.println("请输入整数数:"); if(scanner.hasNextInt()){ i = scanner.nextInt(); System.out.println("int:"+i); }else { System.out.println("error"); } System.out.println("请输入小数:"); //判断的是否有下一个小数 if(scanner.hasNextFloat()){ j = scanner.nextFloat(); System.out.println("float:"+j); }else { System.out.println("error"); } scanner.close(); } }
5、顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行;
顺序结构是最简单的算法结构
顺序结构中:语句与语句之间,框与框之间都是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package com.muyu.javase.ProcessControl; public class SequentialDemo { public static void main(String[] args) { //从上至下依次打印 System.out.println(1); System.out.println(2); System.out.println(3); System.out.println(4); System.out.println(5); } } //>>> 1 2 3 4 5
6、选择结构
6.1 if选择结构
- if 单选择结构:
1
2
3
4
5if(布尔表达式){ //布尔表达式为true执行 语句块 }
- if双选择结构
1
2
3
4
5
6
7
8if(布尔表达式){ //布尔表达式为true执行 语句块 }else{ //布尔表达式为false执行 语句块 }
- if多选择结构:只会执行一个满足条件的语句块
1
2
3
4
5
6
7
8
9
10
11
12
13
14if(布尔表达式1){ //布尔表达式1为true执行 语句块 }else if(布尔表达式2){ //布尔表达式2为true执行 语句块 }else if(布尔表达式3){ //布尔表达式3为true执行 语句块 }else{ //以上布尔表达式都不为true的时候执行 语句块 }
- if嵌套结构(if里面嵌套if)
1
2
3
4
5
6
7
8
9if(布尔表达式1){ //布尔表达式1为true执行 语句块 if(布尔表达式2){ //布尔表达式2为true执行 语句块 } }
6.2 switch多选择结构
switch…case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14switch(变量表达式){ case value2: 语句 break;//可选 case value2: 语句 break;//可选 case value3: //可以有任意数量的case语句 语句 break;//可选 default: 语句 //可选 }
switch 语句中的变量类型可以是
- byte,short,int,char
- 从javaSE7开始,变量类型支持String类型的字符串
- case 标签必须是字符串常量或者字面量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.muyu.javase.ProcessControl; public class SwitchDemo { public static void main(String[] args) { char flag = 'A'; switch (flag){ case 'B': System.out.println(66); break; case 'A': // 匹配到以后,如果当前case语句没有使用break,将继续执行后面的case语句,即case穿透 System.out.println(65); case 'C': System.out.println(67); default: System.out.println(0); } } }
注:如需避免case穿透现象,记得在case语句后面使用break。
7、循环结构
7.1 while循环
while是一种先后测试循环结构,也是最基本的循环:
1
2
3
4
5while(布尔表达式){ //布尔表达式为true执行 循环语句 }
只要布尔表达式为true,循环就会一直执行下去,陷入死循环。
实际业务编程要尽量避免死循环。需要一个让表达式失效的方式来结束循环。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.muyu.javase.ProcessControl; public class WhileDemo { public static void main(String[] args) { //计算1+2+3+···+100的和 int i = 0; int sum = 0; while (i <= 100){ sum += i; i++; } System.out.println(sum); } }
7.2 do…while 循环
do…while循环是一种后测试循环结构,相比while循环,do…while循环至少会执行一次。
对于while循环,如果满足条件就执行,不满足条件,则不进入循环。
1
2
3
4do{ 语句块//至少执行一次,while的布尔表达式为true则继续执行。 }while(布尔表达式);
do…while循环与while循环的主要差别就是do…while循环至少会循环一次;
while循环是先判断再执行,do…while循环先执行再判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package com.muyu.javase.ProcessControl; public class DoWhileDemo { public static void main(String[] args) { int i = 10; while (i>20){ System.out.println(i);//不输出 i++; } System.out.println("=============="); do { System.out.println(i); //10 i++; }while (i>20); } }
7.3 for循环
for循环语句是支持迭代 的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。语法格式如下:
1
2
3
4
5for(初始化变量,布尔表达式,更新变量){ //布尔表达式为true的时候执行 语句块 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package com.muyu.javase.ProcessControl; public class ForDeom { public static void main(String[] args) { //计算0-100之间的奇数和与偶数和 int oddSum = 0; int eveSum = 0; for (int i = 0; i <= 100; i++) { //偶数 if(i%2==0){ eveSum += i; }else { //奇数 oddSum += i; } } System.out.println("0-100以内的奇数和是:"+eveSum); System.out.println("0-100以内的偶数和是:"+oddSum); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package com.muyu.javase.ProcessControl; public class ForDemo2 { //输出1-1000之间能被5整除的数,并且每行输出3个 public static void main(String[] args) { for (int i = 1; i <1000; i++) { if (i % 5 == 0) { System.out.print(i+"t"); } if (i % 15 == 0) { System.out.println('n'); } } } }
注:
- for 循环最先执行的是初始化步骤,可以声明一种数据类型,但是可以初始化一个或者多个循环控制的变量,也可以是空语句。
- 之后进行布尔表达式的检测,如果为true,循环体被执行,否则循环终止,开始执行循环体后面的语句。
- for( ; ; ){}是一个死循环。
7.4增强for循环:
增强for循环是Java5引入的一种主要用于数组或集合的for循环。
语法格式:
1
2
3
4for(声明语句:数组或者集合){ 代码块 }
如果熟悉python的,可以看出增强for循环,跟python的for循环(for i in list:)有些类似。
注:
- 声明语句中的数据类型必须跟数组元素的数据类型匹配,且该声明的变量作用域限定在循环体内。
- 增强for循环就是将数组中的元素逐个赋值给声明的变量进行操作,直到数组元素都遍历一遍为止。
8、break和continue
break:在任何循环语句的主体部分,均可用break控制循环的流程;break用于强行退出循环,执行break语句后,直接退出整个循环,不再进行循环操作。(break语句在switch语句中也可使用)
continue:continue语句用于提前终止某一次循环,跳过后面未执行的语句,直接进入下一次循环判断。
标签:是指后面跟一个冒号的标识符,如 lable:
java中唯一用到标签的地方就是在循环语句之前。在嵌套的循环中,在循环语句前设置标签,可以使break和continue中断指定标签的循环体。(不建议使用标签)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package com.muyu.javase.ProcessControl; public class ForDemo4 { public static void main(String[] args) { first:for (int i = 0; i < 10; i++) { for (int j = 5; j > 0; j--) { if (i==j){ System.out.println(i); System.out.println(j); continue first; //跳出到最外层的循环 } } } } }
最后
以上就是专注飞机最近收集整理的关于【day3---Java流程控制】的全部内容,更多相关【day3---Java流程控制】内容请搜索靠谱客的其他文章。
发表评论 取消回复