变量
什么是变量?
程序执行过程中,其值发生改变的量
变量的三要素
1)数据类型 2) 变量名 3)初始化值
格式
数据类型 变量名=初始化值;
数据类型
在java中,数据类型分为两大类型 1)基本数据类型:四类八种 (研究的都是基本类型) 整数类型:默认int byte 字节类型 占1个字节(8个比特位) 取值范围:-128~127 short 短整型 占2个字节 int 整数 4个字节 long 长整型 8个字节 注意事项:long的初始化值末尾必须加L或者l 浮点类型:默认类型double float 单精度 4个字节 注意事项:float的初始化值末尾必须加F或者f double 双精度 8个字节 字符类型:char 2个字节 初始化值:单引号括起来的单个内容 布尔类型:boolean 1个字节 取值范围 true,flase 不参与类型转换 2)引用数据类型:数组,类,接口
定义变量的注意事项
1)在java语言中,同一个变量不能重复定义 2)一行写一个变量,分号结尾(代码规范风格) 3)一行也可以定义多个变量(在面试题/笔试题中) 4)变量要么直接初始化,要么先定义,但是必须在使用前对其初始化
隐式类型转换
byte,short,char三者之间不进行相互转换,但是参与运算,优先转换为int类型(考点),long,float---double类型
强制类型转换
格式:目标数据类型 变量名 = (目标数据类型)(初始化/表达式) ; 注意:没有明确要求,尽量不用,因为可能损失精度!
举例:
class DataTypeDemo4{
public static void main(String[] args){
//定义两个变量
int a = 4 ;
byte b = 3 ;
//定义接受的结果类型
//byte result = a + b ; // b--> byte,----先提升int参与运算
//结果为int类型的7 :4个字节
//接受的类型:byte类型:占1个字节
//目标数据类型 变量名 = (目标数据类型)(初始化/表达式) ;
byte result = (byte)(a+b) ;
System.out.println("result:"+result) ; //byte类型的7
//类型不匹配
/*
ataTypeDemo4.java:20: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte result = a + b ; // b--> byte,----先提升int参与运算
^
1 个错误
*/
}
}
Java中的算术运算符
1)算术运算符 2)赋值运算符 3)关系(比较)运算符 4)逻辑运算符 5)位运算符 6)三元(三目)运算符
算术运算符
基本的算术运算符:+,-,*,/,%(模) /:默认取整 %:求余数
举例:
class OperatorDemo{
public static void main(String[] args){
//定义两个变量
int a = 3 ;
int b = 4 ;
//基本的运算
System.out.println("+:"+(a+b)) ;
System.out.println("-:"+(a-b)) ;
System.out.println("*:"+(a*b)) ;
System.out.println("/:"+(a*1.0/b)) ;
System.out.println("%:"+(a%b)) ;
//针对小数:在进行减法或者除法:可能永远近似某一个值,不会精确计算
//计算机---计算(伪计算):要进行小数精确计算:jdk提供了
//java.math包下 提供了类 BigDecimal:用来对小数进行精确计算!(常用类讲)
System.out.println(1.0 / 0.45) ;
}
}
扩展的算术运算符
++或者是--
场景1:
++或者--单独使用
无论++或者--在数据前面还是数据后:都是对当前数据本身自增1或者自减1
场景2:
++或者--参与运算使用
如果++或者--在数据的前面:需要先进行自增1或者自减1,然后再参与运算!
如果++或者--在数据的后面:先进行运算,然后再进行自增1或者自减1
赋值运算符
基本的赋值运算符: =
将=号右边的数据赋值给左边类型的这个变量
举例:
int a = 10 ; //将10赋值给int类型的变量a
=不能写成"=="
=是赋值
==:是比较运算符:比较两个数据相等
现在研究的是基本数据类型:==:比较数据值是否相等!
扩展的赋值运算符:+=,-=,*=,/=,%=
将符号右边的数据和左边的数据相加,然后再赋值给左边的这个变量
+=举例:
int a = 10 ;
a += 20 ;
类似于 a = a + 20 ;
比较(关系)运算符
比较(关系)运算符:!=,<,<=,>=,>,==
class OperatorDemo{
public static void main(String[] args){
int a = 10 ;
int b = 20 ;
int c = 15 ;
System.out.println(a>b) ; //false
System.out.println(a<=b) ; //true
System.out.println(a==b) ;//false
System.out.println(a!=b) ;//true
System.out.println("----------------------") ;
//==不能写成=
int m = 100 ;
int n = 200 ;
boolean flag = m == n ;
//boolean flag = m = n ;//==不能写成=
//将n的值赋值m,然后将m赋值flag
System.out.println(flag) ;
}
}
逻辑运算符
基本的逻辑运算符号
逻辑单与: & 并列关系(满足全部条件)
有false,则false
逻辑单或: | 或的关系:满足一个条件即可
有true,则true
逻辑异或: ^ 相同则为false,不同则为true
简单记忆:
男女关系
男女 女男 true
男男 女女 false
逻辑非: ! 非true,则false;非false则true
偶数个非是他本身
开发中经常会使用逻辑判断
举例:
用户登录的时候
需用if语句 逻辑判断
if(!(用户输入的用户名和数据库的用户名一致) || !(密码一致)){
//给用户提示:错误信息
}
&& || (扩展的逻辑运算符:逻辑双与和逻辑双或)
扩展的逻辑运算符
逻辑双与:&&
逻辑双或:||
逻辑单与&和逻辑双与&&有什么区别?
共同点:
都是能够表述"并列"关系
不同点:
逻辑单与&:无论左边的表达式是true还是false,右边都要执行!
逻辑双与&&:具有短路效果
左边的表达式如果是false,则右边就不执行了!
逻辑双||: 左边的表达式如果是true,则右边不执行了!
注意:只要有逻辑并列判断,优先采用的逻辑双与&&(或的关系判断:使用双或||)
三元运算符
格式:(表达式)? 1)执行true的结果:2)执行false的结果;
表达式:可以简单的也可以复杂的..
执行流程:
判断表达式是否成立,如果成立则执行1)
如果不成立,则执行2)
需求:
已知两个变量a,b分别进行初始化,求出两个数据的最大值!
需求: 没有告诉数据类型:都是int数据类型
定义三个变量,求三个变量的最大值
定义两个变量,比较两个数据是否相等
键盘录入
之前的程序,都是将变量定义死,直接赋值一个值;
所以改进,使用键盘录入数据,让程序更加灵活!jdk给我们提供类:
java.util.Scanner :一个简单的文本扫描器
使用步骤
1)导包: 在java语言中:只要不是java.lang包下的类都需要导入!
位置:在class上面
import java.util.Scanner;
2)固定格式: 创建键盘录入对象(文本扫描器对象)
Scanner 对象名 = new Scanner(System.in) ;
3)开始录入数据 :使用int类型举例
Scanner类的功能
public int nextInt():录入下一个int类型
友情提示 "请您输入一个数据:"
int 变量名 = 对象名.nextInt() ;
4)使用变量
举例:
import java.util.Scanner ;
class ScannerDemo{
public static void main(String[] args){
//2)创建键盘录入对象(文本扫描器对象)
Scanner scanner = new Scanner(System.in) ;
//3)提示并录入数据
System.out.println("请您输入一个数据:") ;
int x = scanner.nextInt() ;
//4)使用这个数据
System.out.println("您输入的数据是:"+x) ;
控制流程语句
格式一
if(表达式){
语句1;
}
格式二
if(表达式){
语句1;
}else{
语句2;
}
格式三
针对多种情况进行判断
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
...
...
}else{
语句n;
}
例题
import java.util.Scanner ;
class ifDemo3{
public static void main(String[] args){
//创建Scanner键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("您输入一个学生的成绩:") ;
int socre = sc.nextInt() ;
/*
90 - 100 优秀
80 - 90 较好
70 - 80 良好
60 - 70 及格
60以下 不及格
*/
/*
if(socre >=90 && socre <= 100){
System.out.println("成绩优秀!") ;
}else if(socre>=80 && socre<90){
System.out.println("成绩较好!") ;
}else if(socre>=70 && socre<80){
System.out.println("成绩良好!") ;
}else if(socre>=60 && socre<70){
System.out.println("成绩合格") ;
}else{
System.out.println("成绩不及格") ;
}
*/
/*
程序: 需要测试:
测试错误数据
测试正确的数据
测试边界数据
*/
if(socre >100 || socre <0){
System.out.println("输入数据不合法...") ;
}else if(socre >=90 && socre <= 100){
System.out.println("成绩优秀!") ;
}else if(socre>=80 && socre<90){
System.out.println("成绩较好") ;
}else if(socre>=70 && socre<80){
System.out.println("成绩良好!");
}else if(socre>=60 && socre<70){
System.out.println("成绩及格") ;
}else{
System.out.println("不及格") ;
}
}
}
switch语句
switch语句格式:
switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break ;
...
...
default:
语句n;
break ;
}
注意事项:
1)case语句后面的值只能是常量,不能是变量(Java是一个强类型语言的:语法结构非常严谨)
javascript语言(前端):弱类型语言: switch语句的case后面既可以是常量,也可以是变量
2)书写switch语句的时候,case语句必须存在break语句,结束switch语句的!
如果没有书写break语句,会造成"case穿透!"现象
3)switch语句的结束条件
a)遇见break结束
b)程序默认执行末尾结束
4)default语句:可以在switch语句中的 任何位置
如果在语句中,必须携带break; 否则case穿透
如果在语句的末尾,break是可以省略的,不建议!
import java.util.Scanner ;
class SwitchDemo{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入一个数据(1-7):") ;
int week = sc.nextInt() ;
switch(week){
case 1:
System.out.println("星期一") ;
break ;
case 2:
System.out.println("星期二") ;
break ;
case 3:
System.out.println("星期三") ;
break ;
case 4:
System.out.println("星期四") ;
break ;
case 5:
System.out.println("星期五") ;
break ;
case 6:
System.out.println("星期六") ;
break ;
case 7:
System.out.println("星期日") ;
break ;
default:
System.out.println("非法数据!") ;
break ;
}
}
}