关键字
:被Java语言赋予特定含义的单词
class: 含义: 定义一个类 (代表Java中最基本的单元)
public,private:私有的
protected:受保护的
static
void
goto/const:两个是作为保留字使用!
标识符
:就是给类,接口,变量,方法,常量等起名字的字符序列! ( 起名字需要:见名知意)
标识符的组成:1.26个英文(大小写字母)2.数字字符3.$符号4.下划线_符号
给类起名字: 单个单词: 当前单词的首字母大写,其余小写
class Demo{}
多个单词:遵循 "大驼峰"命名法: 每一个单词的首字母大写,其余小写
class HelloWorld{}
class MakeNameDemo{}
给变量(方法)起名字是一样
单个单词:单词字母全部小写
变量: int price = 100 ;
多个单词:第一个单词字母小写,从第二个单词开始:每一个单词首字母大写("小驼峰命名法")
变量: int applePrice = 50 ;
方法名: public static void checkUserName() 自定义静态方法
给常量命名:
单个单词:单词字母全大写
HEELO
多个单词:每个单词字母全部大写,单词和单词之间使用下划线_
HELLO_WORLD
标识符的注意事项: 1. 标识符不能是Java中的关键字 2.数字不能作为标识符的开头! 3.Java严格区分大小写,但是在给类,接口,方法,变量等起名字,必须要见名知意!
*/
常量
: 程序在执行过程中,其值是固定不发生改变的量!
分类:
1)字面值常量
a)字符串常量 : "hello" 双引号包含起来字符串+任何数据="新的字符串" 任何数据+字符串 ="新的字符串"
b)字符常量 : 'a','A','0' 单引号包含起来的内容
不参与运算:它就是固定的字符(键盘上的按键---字符)
会存在ASCII码表
当字符'a',参与运算:就需要找ASCII码表的值: 97(小写字母字符)
'A':65(大写字母字符),'B':66 'C' :67
'0':48(数字字符),'1':49...
c)整数常量: 100,50 整数 默认为十进制)
d)小数常量: 3.14
e)布尔常量:true/false
f):null:空常量 应用在"引用数据类型" 的默认值
2)自定义常量: 跟 关键字final有关系
进制
二进制,逢二进1,由0,1组成 ,以"0b"开头
八进制,逢八进1,由,0,1,2,3,4,5,6,7组成 ,以"0"开头
十六进制,逢十六进1,由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,以"0x"开头
十进制:逢十进1, 整数默认
变量
在程序的执行过程中,其值发生改变的量!
变量的三要素
1)数据类型 ----- "一种限定"
2)变量名称 ----- "符合 标识符的规则"
3)初始化值 ----- 根据数据类型,给变量名称赋值!
Java中的数据类型的划分:
基本数据类型
四类八种:默认int(根据具体需求)
整数类型
byte 字节类型 使用范围:-128~127 占用1个字节
short 短整型 占2个字节
int 整数默认类型 (-2^31 - 2^31-1) 占4个字节
long 长整型 (定义系统时间---换算毫秒值) 占8个字节
注意事项:定义long类型,需要在初始化值的后面加上一个标记(L/l)
浮点类型:默认double
float 单精度 占4个字节
注意事项:需要定义的float 需要在值的后面加标记:F/f
double 双精度(默认类型) 场景:商品价格 占8个字节
字符类型
char 字符 占2个字节
布尔类型(不会进行类型转换:仅仅只是表示逻辑判断! 结果不是true/false)
boolean 占1个字节
(基本数据类型 除了 boolean,不参与运算! 变量在进行运算的时候,需要保证数据类型一致! Java中的隐式类型转换 :默认类型提升 例:int a = 3 byte b = 4 ; byte c = a + b ;
Java中的强制类型转换:
目标数据类型(目前使用基本类型) 变量名称 = (目标数据类型)(初始化值);
byte c = (byte)(a + b) ;
byte,short,char三者之间不转换,一旦参与运算,先转换为int类型!)
引用数据类型: 数组(基本类型,引用类型),类(具体类,抽象类),接口
int[] arr
String[] args
算数运算符
基本的算术运算符: +,-,*,/(默认取整),%(取余数)
扩展的算术运算符: ++,-- 场景:统计 / 循环语句中使用
单独使用++/--:无论数据前还是后,都是自增1或者自减1
参与运算:
参与运算使用:++/--数据的后面:先进行运算,然后自增或者自减1!
参与运算使用:++/--数据的前面:先进自增1或者自减1,然后参与运算!
赋值运算符:
1. 最基本的赋值运算符
=
将=右边的数据赋值左边的变量
int x = 10 ;
将10这个数据赋值给int类型的变量x
注意:=不能写成==(比较运算符)
2.扩展的赋值运算符:
+=,-=,*=,/=,%=
int y = 20 ;
y += 30 ; --- 类似于 :y = y + 30 ;
将+=右边的数据和左边的数据相加,在将结果赋值给左边的变量y
例:short s = 1 ;
1)s = s + 1 ;
2)s +=1 ;
哪一句代码编译失败,如何解决;哪一行代码编译成功,说明原因!
考点: 扩展的赋值运算的特点
s=s+1 不兼容 需要提升类型
+=,-=,*=,/=,%= :存在特点 :隐藏了强制类型转换
s += 1 ; <==>等价于 s = (short)(s+1) ;
比较运算符(关系)
<,<=,,>,>=,==,!=
用法:class OperatorDemo{
public static void main(String[] args){
//定义三个变量
int x = 3 ;
int y = 4 ;
int z = 3 ;
System.out.println(x >= z) ; // x>z或者是x==z
System.out.println(y<z) ; //false
System.out.println(x == z) ; //比较两个数据是否相等
//System.out.println(x = z) ; //将z赋值x,将x值留下来
System.out.println(y != x) ; //判断y和x不相等
}
}
逻辑运算符
基本的逻辑运算符
逻辑单与&: 并列关系
特点:有false,则false!
逻辑单或|: :满足一个即可
特点: 有true,则true
逻辑异或^:
特点:相同则为false,不同则为true
简单记:男女关系
男女,女男 : true
女女,男男 : false
逻辑非!:
非true,则false;非false,则true;偶数给非是它本身!
应用场景:
扩展的逻辑运算符
逻辑双与&&:
逻辑双或||:
逻辑非!:
非true,则false;非false,则true;偶数给非是它本身!
应用场景:
在登录的时候,如果用户名和密码不一致,提示"登录失败"
扩展的逻辑运算符:
&&(逻辑双与),||(逻辑双或)
面试题:
逻辑双与&&和逻辑单与&
共同点:当多个条件,有一个不满足,就不成立! 并列关系
有false,则false
逻辑单与&:无论符号左边的表达式是true还是false,右边都需要执行!
逻辑双与&&:
具有短路效果!
如果符号左边的表达式为false,则右边的表达式不会执行了!
逻辑性比单与&更强一些,开发经常使用逻辑双&& !
逻辑双或||:
左边的表达式如果为true,右边不执行!
位运算符:
针对具体的数据值进行运算!
位与&:
有0,则0
位或|:
有1,则1
位异或^:
相同则为0,不同则为1
~反码 :对一个数据进行反码:按位取反(全部0变1,1变0)
位运算之位移符号
<<:左移
将数据的补码进行左移动,右边不够的补0,左边多余丢弃掉
特点:将 <<符号左边的数据乘以2的移动次幂
面试题:
请用有效的数据方式写出2 * 8的结果 16
2 << 3 2 * 2 ^3
>>:右移
将数据的补码右移动;如果最高符号位为0,左边补0;如果最高符号位为1,左边补1...
特点:
将>>符号左边的数据 除以2的移动次幂
>>>:无符号右移
将数据的补码右移动,无论最高符号位为0还是1,左边都补0...
三元运算符(三目)
格式
(表达式)? 执行成立的结果:执行false的结果;
执行流程:
1)首先判断表达式是否成立
2)如果成立,执行成立的结果
3)如果不成立,就false的结果
需求:
键盘录入两个数据,判断两个数据是否相等! (true/false:布尔类型) (三元)
流程控制语句
1.顺序结构
2.选择结构语句
if语句
switch语句
if语句
三种格式
第一种格式
应用场景:针对单个条件进行判断
格式:
if(表达式){
语句;
}
执行流程:
首先判断表达式是否成立,
如果成立,则执行语句;
否则不成立,不会执行!
注意事项:
1)if的后面不能有;
if(表达式);{} 错误语法
有左大括号的地方不能有分号;有分号的地方不能有左大括号
2)如果使用if格式1,里面的语句是条语句,
{}是可以省略的!,不建议省略!
if语句格式2
if(表达式){
语句1;
}else{
语句2;
}
执行流程:
首先判断表达式是否成立,
如果成立,执行语句1;
否则,执行语句2
例子:
应用场景:针对两种情况进行判断
需求:
键盘录入一个字符串 username 以及密码 password
使用这个用户名以及密码和已知存在用户名和密码进行匹配,
如果一致,提示"用户登录成功",否则"登录失败!"
import java.util.Scanner ;
class IfDemo2{
public static void main(String[] args){
//已经存在用户名和密码
String name = "admin" ;
String pwd = "admin" ;
System.out.println("---------------欢迎访问xxx系统---------------------") ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提供并录入数据
System.out.println("请输入用户名:") ;
String username = sc.nextLine() ;
System.out.println("请输入密码:") ;
String password = sc.nextLine() ;
//判断:if...else...
if(name.equals(username) && pwd.equals(password)){
System.out.println("登录成功...") ;
}else{
System.out.println("对不起,登录失败!...") ;
}
while(true){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提供并录入数据
System.out.println("请输入用户名:") ;
String username = sc.nextLine() ;
System.out.println("请输入密码:") ;
String password = sc.nextLine() ;
//判断:if...else...
if(name.equals(username) && pwd.equals(password)){
System.out.println("登录成功...") ;
break;
}else{
System.out.println("对不起,登录失败,重新输入!") ;
}
}
if格式3
场景:针对多个情况进行判断
格式
if(表达式1){
语句1;
}else if(表达式2){
语句2;
}else if(表达式3){
语句3;
}else{
语句n+1 ;
}
流程:
首先,判断表达式1是否成立,成立,执行语句1
否则,判断表达式2是否成立,成立,执行语句2
否则,判断表达式3是否成立,成立,执行语句3
....
如果上述都没有匹配的结果:执行else的语句;
键盘录入一个学生的成绩(总分100分),判断学生登记
90~100 优秀
80~90 较好
70~80 良好
60~70 及格
60分以下 不及格
开发中:使用if语句格式2或者格式1
例子:
import java.util.Scanner ;
class ifDemo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in) ;
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("不及格") ;
}
1)键盘录入两个数据,获取两个数据中的最大值 (if语句)
2)键盘录入三个数据,获取三个数据中的最大值(if语句完成)
3)键盘录入两个数据,比较两个数据是否相等(if语句)
4)键盘录入一个数据,判断这个数据是否是偶数(if语句完成!)
*/
import java.util.Scanner;
class IfTest{
public static void main(String[] args){
//键盘录入两个数据,获取两个数据中的最大值
Scanner sc = new Scanner(System.in) ;
//提示并录入
System.out.println("请输入第一个数据:") ;
int a = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int b = sc.nextInt() ;
//定义变量max
int max ;
if(a > b){
max = a ;
}else{
max = b ;
}
System.out.println("两个数据中的最大值是:"+max) ;
System.out.println("-----------------------------") ;
//)键盘录入三个数据,获取三个数据中的最大值(if语句完成)
//提示并录入
System.out.println("请输入第一个数据:") ;
int x = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int y = sc.nextInt() ;
System.out.println("请输入第三个数据:") ;
int z = sc.nextInt() ;
//使用中间变量的方式
/*
int temp ;
if(x > y){
temp = x ;
}else{
temp = y ;
}
//temp和z进行比较
int max2 ;
if(temp > z){
max2 = temp ;
}else{
max2 = z ;
}
*/
//方式2:使用if语句嵌套if语句
/*
if(表达式){
if(表达式1){
}else{
}
}else{
if(表达式2){
}else{
}
}
*/
int max2 ;
if(x > y ){
//成立
if(x > z ){
//成立
max2 = x ;
}else{
max2 = z ;
}
}else{
//不成立
if(y>z){
max2 = y ;
}else{
max2 = z ;
}
}
System.out.println("三个数据中的最大值是:"+max2) ;
System.out.println("-----------------------------") ;
System.out.println("请输入第一个数据:") ;
int m = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int n = sc.nextInt() ;
boolean flag ;//接收变量
if(m==n){
flag = true ;
}else{
flag = false ;
}
System.out.println("flag:"+flag) ;
System.out.println("-----------------------------") ;
System.out.println("请输入一个数据:") ;
int number = sc.nextInt() ;
if(number % 2 == 0 ){
System.out.println("偶数") ;
}else{
System.out.println("奇数") ;
switch语句
格式:
switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break;
...
default:
语句n+1;
break ;
}
执行流程:
首先表达式接收一个值
然后和case语句 值1比较,如果成立,执行语句1,break 结束switch
值1不匹配,判断和值2是否匹配,如果匹配成功,执行语句2,结束switch
...
...
上面case 语句都不成立,
执行default语句,执行语句n+1,结束switch!
switch语句的注意事项
1)case语句的后面只能是常量 (Java是一个强类型语言)
前端:javascript :switch语句的case后面可以常量也可以变量
2)break语句:不要轻易省略掉, 会造成case 穿透现象(此时,
如果跟某个case已经匹配,但是没有语句break,下面的case就不会对比,直接执行语句)
break:结束,中断 :结束switch
3)switch语句的结束条件
a)语句break结束
b)程序默认执行的到末尾!
4)default语句可以在switch语句中的任何位置,不影响执行流程!
当前case后面的都匹配,执行default语句
如果default语句在语句中的话,break语句 不能省略!
如果default语句在switch末尾的话,break语句是可以省略!
面试:
switch(表达式):表达式它可以是什么数据类型?
最基本的类型:int,byte,char
jdk5以后:可以跟枚举类(enum)
JDK7以后:String类型
需求:
键盘录入一个数据,判断星期
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7 星期日
*/
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(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break;
...
default:
语句n+1;
break ;
}
*/
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("对不起,没有该星期") ;
将键盘录入一个月份,判断季节 (利用case穿透)
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季
*/
import java.util.Scanner ;
class SwitchTest{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请输入一个数据(1-12):") ;
int month = sc.nextInt() ;
//使用switch来判断
switch(month){
case 3:
case 4:
case 5:
System.out.println("春季") ;
break ;
case 6:
case 7:
case 8:
System.out.println("夏季") ;
break ;
case 9:
case 10:
case 11:
System.out.println("秋季") ;
break ;
case 12:
case 1:
case 2:
System.out.println("冬季") ;
break ;
default:
System.out.println("对不起,您输入的数据不合法") ;
break ;
}
}
for循环的格式:
for(1)初始化语句;2)条件语句;4)步长语句(控制体语句)){
3)循环体语句;
}
流程:
1)初始语句给当前循环中的变量赋值:执行一次
2)接下来执行条件语句,判断条件语句是否成立
3)如果条件语句结果成立:true,执行3)循环体语句
4)执行控制体语句++/--,
循环了
5)继续去判断条件语句是否成
6)成立,继续执行循环体语句...
...
...
当前条件语句不成立,for循环结束!
while循环
初始化语句;
while(条件表达式){
循环体语句
控制体语句;
}
//执行流程
初始化语句:给变量进行赋值
当前条件表达式成立,执行循环体语句;
继续控制体语句, 再次执行条件表达式
...
...
当条件表达式不满足条件,while循环结束
注意事项:
while循环在使用的时候:
注意事项
不要忘了控制体语句,否则死循环
例:while
1)求1-100之间的和
2)1-100之间的偶数和
3)打印所有的水仙花数
4)统计水仙花数有多少个
...
*/
class WhileTest{
public static void main(String[] args){
//1-100之间的和
//最终结果变量
int i = 1 ;
int sum = 0 ;
while(i<=100){
sum += i ;
i++ ;
}
System.out.println("1-100之间的和是:"+sum) ;
System.out.println("---------------------------------") ;
//1-100之间的偶数和
int x = 1 ;
int sum2 = 0 ;
while(x <= 100){
if(x %2 ==0){
sum2 += x ;
}
x ++ ;
}
System.out.println("1-100之间的偶数和是:"+sum2) ;
System.out.println("---------------------------------") ;
//水仙花数
//初始化语句
int m = 100 ;
while(m < 1000){
//定义三个变量
int ge = m % 10 ;
int shi = m / 10 % 10 ;
int bai = m /10 /10 %10 ;
if(m==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
System.out.println(m) ;
}
m ++ ;
}
System.out.println("---------------------------------") ;
//统计水仙花数
//定义统计变量
int count = 0 ;
int z = 100 ;
while(z < 1000){
//定义三个变量
int ge = z % 10 ;
int shi = z / 10 % 10 ;
int bai = z /10 /10 %10 ;
if(z==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
count ++ ; //统计变量++
}
z ++ ;
}
System.out.println("所有的水仙花共有:"+count+"个") ;
while和for循环的区别
1)应用场景的区别:
是否明确循环次数
如果明确循环次数,优先使用for循环 (开发中经常使用)
当不明确循环的次数,使用while循环
2)从格式---(内存角度) :for优于 while
for循环结束之后,不能够访问到for循环中的变量;
循环结束了, 变量(内存中变量:临时变量)就需要被回收了, 节省内存(栈内存)
while循环:由于存在初始化语句是在while外面定义的,
所有当前while循环,依然访问到while循环中的变量
死循环:
循环语句没有结束条件---恒成立!
while循环格式(推荐)
for循环格式
for(;;){
循环体语句;
}
灵活使
用死循环:当不明确次数,使用while循环
while(true){
//判断
满足条件,退出死循环
break ;
}
doWhile循环语句的格式
初始化语句;
do{
循环体语句;
控制体语句;
}while(条件表达式) ;
执行流程:
初始化语句对变量赋值一次;
成立,执行循环体语句---控制体语句
判断条件表达式是否成立!
...
条件不成立,循环语句结束!
在控制台输出 5次"helloJavaEE" ;
应用场景: 以后源码中会有,开发中很少用
它和for,while最大的区别:即使条件不成立,循环体至少执行一次!
*/
class DoWhileDemo{
public static void main(String[] args){
/*
初始化语句;
do{
循环体语句;
控制体语句;
}while(条件表达式) ;
*/
//int i = 1 ;
int i = 6 ;
do{
System.out.println("hello,JavaEE") ;
i++ ;
}while( i<= 5) ;
for循环嵌套
for(初始化语句1;条件表达式1;控制体语句1){
for(初始化语句2;条件表达式2;控制体语句2){
循环体
}
}
内层循环作为外层的循环体语句!
流程:
初始化1先执行,条件表达式1成立,
执行循环:for循环
先执行初始化语句2, 条件表达式2成立.
循环体语句 ---->控制体语句2----条件表达式2是否成立
不满足条件
控制体语句1
例子:
*
**
***
****
*****
******
*******
********
*********
for(int x = 0 ; x <9 ; x++){
for(int y = 0 ; y <=x ; y++){
System.out.print("*") ;
}
System.out.println() ;
}
//99乘法表
1*1=1
1*2=2 2 * 2 = 4
1*3=3 2 * 3 = 6 3 * 3 = 9
...
1*9=9 ....
// X :代表任意字符 (转移字符)
// \t :制表符: 相当于在记事本中的缩进效果
// \n :换行
//为了保证数据有效:行和列值:1开始
for(int x = 1 ; x <= 9 ; x++){//行数
for(int y =1 ; y <=x ; y++){//变化的列数
System.out.print(x+"*"+y+"="+(y*x)+"\t") ;
}
System.out.println();
跳转控制语句
break ;
continue ;
return ;
break:表示中断结束的意思,不能单独场景使用
只能在这两个场景使用:
switch语句 :遇见break结束
循环中使用:结束循环语句的
单个循环语句中 嵌套循环中使用
break 标签语句
标签语句:给外层循环和内层循环 起一个名字 标签名称:for(xxx)
break 标签名称;
continue:结束当前循环,立即下一次循环!
不能单独使用,一般都在循环中使用!
return
结束方法去使用
一般 情况:return需要结合有具体返回值类型的方法使用!
return很少单独使用!
return:返回