02 Java基础语法(变量+数据类型+运算符)(下)

简介: 02 Java基础语法(变量+数据类型+运算符)

02 Java基础语法(变量+数据类型+运算符)(上):https://developer.aliyun.com/article/1580133

2.4 运算符
2.4.1 算数运算符

两个操作数进行计算

操作符 描述
+ 加、求和
- 减、求差
* 乘、求积
/ 除、求商
% 模、求余
int n1 = 10;
byte n2 =4;
System.out.println(n1/n2);  //2
//如果两个数字都是int整数,结果还是int整数
double r =n1/n2;
System.out.println(r); //2.0
double r1 =(double)n1/n2;
System.out.println(r1);  //2.5
System.out.println(5.2%3);  // 2.2
System.out.println(-5.2%3);  // -2.2
System.out.println(3%5);  //3  无法整除的,商0余3
System.out.println(6%10);  //  6
System.out.println(-6%10);  //  -6
System.out.println(5%-10);  //  5
System.out.println(1%10);  //  1
//4687,求各个位上数字的和25
    public static void main(String[] args) {
        int num = 4678;
        int ge = num%10;
        int shi = num/10%10;
        int bai = num/100%10;
        int qian = num/1000;
        int sum = ge +shi +bai +qian;
        System.out.println(sum);
    }
2.4.2 算数运算符:一元运算符

(只有一个操作数)

操作符 描述
++ 递增,变量值+1
- - 递减,变量值-1
int a = 3;int b = 4;
int c = (++b)*2-(a--)%4+(a++)*5-(--b)/2+(--a);
System.out.println(c);
// 10-3%4+10-2+2 =17
//b=5 a=2   a=3  b=4 a=2
int i =10;
i=i++; (int k = i++;i=k)
i=i++;
i=i++;
System.out.println(i); //10

笔试考点

public class Demo {
    public static void main(String[] args) {
        //笔试考点
        int a =10;
        int b = a ++;
        System.out.println("b = " + b); //ib = 10
        System.out.println("a = " + a); //ia = 11
        int c = ++a;
        System.out.println("c = " + c); //ic = 12
        System.out.println("a = " + a); //ia = 12
        System.out.println(a++ + ++a); //ia = 12+14=26
    }
}
2.4.3 赋值运算符

等号右边值赋值给等号左边的变量。

操作符 描述
= 直接赋值
+= 求和后赋值
-= 求差后赋值
*= 求积后赋值
/= 求商后赋值
%= 求余后赋值
//+=和+的区别
byte b = 127;
b+=1;  //输出-128  不会类型提升
b++; //输出-128  也不会类型提升
//b=b+1;  //编译不通过,会类型提升Incompatible types. Found: 'int', required: 'byte'

注意:运算后赋值(复合运算)的,不会自动类型提升(++ – += -= /= %= *=)

2.4.4 关系运算符

两个操作数进行比较,结果是一个布尔值(true / false)。

操作符 描述
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

注意 float double 不要直接使用关系运算符比较(存储方式,精度丢失,近似存储,会出现误差)

用包装类double float提供的方法

2.4.5 逻辑运算符

两个boolean类型的操作数或表达式进行逻辑比较

操作符 语义 描述
&& 短路与(并且) 两个操作数,同时为真,结果为真
|| 短路或(或者) 两个操作数,有一个为真,结果为真
! 取反(非) 意为“不是”,真即是假,假即是真
int n1 =10;
int n2 =8;
System.out.println(n1<n2&&++n1>10);   //false &&短路与之后的不执行
System.out.println(n1);    //10 
System.out.println(n1>n2||++n1>10);   //ture ||短路或之后的不执行
System.out.println(n1);    //10 

前者false &&短路与之后的不执行

前者ture ||短路或之后的不执行

2.4.6 三元运算符

将判断后的结果赋,值给变量

操作符 语义 描述
? : 布尔表达式?结果1:结果2 当表达式结果为真,获得结果1当表达式结果为假,获得结果2
int java = 87;
String level = java>=90?"优秀":java>=80?"良好":"一般";
System.out.println(level);
//或者直接sout嵌套
int java = 92;
System.out.println(java>=90?"优秀":java>=80?"良好":"一般");
public class Demo {
    public static void main(String[] args) {
        //提示用户输入两个正整数并使用变量记录
        System.out.println("请输入两个整数");
        Scanner sc = new Scanner(System.in);
        int a =sc.nextInt();
        int b =sc.nextInt();
        //使用三目运算符找到最大值并打印
        int max = a > b ? a : b;
        System.out.println("最大值是 " + max);
        System.out.println("最大值是 " + (a > ib ? a : b));
    }
}
2.4.7 位运算符(详细见7种位运算符Markdown)

对数值类型数据进行按位操作;1表示true、0表示false。

操作符 语义 描述
& 按位与 二进制数据按位与操作
| 按位或 二进制数据按位或操作
~ 按位取反 二进制数据按位取反
^ 按位异或 二进制数据异或,相同为假、不同为真
>> 右移 二进制数据整体右移
<< 左移 二进制数据整体左移
>>> 无符号右移 二进制数据整体右移,符号位补0
public class Program {
    public static void main(String[] args) {
        int n1 = 6; //0000 0000 0000 0000 0000 0000 0000 0110
        int n2 = 11; //0000 0000 0000 0000 0000 0000 0000 1011
        System.out.println(n1&n2);  //2(0010)二进制数据按位与操作
        System.out.println(n1|n2);  //15 (1111)二进制数据按位或操作
        System.out.println(~n1);  //-7  即转换为1111111111111111111111111111111111111111111111111111111111111001按位取反(补码存储)
        System.out.println(n1^n2);  //13  (1101)按位异或,相同为假、不同为真
        
        int n11 = 5; //0000 0000 0000 0000 0000 0000 0000 0101
        int n22 = 7; //0000 0000 0000 0000 0000 0000 0000 0111
        System.out.println(n11&n22);  //5 (101)二进制数据按位与操作
        System.out.println(n11|n22);  //7 (111)二进制数据按位或操作
        System.out.println(~n11);  //-6  即转换为1111····1111 1010按位取反(补码存储)
        System.out.println(n11^n22);  //2  (010--2)按位异或,相同为假、不同为真
        //右移>>(相当于除2)左边补符号位
        int n3 = 20;    //二进制(1 0100)
        int n4=n3>>1;   //10(01010)  (最右右移1,最左补符号位,正数补0负数补1)
        int n5=n3>>2;   //5(101)
        int n6=n3>>5;   //0(移完了)
        int n7=n3>>32;  //32的倍数,不变
        //左移<<(相当于乘2)右边补0
        //无符号右移>>>(相当于除2)左边补0
        int n8 = 30;
        n8 = n8>>>1;  //15
        int n9 = -30;
        n9 = n9>>>1;  //2147483633
    }
}

右移>>(相当于除2)左边补符号位

左移<<(相当于乘2)右边补0

无符号右移>>>(相当于除2)左边补0

public class Program01 {
    //1.有一个整数8747,获取这个整数的二进制后四位
    //2.有一个整数8747,获取这个整数的二进制的第二个后四位
    public static void main(String[] args) {
        int x = 8747;
        //0010 0010 0010 1011
        System.out.println(x&0xF); //11
        System.out.println(x>>>4&0xF);//2
    }
}
//面试题:不使用第三个变量交换两个数字
public class Demo {
    public static void main(String[] args) {
        int x =10;int y = 20;
        //加减法;缺点,如果数据大可能会出现溢出
        x=x+y;
        y=x-y;
        x=x-y;
        //异或法
        x=x^y;
        y=x^y;
        x=x^y;
        System.out.println("交换后"+x+" "+y);
    }
}
2.4.7.1 字符串连接符:+

如果字符串和基本数据类型变量、常量连接以后,结果变成了字符串。

public class Demo1229 {
    public static void main(String[] args) {
        //提示用户输入一个正整数的秒数并使用变量记录
        //提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒
        System.out.println("请输入一个正整数的秒数:");
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        //将正整数的秒数拆分为时分秒后并使用变量记录
        //3666秒 =>1小时 1分钟 6秒钟
        //3666 / 3600 = 1小时   3666%3600 =66 /60=1分钟 3666%60=6秒钟
        int hour = num /3600; //拆分小时
        int min = num % 3600 / 60; //拆分分钟
        int sec = num % 60; //拆分秒钟
        //打印最终的拆分结果
        System.out.println("小时:" + hour + ",分钟:" + min + ",秒钟:" + sec);
        System.out.println("--------------------------------------------------------------------");
        //+可以作为字符串连接,又可以作为加法运算符
        //只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理
        System.out.println(hour + min +sec);  //8
        System.out.println(hour + min +sec+""); //8
        System.out.println(hour + min +""+sec);  //26
        System.out.println(hour + ""+min +sec); //116
        System.out.println(""+hour + min +sec); //116
        System.out.println(""+(hour + min +sec));  //8
    }

}
2.4.8 运算符优先级

以下从上往下,优先级由高到低

操作符优先级 结合性
[ ] ( ) { } 从左向右
! ~ ++ – -(负号) 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= instanceof 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= 从右向左

优先级:

()优先级最高,赋值=优先级最低,算数大于关系,关系大于逻辑,乘除大于加减,短路与大于短路非

综合性:

大部分运算符从左向右结合,单目、三目、赋值结合性从右往左结合

public class Demo1229 {
    public static void main(String[] args) {
        //单目 结合性
        int a = 10;
        int b = -~++a;
        int c = (-(~(++a)));
        System.out.println(b); //12
        System.out.println(c); //13
        //三目
        int java =88;
        String level1 =(java>=90?"优秀":(java>=80?"良好":"一般"));
        String level2 =java>=90?"优秀":java>=80?"良好":"一般";
        System.out.println(level2);
        //++ --优先级  JVM栈,临时变量,还是先运算++
        int num1 = 10;
        int num2 =num1++ ;
        System.out.println(num2);//10
        System.out.println(num1);//11
    }
}
2.4.9 表达式

表达式:使用运算符连接的变量或字面值,并可以得到一个最终结果

2.5 控制台录入

控制台录入指的是通过键盘输入数据与程序之间进行交互

程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。


导包语法:import 包名.类名; //将外部class文件的功能引入到自身文件中。


步骤:


导入Scanner类,import java.util.Scanner,


创建Scanner类型的变量(对象)


使用Scanner类的方法


.nextInt(); //获得整数


.nextDouble(); //获得小数


.next(); //获得字符串


.ext().charAt(0);//获得单个字符 char x = input.next().charAt(0);


如果输入了不匹配的数据,则会产生 java.util.InputMismatchException

//格式类型
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int age = input.nextInt();    //int
        System.out.println("请输入一个小数");
        double num = input.nextDouble();    //double
        System.out.println("请输入一个字符串");
        String name = input.next();   //String
        System.out.println("请输入一个字符");
        char x = input.next().charAt(0);    //字符串char
    }
}
//需求:控制台输入输出三门课程成绩,统计总分和平均分
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入java成绩");
        int java = input.nextInt();
        System.out.println("请输入sql成绩");
        int sql = input.nextInt();
        System.out.println("请输入html成绩");
        int html = input.nextInt();
        System.out.println("总成绩为" + (java + sql + html));
        System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数
        System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);
    }
}
2.6 编码(补充)

tem.out.println(“请输入一个字符”);

char x = input.next().charAt(0); //字符串char

}

}


```java
//需求:控制台输入输出三门课程成绩,统计总分和平均分
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入java成绩");
        int java = input.nextInt();
        System.out.println("请输入sql成绩");
        int sql = input.nextInt();
        System.out.println("请输入html成绩");
        int html = input.nextInt();
        System.out.println("总成绩为" + (java + sql + html));
        System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数
        System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);
    }
}
2.6 编码(补充)
目录
相关文章
|
2月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
45 12
|
2月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
1月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
76 0
|
2月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
2月前
|
Java
课时13:Java数据类型划分(布尔型)
观察布尔型的操作。布尔是一位数学家的名字,这个布尔发明了两个单词:True、False(一个表示真一个表示假)。一般布尔类型都只表示逻辑的计算结果。
|
2月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
存储 算法 Java
Java8语法最佳实践-什么是对象(上)
计算机革命起源机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。
228 0
Java8语法最佳实践-什么是对象(上)
|
存储 安全 Java
Java8语法最佳实践-什么是对象(下)
计算机革命起源机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。
117 0
|
3月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
241 60
【Java并发】【线程池】带你从0-1入门线程池
|
14天前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。