Java第二讲——数据处理与流程控制
目标:
>数据类型
>运算符号
>流程控制 (重点)
>数组(重点)
一、数据类型
>1、特性:
--名称:标识符,代表这块内存中的数据。
--类型:根据所存储的数据类型的不同,有各种不同类型的变量。
--初始值:为其赋值或者是保留缺省值,变量在使用前必须先初始化。
--作用域 : 在不同程序块中的可用性及生命周期 int x=0,y; y=x+3;
>2、Java中两大数据类型:
--基本数据类型 : 也称作内置类型,Java语言本身提供的基本数据类型,是其他类型(包括Java核心库和用户自定义类型)的基础。 例如:boolean , char , String 等
-- 引用数据类型 : Java语言根据基本类型扩展出的其他类型。 例如: class , interface 等
>3、Java的变量类型:
--数据类型分为两种:基本数据类型、引用数据类型
--基本数据类型:字符型(char)、布尔型(boolean)、数值型:整数类型(byte、short、int、long)、浮点型(float、double)
--引用数据类型:类(class) 、接口(interface) 、数组
>4、基本数据类型之间的转换:
(1)--当把一个long类型的变量赋值给int类型时,int可能存不下那么大的数。所以编译器不允许把long变量赋值给int变量, 但是反之可以 。
--除boolean类型外,所有的原始数据类型因为各自的精度不同,赋值时都要考虑这个问题
(2)--自动类型转换(隐式类型转换) :
byte b = 3;
int x = b; //b自动转换成int型
--强制类型转换(显示类型转换):
byte a;
int b;
a = (byte) b; // 强制转换 强转时,当心丢失数据或失真(有可能本来有多条数据,然后转换后少了数据)
(3)--相同类型的变量、常数运算,结果还是原类型
--不同类型的变量、常数运算,结果的类型为参与运算的类型中精度最高者
-- 表达式的数据类型自动提升规则: 如下:
byte,short,char型的值被提升int型
其中一个操作数为long型,结果为long型
其中一个操作数为float型,结果为float型
其中一个操作数为double型,结果为double型
二、运算符号:
>总、运算符:是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成 。
--运算符共分以下几种:
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
>1、算术运算符:
--加减乘除四则运算 +,-,*,/,%
如 :12%5 = 2 (模就是取的余数)
--整数之间相除,只保留整数部分
如: 3510/1000*1000 = 3000
--如果对负数取模,可以把模数负号忽略不记
如:5%-2=1。但被模数是负数就另当别论了 负号:- x = -a; x = a * (-b);
>2、赋值运算符:
>3、比较运算符:
--注1:比较运算符的结果都是boolean型,也就是true/false。
--注2:比较运算符“==”不能误写成“=” ,切记!切记!
>4、逻辑运算符:
>5、位运算符:
(1)、位运算规则:
<1>java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数符号位为0,负数为1。
例: +42 的补码为:00101010
-42 的补码为:11010110(11010101+0000001) ,
负数取补码的规则:
1、取该数绝对值的补码
2、对该补码按位取反
3、然后对整个数加1
<2>、不同类型的进行位运算,低精度类型的数据要先转成高精度的,缺的左位按位填满,正数则填0,负数则填1
<3>、移位运算:
<<:将一个数的各二进制位全部左移若干位,右边补0;
>>:将一个数的各二进制位全部右移若干位,最高位则移入原来最高位的值(正数补0,负数补1)。
>>>:将一个数的各二进制位全部右移若干位,最高位补0;
三、流程控制
>1、控制结构:
Java 支持下列控制结构:选择、循环、跳转
-- 选择:
- if-else
- Switch
--循环 :
-while
-do-while
-for
--跳转:
- break
- Continue
(1)、
<1>、if-else结构的语法为:
if(条件){
语句1;
}
else{
语句2;
}
<2>、 if-else if-else语句语法为:
if(条件1){
语句1;
}
else if(条件2){
语句2;
}
else{
语句3;
}
//注:else if后要加条件,而else是不加的,如上例子所述
(2)、switch结构的语法为:
(3)、循环语句:
图片
<1>、使用规则
while :适合于开始不清楚循环将要进行的次数,而且循环可能一次都不进行的情况
do-while :适合于不清楚循环次数,但是循环肯定要进行一次的情况
for: 适合于预先知道循环将要进行的次数的情况 一定程度上他们是可以互相替换的
(4)、break、continue
break 语句在循环中用于立即从当前循环终止控制。 遇到 break 语句时,将跳出当前循环。
continue 语句则是从其调用处跳至循环的开始处。 continue 语句之后的语句将不再执行。
(5)、return返回语句:
<1>、 Return语句从当前方法退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续执行程序。
<2>、 返回语句的两种格式:
--return expression 返回一个值给调用该方法的语句。 返回值的数据类型必须和方法声明中的返回值类型一致或是精度 低于声明的数据类型。
--return 当方法声明中用void声明返回类型为空时,应使用这种返回类型,它不返回任何值。
四、数组:
(1)、概念:
数组:是有相同类型的、用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列。
-数组是一种最简单的复合数据类型。
-数组可以是一维的也可以是多维的。
(2)、一维数组定义:
type arrayName[ ] 或 type[ ] arrayName ( 例如int [ ] name或int name[ ] )
说明: type : 可以是java中任意的数据类型,包括简单类型和复合类型(也可以是数组)
arrayName :为一个合法的标识符; [ ]指明该变量是一个数组类型的变量。
(3)、为数组分配空间:
--用new关键为对象分配其内存空间:
type arrayName = new type[arraySize]
例如:int x = new int[100];
--通过引用来使用数组元素 :arrayName[index]:
index为数组下标,可是整型常数或表达式。
index取值从 0 到 arraySize-1
--当 x = null 即该数组对象不再被任何引用变量使用的时候," 垃圾回收器”将自动释放该内存资源
(4)、数组的初始化:
--数组的静态初始化:
int ia[ ]={1,2,3,4};
int ia[ ]=new int[ ]{3,4,5};
--动态初始化:
int intArray[];//声名数组
intArray = new int[5] ; //为数组分配空间
注意:声明数组时,无论用何种方式定义数组,都不能指定其长度
错误写法 :int a[5]; //声明的时候不能指定长度
(5)、使用时要注意的问题:
-- 空指针异常(NullPointException):
只声明但没有初始化的时候直接使用该变量。
-- 数组越界异常(ArrayIndexOutBoundsException):
所有数组的下标都从0开始
int[] a ={1,2,3};
for (int i= 0; i< a.length; i++){
System.out.println(a[i]);
}
其中length属性表示数组的长度
(6)、多维数组:(数组的数组)
--java没有真正的多维数组,只有数组的数组
(7)、 二维数组的定义:
-- type arrayName[ ][ ];或 type[ ][ ] arrayName;
例子:
int xx[ ][ ] = new int[3][3];
int[ ][ ] xx = {{3,2,7},{1,5}};
(8)、多维数组静态初始化:
--int intArray[ ][ ]={{3,2,7},{1,5},{6}};
注:C语言中的数组大小是相同的,而Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。
(9)、多维数组的动态初始化:
--int[][] xx = new int[3][]; //指定一个3行n列的数组
--xx[0] = new int[3]; //指定第一行为3列
--xx[1] = new int[2]; //指定第二行为2列
注:在Java语言中,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。