第二章 Java基础语法
21世纪,走进了信息时代,各种各样的软件层出不穷,但是总离不开程序开发,离不开程序开发语言,Java语言作为人们所熟知的一门语言,对于其有必要进行系统的学习。
默认转换 当数据类型占字节小的变量向所占字节较大的变量赋值,或者运算时,会发生默认转换,将所占字节小的数据类型转换为所占大的变量的数据类型,如int型数据与double型数据运算时,会将int默认转换为double型数据。(布尔型不可以转换) 其大小为(byte,short,char)<int<long<float<double byte,short,char三者不会发生相互转换,其发生运算时,都是先转换为int型数据,再进行运算。 强制转换 当数据类型所占字节大的变量赋值给数据类型所占字节较小的变量时,会发生错误,但是可以进行强制转换去消除错误,如,将long型数据赋值给int型数据; 强制转换可能会发生溢出,并且精度降低,但是一些操作如四舍五入可以通过其实现
double a=5.6; int b=(int)(a+0.5); System.out.println(b);四舍五入后,结果为6,强制转换后,浮点型的小数点后位数会丢失,通过+0.5的方法,即可实现四舍五入。
“+”运算符,有三种使用场景,①表示正数,即正号;②表示加法运算;③字符串连接符;
int a = +1;//表示正数 int b=a+3;//表示加法运算 System.out.println("a="+a+"b="+b);//表示字符串连接符“-”运算符,较为简单,一种表示负数,另一种表示数值间的减法运算;
int a = -1;//表示负数数 int b = 3 - a;//表示减法运算“*”,“/”,“%”运算符,这两种运算符仅仅参与数字之间的运算,乘法,除法,取模运算(取模运算即取余运算);
System.out.println(3 * 2);//乘法运算 System.out.println(6 / 2);//除法运算 System.out.println(5 % 2);//取模运算“++”,“–”运算符,这是两个比较特殊的运算,意义为自增与自减,每次运算自加1(自减1),以“++”运算符为例,有i++,与++i两种形式,i++参与的运算中,先以原来的值进行运算再自增1,;++i参与的运算中,先对变量进行自增1,再参与运算;
int a = 10; int b = a++; System.out.println(a); System.out.println(b); int c = ++a; System.out.println(a); System.out.println(c);示例中,a的值经过a++操作,自增1,变为11; b的值经过a++的赋值后,仍为10,因为此语句为先进行赋值操作,再进行自增操作; c的值经过++a的赋值后为12,因为前一步的赋值b后,a自增为11,在赋值c之前,++a使得a先自增1,变为12,再对c赋值,即为所得结果。
这里给出下面一段代码,对于i与j进行最终求值。
int i = 1; int j = ++i + i++ + ++i + ++i + i++;原理与上一例相同,i经过五次自增变为6,j的值经过运算为18,具体值为(2+2+4+5+5) 在开发过程中,“++”与“–”运算符运用很多,弄懂原理很重要。
比较运算符代表boolean值;满足条件为true,否则表示false; “==”,双等号表示比较左右两边是否相等,可以用来比较字符串; “>”,表示前面数值是否大于后方数值; “<”,表示前方数值是否小于后方数值; “<=”,表示前方数值是否小于或等于后方数值; “>=”,表示前方数值是否大于或等于后方数值; “!=”,表示前方元素是否不等于后方元素;
System.out.println(1 == 1);//== System.out.println(1 < 2);//< System.out.println(3 > 2);//> System.out.println(2 >= 2);//>= System.out.println(3 <= 3);//<= System.out.println(2 != 3);//!=“&”,逻辑与运算,当左右条件均为true,整体结果才为true,有一个为false,整体就为false;
int a = 5, b = 10, c = 15; System.out.println(a > b & b > c);//false&false=false System.out.println(a < b & b > c);//true&false=false System.out.println(a < b & b < c);//true&true=true“|”,逻辑或运算,左右两边有一个为true,结果就为true,左右两边都为false,整体才为false;
int a = 5, b = 10, c = 15; System.out.println(a > b | b > c);//false|false=false System.out.println(a < b | b > c);//true|false=true System.out.println(a < b | b < c);//true|true=true“!”,逻辑非运算,单目运算符,对右边的结果进行非运算,true变为false或false变为true;
System.out.println(!(1==1));//false“&&”,短路与运算,类似于逻辑与运算,但是,当运算符左边出现false时,就再对右边进行判断,节省了时间;
int a = 5, b = 10, c = 15; System.out.println(a > b && b > c);//false&&false=false System.out.println(a < b && b > c);//true&&false=false System.out.println(a < b && b < c);//true&&true=true System.out.println(a > b && ++b > c);//false后短路,不执行++b System.out.println(b);“||”,短路或运算,与短路与运算类似,运算符左边有true时,右边的值即不判断,式子结果为true,只有左边为false时,才判断右边的值。
int a = 5, b = 10, c = 15; System.out.println(a > b || b > c);//false||false=false System.out.println(a < b || b > c);//true||false=true System.out.println(a < b || b < c);//true||true=true System.out.println(a < b || ++b > c);//true后短路,不执行++b System.out.println(b);“^”,异或运算,对数值的二进制进行运算,相同为零,不同为1。
System.out.println(7^3);//1111^11=11“=”单等号,即为赋值运算符,支持连续赋值。
int a = 10;//赋值 int i, j, k; i = j = k = 10;//连续赋值也称作条件表达式,格式为 条件表达式?表达式1:表达式2;当条件表达式值为false,执行表达式2,否则执行表达式1,并返回一个结果。
int i = 0, a = 1, b = 2; i = a == b ? 2 : 3;//a不等于b,所以把3返回 System.out.println(i);位运算符中的,位,即为比特位,位运算比算术运算效率要高;
“<<”,左移运算符,其数值对应的二进制位对应左移,相当于对其进行乘2操作;
int a = 30, b = -40, c; System.out.println(c =a << 1);//左移运算,左移n位,即乘以2的n次方“>>”,右移运算符,其数值对应的二进制位右移,相当于对其进行除2操作,被移位的二进制最高位是0,则移动后空缺位补0,最高位是1,空缺位补1,这样移动后的数值正负与异动前相同;
System.out.println(c = a >> 1);//右移运算,右移n位,即除以2的n次方“>>>”,无符号右移运算符,其数值对应的二进制位右移,同时最高位补0;
System.out.println(c = b >>> 1);//无符号右移,右移n位,并取绝对值,空缺位补0“&”,按位与运算符,两边二进制位有0为0,都为1结果为1;
System.out.println(c = a & b);//与运算,有0为0,都为1结果为1“|”,按位或运算符,两边二进制位有1为1,都为0结果才为0;
System.out.println(c = a | b);//或运算,有1为1,都为0结果为0“^”,异或运算符,两边二进制位,相同为0,相异为1;
System.out.println(c = a ^ b);//相同为0,相异为1“~”,非运算符,二进制位上0变为1,1变为0,只需要一个变量即可进行操作;
System.out.println(c = ~a);//0变为1,1变为0Scanner是Java自带的一个类,是一个扫描仪,可以获取用户从键盘输入的数据。其使用格式为:
Scanner scanner = new Scanner(System.in);Scanner类中有很多方法,便于用户的输入和对输入结果的判断: next方法,返回一个String类型的值;
String str = scanner.next();nextInt方法,返回一个int型的值;
int num = scanner.nextInt();nextDouble()nextfloat(),nextBoolean(),等使用方法同上;
条件语句中有if和switch两种;
其使用较简单,用途也相对广泛,其基本结构为
if (条件表达式) { 语句1; } else { 语句2; }当条件表达式结果为true时,执行大括号中的语句,否则执行else后的语句(只需要if时,后面可以不跟else):
if (true) { System.out.println("表达式1"); } else { System.out.println("表达式2"); }其结果为 同时,if与else中还可以嵌套if与else
//三个数选择最大值 int a = 10, b = 5, c = 15, max; if (a > b) { if (a > c) { max = a; } else { max = c; } } else { if (b > c) { max = b; } else { max = c; } } System.out.println("其最大值为:" + max);switch语句与if语句不同,switch语句是对单个值进行判断,判断类型有byte,short,int ,long,char,枚举,String(jdk8以后),其结构为
switch (变量) { case 值1: 语句1; break; case 值2: 语句2; break; default:; }判断规则是,当变量的值与下方case中的值匹配时,执行case后的语句,如果变量的值没有匹配到case的值,则执行default,default可以省略。
int a = 1; switch (a) { case 0: System.out.println("语句1"); break; case 1: System.out.println("语句2"); break; }其结果为
循环结构分为三种while,do while,for;
执行while循环时,会先对表达式进行判断,如果结果为true,则进入循环,如果条件为false,则结束循环,其基本格式为
while(条件表达式){ 语句; }一般设置变量进行循环次数的限制,不加以限制,会出现死循环,一般死循环书写为while(true){语句;} 示例:
int i = 0; //循环次数为5次的while循环 while (i < 5) { System.out.println(i); i++; } //循环未进行变量迭代,出现死循环 while (i != 5) { System.out.println(i); }类似于while循环,但有特殊之处,无论条件是否成立,都最少会执行1次,即执行再判断。其格式为
do { 语句; } while (条件表达式);先执行一次内部语句,然后进行条件判断,条件为真,再次进入循环;
int i = 0; do { i++; System.out.println(i); } while (i < 5);也常叫做计数循环,常用于给定数值范围进行判断;其格式为
for(初始化变量;条件判断;变量迭代){ 语句; }实际进行写代码时,可以根据实际改变类型,但是分号不可少:
//在for循环外进行变量初始化 int i=0; for (;i<5;i++){ System.out.println(i); } //将变量迭代放进大括号内 for(int j=0;j<5;){ System.out.println(j); j++; }此外,提及三个常用与循环的关键字:break,continue,return break关键字,在循环体中使用,会跳出当前循环,仅限当前一层循环,多层跳出时,可以使用label; continue关键字,在循环体中使用,会跳过continue后的语句,并开始下一次循环; return关键字,可以在方法中使用,返回方法返回值类型的数据,void类型方法可以使用return,但是不可以有返回值,会直接结束方法;用于循环中时,也会直接结束方法。
笔记如有错误,遗漏之处,欢迎指正!