第一周:总结
1.变量_数据类型
变量:程序执行过程中,值发生改变的量!
三要素:
1)数据类型
2)变量名
3)初始化值
针对Java语言数据类型的划分:
两大类:
基本数据类型
四类八种
整数类型
byte: 字节类型 占1个字节 记住byte类型的范围:-128~127(考点)
short:短整型:占2个字节
int(整数默认的类型):整数类型 占4个字节
long:长整型:占8个字节
应用场景:定义时间(系统时间换算成时间毫秒值)相关的变量(都是用long)
浮点类型:(小数默认的就是double类型)
单精度:float类型 占4个字节
双精度:double类型 占8个字节
字符类型:
char类型 占2个字节
布尔类型 占1个字节
boolean类型(true/false)
应用场景:用在逻辑判断中,布尔类型一般不参与运算!
引用数据类型(研究的这个类型) :面向对象部分讲解
数组,类(具体类,抽象类),接口
注意事项:
1)要遵循的变量的三要素
数据类型 变量名 = 初始化值;
2)先定义,但是必须在使用之前对这个变量进行初始化,否则编译不通过!
3)Java是一种强类型,不能重复定义变量
4)同一行上可以定义多个变量,一般我们开发的时候,不建议这样使用(笔试题/面试题)
代码的编写风格:一行一句话
现在写的这些变量都在main方法中写---->局部变量(在方法定义或者在方法声明上)
变量在进行运算的时候,需要保证这些数据的类型一致!
Java存在默认类型提升(基本数据类型):
byte,short,char三者不会相互转换,一旦这三个中间的某个类型参与运算了,它会提升
int类型(考点)---long类型--double类型
注意:
boolean类型的变量不会进行数据类型的相互转换(true/false)
Java中存在强制类型转换:
语法格式:
目标数据类型 变量名 = (目标数据类型)(变量值) ;
注意事项:
强制类型不要随便使用,损失数据的精度!
适用范围:基本数据类型以及引用类型!
2.运算符
1.算术运算符
Java中的运算符号的分类:
算术运算符:
基本的算术运算符:
+,-,*,/(默认取整),%(模)
扩展的算术运算符: ++或者--
赋值运算符:
关系(比较)运算符
逻辑运算符
位运算符
三目(三元)运算符
扩展的算术运算符: ++或者--
++或者--:
情况1:
单独使用:无论操作符++或者--在数据的前面还是数据的后面,都是对当前数据本身的值进行
自增1或者自减1;
情况2:
参与运算使用:
1)如果++或者--在数据的前面,是先对当前数据值进行自增1或者自减1,然后参与运算
2)如果++或者--在数据的后面,先运算,然后在对该数据值本身进行自增1或者自减1
2.逻辑运算符:
逻辑运算符的分类:
基本的逻辑运算符:
逻辑单与 & :有false,则false
逻辑单或 | :有true,则true
逻辑异或 ^ :相同则为false,不同则为true
简单记忆:男女关系
男男(false) 女女(false) 女男(true) 男女(true)
逻辑非 ! :!true,则false;非false,则true;偶数个非是它本身的结果
扩展的逻辑运算符
逻辑双与 &&
逻辑双或 ||
面试题:
逻辑双与&&和逻辑单与&的区别?
共同点:
都是并列关系,有false,则false
逻辑双与&&最大的不同点:
存在逻辑双与&&短路效果: (经常在笔试题中选择题!)
逻辑双与&&连接的表达式左边如果结果为false,右边的表达式不执行了;
逻辑双|| :逻辑双||连接的表达式左边为true,右边不执行了!(逻辑双||的短路效果)
开发中,经常使用的逻辑双与&&或者逻辑双或||
3.位运算符:
位运算符 :针对两个具体的数据值进行运算
基本的位运算符
位与&
位或|
位异或^
~反码(按位取反,0变1,1变0)
移动符号
<<(左移),>>(右移),>>>(无符号右移)
位异或的特点:
一个数据对另一个数据位移或两次,结果是它本身
4.关系运算符:
关系(比较)运算符
<,>,<=,>=,==,!=
特点:使用比较符合连接的表达式无论是简单表达式还是复杂的表达式,结果都是boolean类型
注意:
== 比较的两个数据值是否相等,不要写成= (赋值运算符)
数学表达式: 3<=x<=5
Java语言: x>=3 && x<=5 并列关系
5.赋值运算符:
赋值运算符:
基本的赋值运算符:
=
将等号右边的值赋值给等号左边的变量;
int a = 10 ; 将整数10赋值给int类型的变量a
注意:= 不能写成==(比较运算符)
扩展的赋值运算符
+=,-=,*=,/=,%=...
举例:
+=
将等号左边的数据和右边的数据相加,在赋值给左边的变量
6.三目运算符:
三元运算符也称为(三目运算符)
格式:
(表达式)? 执行true的结果:执行false的结果;
3.键盘录入数据
刚才这些程序,定义变量的写死了,程序不灵活;
为了程序的灵活性,引入Scanner类(java.util.Scanner):文本扫描器
今天先使用这个类录入int类型数据(常用类中讲解里面判断功能/获取功能)
基本使用:
1)导包 在Java中只要不是java.lang包下的类都需要导包
位置在class上面, 格式import java.util.Scanner; (用哪个类导哪个类)
2)固定格式:创建一个文件扫描器对象
Scanner 对象名 = new Scanner(System.in) ;
3)友情提示:"请您输入一个整数数据:"
4)接收数据:
int 变量名= 对象名.nextInt() ;
5)输出变量名即可!
4.流程控制语句:
Java中的流程控制语句:
三大类:
1)顺序结构语句
代码从上到下依次加载!
2)选择结构语句
if结构语句
三种格式:
if(条件表达式){
语句;
}
//开发中:if格式2使用居多
if(条件表达式){
语句1;
}else{
语句2;
}
if(条件表达式1){
语句1;
}else if(条件表达式2){
语句2;
.....
}else{
语句n+1;
}
switch结构语句
switch(){
case 1:
语句1;
break;
case 2:
语句2;
break;
....
default:
语句1;
break;
}
switch语句使用的注意事项:
1)default语句是可以放在语句中的任何位置,不影响执行流程!
(建议default语句使用的时候放在语句末尾)
如果放在语句中,最好带上break,否则会造成case穿透!
2)switch语句的结束条件:
遇见break结束或者程序默认执行到末尾!
3)case语句后面的值只能是常量,不能变量(Java是一种强类型语言)
使用If语句的注意事项:
1)有左大括号{的地方不能有分号,有分号的地方不能有左大括号{
2)if语句中如果是单个语句,{}可以省略,但是不建议!
3){}表示一个作用域,定义变量需要在{}这个作用域范围内使用
三元运算符和if格式2的区别?
三元运算符连接的是两个数据的数据值(针对这个是数据值进行比较或者判断)
if格式2是一种流程控制语句:
范围要比三元运算符大,不仅仅可以判断两个数据数据值还可以操作具体语句
能够使用if格式2实现的不一定能够使用三元运算符;
但是如果能够三元运算符实现的一定能够使用if格式2
(在开发中,针对业务逻辑判断还是使用if格式2)
1)switch后面的表达式需要和case语句中的值进行匹配
如果值1匹配了,就执行语句1,遇见break 结束switch语句;
如果值1不匹配,就看值2是否匹配,如果匹配,执行语句2,遇见break结束;
...
如果上面都不匹配,执行default中的语句n+1,break结束语句;
break ; 属于跳转控制语句中一种: "结束,中断" ,
应用场景:是在switch以及loop(循环语句中使用)
面试题:
switch后面表达式可以是什么样的数据类型?
一般情况:可以byte,short,char,int类型的
JDK5以后,是可以跟枚举 (enum)类型的 (引用类型)
JDK7以后,是可以跟String类型的(引用类型)
2.循环结构语句:
循环语句的格式:
for循环
while循环
do-while循环
for循环的格式
for(初始化语句;条件表达式;步长语句(控制体语句)){
循环体语句;
}
执行流程:
1)进入for循环,给变量进行初始化,执行初始化语句
2)判断条件表达式是否满足条件 (true的结果),然后执行循环体语句
3)执行循环体完毕之后,执行步长语句(对变量进行操作:++/--)
4)继续判断条件表达式是否成立,如果成立,再次执行循环体语句----->再次执行步长语句
....
...
..
5)当前条件表达式不成立,for语句结束!
for:
需求:
控制台输出所有的"水仙花数";
分析:
什么是水仙花数:水仙花数指的是三位数---->范围:使用for循环 100 到1000之间(不包含)
水仙花数的特点:
三位数的每个位上的数据的立方之和是这个数据本身!
举例:
153 = 1*1*1 +5*5*5 + 3*3*3
关键:如何确定每个位上的数据:
定义三个变量,分别获取每个位上的数据
int ge = 该数据本身 % 10 ; %:模 (求余数)
int shi = 该数据本身 /10 % 10; //153 ---十位的数据:5
int bai = 该数据本身/10 /10 %10 ;
确定了每个位上的数据了,只要满足条件: 该数据本身 == ge*ge*ge+shi*shi*shi +bai*bai*bai
输出这个数据---"水仙花数"
*/
class ForDemo3{
public static void main(String[] args){
//第一步:确定范围:水仙花 三位数:for循环 明确了范围
for(int x = 100; x < 1000; x ++){
//获取每个位上的数据
int ge = x % 10;
int shi = x /10 % 10 ;
int bai = x /10 /10 % 10;
//满足的条件:满足条件: 该数据本身 == ge*ge*ge+shi*shi*shi +bai*bai*bai
if(x==(ge*ge*ge+shi*shi*shi +bai*bai*bai)){
//将x进行输出
System.out.println(x);
/*
153
370
371
407
*/
}
}
}
}
5.while:
while循环
基本格式
while(条件表达式){
循环体语句;
步长语句;
}
扩展格式:(使用居多)
初始化语句 ;
while(条件表达式){
循环体语句;
步长语句;
}
执行流程:
1)先执行初始化语句,该变量进行初始化
2)判断条件表达式是否成立,如果成立,先执行循环体语句,----->执行步长语句
3)继续判断条件是否成立,如果还成立,继续在执行循环体语句----->执行步长语句
..
...
最终,条件表达式不成立,while循环结束!
2.0
while循环和for循环的区别?
1)两种循环格式不一样
while循环---->
从内存角度考虑,while循环结束了,依然可以访问循环中的变量(消耗内存空间)
for循环----->
从内存角度考虑,for循环结束了,不能访问变量(变量生命周期随着for循环的结束而结束),比较省内存空间
2)从应用场景来说:
一般情况:如果明确循环次数或者明确循环的范围,优先考虑使用for循环
举例:给3次机会,模拟用户登录.. 可以使用for循环
如果不明确循环次数或者不明确的范围,使用while循环操作
举例:
猜数字游戏,(产生的随机和用户录入的数据进行比较)
---->这种情况:使用while循环操作
例题:
//猜数字小游戏
//java.lang.Math类:数学运算的类
//方法:获取随机数的方法:public static double random() 取值范围:[0.0,1.0)
键盘录入一个数据:整数类型(int) 和随机数据比较,
如果大了,提示"您录入的数据大了"
如果小了,提示"您录入的数据小了"
相等,提示"恭喜您,猜中了"
附加条件:统计 多少次猜中了
*/
//导包
import java.util.Scanner;
class WhileTest{
public static void main(String[] args){
//获取一个随机数
//double d = Math.random() ;
//System.out.println(d) ;
//想求出:1-100之间的随机数
int number = (int)(Math.random()*100+1); //double
//System.out.println(number) ;
while(true){ //不知道录入多少次,使用while死循环
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并接收
System.out.println("请您输入一个数据:");
int guessNum = sc.nextInt() ;
//选择结构语句
if(guessNum > number){
System.out.println("您录入的数据大了...") ;
}else if(guessNum < number){
System.out.println("您录入的数据小了...") ;
}else{
System.out.println("恭喜您,猜中了...") ;
break ; //结束循环! (中断,结束)
}
}
}
}