JavaSE基本语法(二)
字符型
char类型:表示一个字符 占2个字节
char a=’b‘; 用单引号表示
char类型 可以涵盖世界上所有书面语的字符 (因为计算机之所以可以显示各种字符,因为底层有一个编码表,每个字符在码表中有对象的十进制编号) ------Java默认使用Unicode编码
在Java中,对char类型字符运行时,直接当作对应编码中的整数来对待
char c=’a'+1 先把‘a'提升为int 然后在加1 结果为98
char a=’a'; ‘中’对应编码为20013
sout(a+0) 结果为97 sout(a) 结果为a;
基本数据类型转换
1.默认转换:因为数据之间需要传递,可能类型不一致
转换规则:容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:byte、short、char------>int------>long(8)------>float(4)------>double
注:因为小数在底层的存储与整数不同,所以4byte的float>8byte 的long
byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型
2.强制转换:容量大的数据类型转换为容量小的数据类型时,要加上强制转换符 int a=258; byte b=(byte)a; 结果为2;
在混合运算中,默认将小类型转为大类型。这就有可能造成 精度降低 或者数据溢出;
运算符
1.算术运算符:+,-,*,/,%,++,--
+:数+数、数+char、字符+字符
++,--:在前面是先运算后取值 在后面是先取值在运算
2.比较运算符:>,<,>=,<=,==,!=
比较运算符 返回true false
int a=10;int b=5;sout(a==b) 结果为flase
3.赋值运算符:=,+=,-=,*=,/=
shor t s = 3;
s=s+2; ①
s+=2; ②
①和②有什么区别?
答:① short = short+int 所以编译器会报错
② short s=(short)(s+2) 隐进的强制类型转换
short a,b,C;
C=a+b;
这样也会报错 因为a+b在计算时 转换为int类型了
4.逻辑运算符:!,&,|,&&,||
运算符左右两边都是布尔值
&:前面无论真假,后面都进行运算
&&:当前面表达式返回false时,后面表达式不执行
(测试:a<b&&++b<c)
|:前面无论真假,后面都进行运算
||:当前面表达式返回true,后面不会执行
^:不同为true 相同为false
5.条件运算符(三目运算符)
(条件表达式)? 表达式1:表达式2; 条件表达式结果为true,运算后的结果是表达式1; 为false,运算后的 结果是表达式2
<!--6.位运算:自己看笔记-->
控制台输入
为啥?需要用户与程序实现交互式数据输入,但是我们程序现在还没有操作页面(UI) 所以java中 前期,提供了一个类(Scanner类),通过此类,可以让用户在控制台输入数据,并将数据读取到程序中
Scanner sc=new Scanner(System.in);
int a=sc.nextInt(); double b=sc.nextDouble() String str=sc.next();
在使用Scanner对象时,需要带上头文件:import java.util.Scanner;
流程控制
条件语句
● if
● if .. else
● if .. else if
● if .. else if .. else if .. else
● switch
在执行if语句时,首先会计算表达式的值,如果表达式的值为0,语句不会执行,若非0,则执行语句。
循环语句
● for
● while
● do .. while(先循环一次在 判断条件)
switch()//表达式为byte,short,int,char,String,枚举
{
case 1: ; break;
case 2: ; break;
default: ;
}
某个case分支如果没有提供break语句,则继续执行下一个case后的语句(穿透!)
当表达式与case不匹配,则执行default
若没有default,则跳出。
for循环中,把条件去掉即为死循环
for(int i=0;;i++)
循环嵌套
break&continue:只能用于循环
break是结束循环,跳出循环体,如果代码是两个for循环嵌套。因为break语句位于内层的for循环,因此,它会跳出内层for循环,但不会跳出外层for循环。 continue是结束本次循环,开启下一次循环。
结束外层循环
如果需要从多层循环跳出,则需要使用标签,定义一个标签,如label, 然后在需要跳出的地方,用break label就行了
public class 循环 { public static void main(String[] args) { outloop: //循环标签,名字自定义 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { if (j == 2) { //break; //只能跳出当前循环 break outloop; //跳过外层循环 //continue; //跳到当前循环下重新开始 //continue outloop; //跳到外层循环下重新开始 } System.out.println(j); } System.out.println("test"); } System.out.println("finish"); }
运行结果:0
1
finish