概述
1、运算符
- 算术运算符:+, -, *, /, %,++, –
public 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
public 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类型
- 逻辑运算符:与(&&),或(||),非(!)
public 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
public 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
- 扩展运算符:+=,-+,*+,/=
public 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
}
}
- 幂运算等其他运算需要使用其他工具类来进行运算
public class Exponentiation {
public static void main(String[] args) {
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
2、包机制
为了更好的组织类,java提供了包机制,用于区别类名的命名空间。
包语句语法为:
package pkg1[.pkg2[.pkg3...]];
一般是利用公司的域名倒置作为包名;例如com.baidu.www
Java中包的导入:
import package1[.package2[.package3]].classname //导出某个包里面的某个类
import package1[.package2[.package3]].* //导出某个包里面的所有类
package 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文档;
参数信息:
/**
* @author 作者名
* @version 版本号
* @since 最早使用的JDK版本
* @param 参数名
* @return 返回情况
* @throws 异常跑出情况
*/
使用DOS命名生成JavaDoc文档;
javadoc -encoding UTF-8 charset UTF-8 classname.java
使用IDEA生成JavaDoc文档:
菜单栏>>>Tools>>>Generate JavaDoc
4、Scanner(用户输入)对象
java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户输入。
基本语法:
Scanner input = new Scanner(System.in)
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNextLine()方法判断是否还有输入。
package 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()不能获取带有空格的字符串
package 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()可以输出空格
package 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的结构。
package 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的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行;
顺序结构是最简单的算法结构
顺序结构中:语句与语句之间,框与框之间都是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
package 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 单选择结构:
if(布尔表达式){
//布尔表达式为true执行
语句块
}
- if双选择结构
if(布尔表达式){
//布尔表达式为true执行
语句块
}else{
//布尔表达式为false执行
语句块
}
- if多选择结构:只会执行一个满足条件的语句块
if(布尔表达式1){
//布尔表达式1为true执行
语句块
}else if(布尔表达式2){
//布尔表达式2为true执行
语句块
}else if(布尔表达式3){
//布尔表达式3为true执行
语句块
}else{
//以上布尔表达式都不为true的时候执行
语句块
}
- if嵌套结构(if里面嵌套if)
if(布尔表达式1){
//布尔表达式1为true执行
语句块
if(布尔表达式2){
//布尔表达式2为true执行
语句块
}
}
6.2 switch多选择结构
switch…case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
switch(变量表达式){
case value2:
语句
break;//可选
case value2:
语句
break;//可选
case value3: //可以有任意数量的case语句
语句
break;//可选
default:
语句 //可选
}
switch 语句中的变量类型可以是
- byte,short,int,char
- 从javaSE7开始,变量类型支持String类型的字符串
- case 标签必须是字符串常量或者字面量。
package 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是一种先后测试循环结构,也是最基本的循环:
while(布尔表达式){
//布尔表达式为true执行
循环语句
}
只要布尔表达式为true,循环就会一直执行下去,陷入死循环。
实际业务编程要尽量避免死循环。需要一个让表达式失效的方式来结束循环。
package 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循环,如果满足条件就执行,不满足条件,则不进入循环。
do{
语句块//至少执行一次,while的布尔表达式为true则继续执行。
}while(布尔表达式);
do…while循环与while循环的主要差别就是do…while循环至少会循环一次;
while循环是先判断再执行,do…while循环先执行再判断
package 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循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化变量,布尔表达式,更新变量){
//布尔表达式为true的时候执行
语句块
}
package 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);
}
}
package 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循环。
语法格式:
for(声明语句:数组或者集合){
代码块
}
如果熟悉python的,可以看出增强for循环,跟python的for循环(for i in list:)有些类似。
注:
- 声明语句中的数据类型必须跟数组元素的数据类型匹配,且该声明的变量作用域限定在循环体内。
- 增强for循环就是将数组中的元素逐个赋值给声明的变量进行操作,直到数组元素都遍历一遍为止。
8、break和continue
break:在任何循环语句的主体部分,均可用break控制循环的流程;break用于强行退出循环,执行break语句后,直接退出整个循环,不再进行循环操作。(break语句在switch语句中也可使用)
continue:continue语句用于提前终止某一次循环,跳过后面未执行的语句,直接进入下一次循环判断。
标签:是指后面跟一个冒号的标识符,如 lable:
java中唯一用到标签的地方就是在循环语句之前。在嵌套的循环中,在循环语句前设置标签,可以使break和continue中断指定标签的循环体。(不建议使用标签)
package 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流程控制】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复