二、基本语法

一、关键字和标识符

 

 二、变量

 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关键字。否则,循环将无限执行下去,形成死循环。

 

 五、数组

 

posted @ 2018-01-06 19:24  雨中看雨yyy  阅读(348)  评论(0编辑  收藏  举报