基本语法
Posted 雨中看雨yyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本语法相关的知识,希望对你有一定的参考价值。
一、关键字和标识符
二、变量
1.java中变量按照数据类型来分类:基本数据类型 和 引用数据类型
>基本数据类型:
整形:byte(8bit) short int(默认类型) long
浮点型:float double(默认类型)
字符型:char(\' \')
布尔类型:boolean (只能取值true或false,不能取null)
补充:按照变量在类中的位置不同:成员变量 VS局部变量
2.进制
十进制 二进制 八进制 十六进制
二进制:计算机底层都是用二进制来存储和计算。
>四种进制转换。
3.变量运算:
a.自动类型转换:容量小的数据类型自动转换为容量大的数据类型。
short s = 12;
int i = s+2;
注意:byte short char 之间做运算,结果为int类型
b.强制类型转换:使用(数据类型)实现强转。
doubel d =10.5;
int i=(int)d+2;
三、运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符(关系运算符) 逻辑运算符 位运算符 三元运算符
1.算术运算符:
注意:
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的结果是?3000
“+”除字符串相加功能外,还能把非字符串转换成字符串.例如:
System.out.println("5+5="+5+5); //打印结果是?5+5=55
System.out.println("5+5="+(5+5));//打印结果是?5+5=10
以下二者的区别:
System.out.println(\'*\' + \'\\t\' +\'*\');93
System.out.println("*" + \'\\t\' +\'*\');* *
2.赋值运算符:
符号:= 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值。 扩展赋值运算符: +=, -=, *=, /=, %=
思考1: short s = 3;
s=s+2; ①
s+=2; ②
①和②有什么区别?
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型.
1、对于同样类型的a,b来说
两个式子执行的结果确实没有什么区别。但是从编译的角度看吧,a+=b;执行的时候效率高。
2、对于不同类型的a,b来说
2.1 不同类型的两个变量在进行运算的时候,我们经常说到的是类型的转换问题。这里,记住两点:
一、运算过程中,低精度的类型向高精度类型转换。
二、如果将高精度的数值赋值给低精度类型变量,则必须要进行显性的强制转换。
2.2 对于a+=b;这个式子,要明确的一点是,+=运算中,结合了强制类型转换的功能,因此,不会出现编译错误;而对于a=a+b;这个式子,因为是简单的运算,没有类型转换,在编译过程中会报错,代码如下:
public class Test{ public Test(){ int a = 5; char b = 3; b+=a;//编译通过 b=a+b;//编译出错 } public static void main(String[] args){ Test t = new Test(); } }
要想改正上面的错误,只要像这样写:
public class Test{ public Test(){ int a = 5; char b = 3; b+=a; b=(char)(a+b);//编译通过 } public static void main(String[] args){ Test t = new Test(); } }
因此,总的来说,a=a+b;和a+=b;并不是任何时候都等价,也要分情况的。
3.比较运算符(关系运算符)
比较运算符的结果都是boolean型,也就是要么是true,要么是false。 比较运算符“==”不能误写成“=” 。
4.逻辑运算符
5.位运算符
6.三元运算符
四、流程控制
顺序结构:程序由上而下自动执行
分支结构:
if--else
switch-case
循环结构:
while(){};
do()while{};
for(;;;){}
1.分支结构
1.1条件判断
①if(条件表达式){}
②if(条件表达式){
}else{
}
③if(条件表达式1){
}else if(条件表达式2){
}else if(条件表达式3){
}...
else{
}
【注意】
1.一旦满足某个条件表达式,则进入执行语句块执行,执行完毕,则跳出当前的条件判断结构,不会执行其以下的条件结构语句。
2.如果诸多个条件表达式直接为互斥关系,则多个结构可以上下调换顺序。
如果诸多个条件表达式之间为包含关系,则要求表达式范围小的应写在范围大的前面。
1.2选择结构
switch(变量){
case 值:语句块;break;
case 另一个值:语句块;break;
...
defalut:语句块;break;
}
【注意】
1.变量可以为如下数据类型:byte short int char 枚举 String
2.case后只能填写常量,不能写范围。
3.default是可以省略的,位置比较灵活,通常放到最后。
4.注意break可写可不写,不写就会一直执行下去直到遇到break才会停止。
5.
下面是switch的简单写法:
switch(A){
case B;
}
A部分中的值必须是int型的,或者是能够自动进行饮试转换成int型的表达式。也就是说A部分可以是byte\\short\\char\\int型(因为这几种类型都可以自动转换为int型)的。
其次要强调的是该程序中B部分的值必须是单个byte\\short\\char\\int型的值,或者是final型的变量。
但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:
final int a = 0;
final int b;
第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。所以总结case后的值可以是常数值或final型的值。再看下面的程序段:
public class TestSwitch { public static void main(String[] args){ byte a = 11; switch(a){// C case 11 : System.out.println(" 11 "); break; case 225 : System.out.println(" 11 "); break;// D } } }
该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围,所以是错误的。再就是case后的值不能出现重复。因此在使用中要注意。
2.循环结构
2.1 格式
①初始化条件
②循环条件
③迭代条件
④循环体
------for------
for( ①; ②;③ ){
④
};
------while------
①
while(②){
④
③
};
------do while------
①
do{
④
③
}while(②);
注意:1.不同循环体结构之间可以相互转换
2.注意while和do while的区别:无论是否满足循环条件,do while至少执行一次
2.2 嵌套循环
循环结构还可以声明循环。让内层循环结构整体充当外层循环的循环体。
若外层执行m次,内层执行n次,则一共执行m*n次。
/*
例1:
****** ****** ****** */ public class Test { public static void main(String[] args) { //外层循环三次,相当于控制行数 for(int i=0;i<3;i++){ //内层循环六次,相当于控制列数 for(int j=0;j<5;j++){ System.out.print("*"); } System.out.println(); } } }
2.3 无限循环结构(死循环)
for(;;){
}
或
while(true){
}
往往在无限循环结构内部提供循环终止的条件,使用break关键字。否则,循环将无限执行下去,形成死循环。
五、数组
以上是关于基本语法的主要内容,如果未能解决你的问题,请参考以下文章