黑马程序员--第一阶段2.java编程基础--第3天
用{}括起来的叫复合语句
if语句:
1、if( ) {语句}
2、if( )
{语句}
else
{语句}
3、if( )
{语句}
else if() {语句}
else if() {语句}
else
{语句}
4、if( )
{语句}
else if( )
{语句} //这里省略了外层的else语句
注:嵌套语句最好加上{}
问号表达式: y=x>0?x:y;
switch语句:
switch() //条件可接受int、byte、short、char型的数据类型,不可以接受其他类型
{
case 1:语句;break; //case中的语句不需要加{}
case 2:语句;break;
default:语句;
}
while(){语句} //此处没有分号
do{}while(); //此处有分号
break语句可用在while、do、for、switch等语句中,而continue只能用在while、do、for语句中
嵌套语句中的break只能跳出本层嵌套,要想跳出外层则可加入标记,continue也一样。如:
st:while(true)
{
while(true)
{
break st;
}
}
for(表达式1;表达式2;表达式3){ } //这3个表达式都可以不写,但‘;’不能省略
在java中,if()和else if()和while()与for中的条件表达式的值必需是布尔型的(即true或false),这一点和C、C++不一样。
浮点数在内存中的表示方式
Float. intBitsToFloat(int bits)返回给定位表示形式的float值:
- 如果参数为
0x7f800000
,则结果为正无穷大。 - 如果参数为
0xff800000
,则结果为负无穷大。 - 比无穷大小1的数为float的最大数:0x7f7f ffff,二进制为:01111111 01111111 11111111 11111111
- float的最小数为:0x00000001,二进制为:00000000 00000000 00000000 00000001
- 常量MAX_VALUE、MIN_VALUE分别表示float的最大与最小的常量
- 设 s、e 和 m 为可以通过以下参数进行计算的三个值(s为符号位,e为幂指数,m为有效数字):
int s = ((bits >> 31) == 0) ? 1 : -1;
int e = ((bits >> 23) & 0xff);
int m = (e == 0) ?(bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
那么浮点结果等于算术表达式 s·m·2e-150 的值。
数组
java把内存划分成两种:栈内存、堆内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配的,当在一段代码块({}之间)定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java就会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new关键字创建的对象和数组,在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量就相当于是为数组或对象起的一个名称(叫代号也行)。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放,而数组和对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在的代码块之外,数组和对象本身占据的内存也不会被释放,数组和对象在没有引用变量指向它时,才会变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后一个不确定的时间被垃圾回收器收走(释放掉)。这也是java比较占内存的原因。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配的,当在一段代码块({}之间)定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java就会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new关键字创建的对象和数组,在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量就相当于是为数组或对象起的一个名称(叫代号也行)。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放,而数组和对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在的代码块之外,数组和对象本身占据的内存也不会被释放,数组和对象在没有引用变量指向它时,才会变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后一个不确定的时间被垃圾回收器收走(释放掉)。这也是java比较占内存的原因。
数组的元素值可以不用初始化,系统默认初始化为0。
数组在内存中的状态变化情况
- int x[];
____________________________________________________________ - x = new int[100];
____________________________________________________________ - x=null;
____________________________________________________________
静态数组
- int ia[] ={1,2,3,4};
- int [] ia=new int[]{3,4,5};
- int a[5];//声明数组时,不能指定其长度,编译时将出错
使用数组时要注意的问题
- 空指针异常
- 如何得到数组长度
- 数组越界异常
java 中并没有真正的多维数组,只有数组的数组
定义一个多维数组
int[][] xx;
xx=new int[3][];
xx[0]=new int[3];
xx[1]=new int[2]; //示意图如下:
定义一个多维数组
int[][] xx;
xx=new int[3][];
xx[0]=new int[3];
xx[1]=new int[2]; //示意图如下:
_____________________________________________________________
多维数组中元素的引用方式,如:x[1][2]。
规则矩阵数组可以在一条语句中产生,如:int xx[][]=new int[2][3];
多维数组的静态初始化 ,如:
int[][] xx={{3,2,7},{1,5},{6}}; //示意图如下:
_____________________________________________________________
int[ ] [ ] a = new int[2][3];
a.length //为3
a[0].length //为4
与数组操作相关的函数
- 使用System.arraycopy(原数组,原数组起始下标,目标数组,目标数组起始目标,复制的下标数量) 函数拷贝数组
- 用java.util.Arrays.sort (数组名)来排序数组