小结
java语言数据类型
基本类型:四类八种整形( byte ,shout, int ,long) ,浮点型(float ,double) ,字符型(char) ,布尔类型(boolean)
引用数据类型:字符串,数组,对象
类型转换
强制类型转换:变量参与运算,会提升数据类型,常量计算是看结果是否超出了类型范围再决定转换
eg:int a =3;
int b = 4;
byte c = a + b ; 错误,等式右边的的 a , b 会提升为int类型, c 是byte类型,int转byte需要强制转换,byte c = (byte) (a + b );
byte d = 3 + 4; 正确,等式右面的和是 7 ,在byte的范围内,因此不需要转换类型。
关键字:被java赋予了特殊含义的单词,eg:public, class ,static ,void
标识符:就是给类,接口,方法,变量起名字时使用的字符序列。
组成规则:标识符包含英文26个字母(区分大小写) 0 - 9数字 $(美元符号) _(下划线)
注意事项:不能以数字开头,不能是java关键字,区分大小写
异或(^)特点:相同为false,不同为true
位异或特点:一个数据被另一个数据位异或偶数次还是它本身
移动符号
<<(左移):将该符号左边的数据本身乘以2的移动次数幂
eg:3 << 2 ; ==> 3 * (22) = 12
<<(右移):将该符号左边数据本身除以2的移动次幂
eg:24 >> 2 ; ==> 24/(22) = 6
以最有效的方式写出2 乘以8的结果
2 << 3 ; ==>就是 2 * (2 * 2 * 2) = 16
三元运算符
格式:(表达式) ? 执行true的结果 :执行false的结果 ;
比较两个数中的最大值:
int max = (a > b)? a : b ;
如果括号中条件成立就输出 a 否则就输出 b
求三个数中的最大值:
int max = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
数据录入(Scanner)的基本使用:
//导包
import java.util.Scanner;
//创建一个对象
Scanner sc = new Scanner(System.in);
//接受数据
int x = sc.nextInt();
java中的流程控制语句:顺序结构语句 选择结构语句 循环结构语句
if格式与三元运算符的区别
(1)三元运算符连接的是两个数据的数据值(针对数据值来进行比较或者判断)
(2)if格式2是一种流程控制语句:范围要比三元运算符大,它不仅仅可以判断两个数据数据值还可以操作具体语句
(3)能够使用if格式2实现的不一定能够使用三元运算符;但是如果能够三元运算符实现的一定能够使用if格式2 (在开发中,针对业务逻辑判断还是使用if格式2)
switch语句格式
switch(表达式){
case 值 1 :
语句 1;
break;
case 值 2 :
语句2;
break;
dafault :
语句3;
}
switch的执行流程:switch后面的表达式需要和case值进行匹配,如果值1匹配成功就执行语句1遇见break就结束switch循环,如果值2 不匹配就一直往下找,直到找到能匹配成功的然后输出语句,遇见break结束switch循环,如果一直找不到匹配的值就执行default语句遇见break结束
注意事项:
(1)default放在语句中不影响它的执行流程,但如果放到句中必须带上break,否则会造成case穿透(也就是会执行到下一个break才停止)
(2)switch语句的结束条件:遇见break或者程序默认执行到末尾
(3)case后面的值只能是常量,不能是变量
eg:
class SwitchTest{
public static void main(String[] args){
int x = 2 ;
int y = 3 ;
switch(x){
default: //当前case后面的值都和switch中的表达式匹配,但是没有break就会执行到下一个语句;
y++ ;
case 2 :
y ++ ; //3+1=4 遇见break,程序默认执行到末尾
case 4:
y ++ ; //4+1 = 5
}
int a = 2 ;
int b = 3 ;
switch(a){
default: //当前case后面的值都和switch中的表达式不匹配,才执行default语句;
b++ ; //3+1 = 4 ;
case 3 :
b ++ ; //4+1 = 5
break ; //程序执行到这个break而终止
case 4:
b ++ ;
}
System.out.println("b:"+b);
int m = 2 ;
int n = 3 ;
switch(m){
default:
n ++ ;
break ;
case 2:
n++; //跳转值2执行,但是没有break那么就将语句执行完毕再结束
case 3:
n++;
}
System.out.println("n:"+n); //5
}
}
for循环
格式
for(初始化语句;条件表达式;步长语句){
循环语句;
}
for语句输出水仙花数(所谓水仙花数就是100-1000之间的三位数并且三位数的每一位的3次方之和等于原来那个数eg:153 = 111+555+333)
class ShuiXianHua{
public static void main(String[] args){
System.out.println("水仙花数有:");
for(int i = 100 ; i < 1000 ; i++){
int ge = i % 10 ;
int shi = i / 10 % 10 ;
int bai = i / 10 / 10 % 10 ;
int sum = ge * ge * ge + shi * shi * shi + bai * bai * bai ;
if (i == sum){
System.out.println(i);
}
}
}
while循环
格式:
初始化语句;
while(条件表达式){
循环体语句;
步长语句;
用while执行猜数游戏
//导包
import java.util.Scanner;
class Guess{
public static void main(String[] args){
//java.lang.Math类:数学运算的类
//方法:获取随机数的方法:public static double random() 取值范围:[0.0,1.0)
//让电脑自动生成一个数,由于random()的取值范围是[0.0,1.0)所以要求1-100之间的
//数就需要给random()乘 10 再加 1
int number = (int)(Math.random() * 100 + 1);
while(true ){
//创建电脑输入对象
Scanner sc = new Scanner(System.in);
//提示输入并接受数据
System.out.println("请输入一个数据");
int x = sc.nextInt();
//判断录入的数据与自动生成数据的大小
if (number > x){
System.out.println("小了,您录入的数据小了");
}else if(number < x ){
System.out.println("大了,您输入的数据大了");
}else if(number == x){
System.out.println("恭喜您,猜中了");
//如果猜中就推出循环,结束游戏,如果没猜中就一直猜
break;
}
}
}
}
}
while循环和for循环的区别
(1)两种循环格式不一样
while循环:从内存角度考虑,while循环结束了,依然可以访问循环中的变量(消耗内存空间)
for循环:从内存角度考虑,不能访问变量(变量的生命周期随着for循环的结束而结束)
(2)从应用角度来分析
一般如果明确循环次数或者循环的范围,优先选择for循环,如果不明确循环次数或者不明确循环范围时就使用while循环。