本文属于小编原创,请使用者标明出处:
一、流程控制语法中注意事项
(1)在使用if....else时,总是优先吧包含范围小的条件放在前面处理【其他语言同理:C、C++、C#等】;
else的隐含条件是对前面条件取反。
(2)switch(表达式)
表达式的数据类型只能是:byte、short、char、int、枚举类型和String类型(String类型Java 7新增);
注意:表达式与case标签后面的值进行比较,一旦遇到相等的值,程序就开始执行这个case标签后的代码,不再判断后面case、default标签的条件是否匹配,除非遇到break才会结束。
(3)while与do...while区别
while是先判断循环条件,如果条件为真,则执行循环体;
do....while循环则先执行循环体,然后才判断循环条件,如果循环条件为真,则执行下一次循环,否则终止循环。
(4)for循环与while、do....while区别
while、do....while如使用coninue语句结束本次循环,则循环迭代语句不会被执行;
for循环的循环迭代语句并没有与循环体放在一起,因此不管是否使用continue语句来结束本次循环,循环迭代语句一样获得执行。
(5)使用for循环时,有几个地方需要注意
不要在循环体内修改循环变量的值,如果程序中确实需要访问、修改循环变量的值,建议使用一个临时变量tmp,先将循环变量赋值临时变量,然后对临时变量的值进行修改。
(6)控制循环结构(三种方法)
return :结束该方法,也就结束了循环;
break :结束该循环;
continue : 结束本次循环剩下语句,接着开始下一次循环。
其中continue和break中还可以仅跟一个标签,来结束外层循环.[java中的标签只有放在循环之前才起作用]
举例:
outer:
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
System.out.println("i="+i+","+"j="+j);
if(j==3){
break outer; //可跳出外层循环
}
}
}
输出结果:
0,0
0,1
0,2
0,3
(7)java中foreach循环
语法格式:
for(type variableName : array|collection){
// variableName自动迭代访问 array|collection中的每个元素;
}
foreach中的循环变量相当于一个临时变量,系统会把数组元素(或集合元素)依次赋给这个临时变量,而这个临时变量并不是数组元素(或者集合元素),它只是保存了数组元素(或集合元素)的值。所有修改这个临时变量的值,不会改变原数组元素(或集合元素)的值。
二、数组
一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可变,即使把该数组元素清空,但他所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
(1)定义数组
type[] arrayName 或者(type arrayName[])
仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效内存,因此定义数组不能指定数组长度。
(2)数组初始化
java语法中数组必须先初始化,然后才能使用。所谓初始化,就是为数组元素分配内存空间,并为每个元素赋初始值;
显示指定数组元素值类型与new关键值后的type类型相同,或者是其子类的实例;
两种方式初始化:
静态初始化:初始化时由编写者显示指定每个元素的初始值,由系统决定数组长度;
arrayName=new type[] (value1,value2......) ;
或者
type[] arrayName={value1,value2........};
动态初始化:初始化时编写者只指定数组长度,由系统为数组元素分配初始值。
arrayName=new type[length];
注意:不要同时使用静态初始化和动态初始化,即不要进行数组初始化时,即指定数组长度又为每个元素分配初始值。
(3)数组在内存中运行机制
当在一个java方法体中定义一个数组并初始化过程在内存中运行示例(基本类型数组初始化过程)如下图一所示:
(图一)
此处有栈内存与堆内存之分:
是因为当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法定义的变量会逐个放入这块栈内存中,方法执行结束后,这个对于的内存栈将自动销毁。所以上图中数组变量放在了栈内存中。
而创建一个对象时,这个对象将被保存在堆内存中(也叫运行时数据区),堆内存中对象不会随着方法结束而销毁(这个对象可能被另一个引用变量引用:如方法中参数传递),只有当一个对象没有任何引用变量引用它时,系统垃圾回收才会回收它。
备注:
一定要把数组看成两部分,一部分是数组引用(代码中定义的数组引用变量);另一部分是实际的数组对象(在堆内存里运行)。
堆内存中对象不能直接访问,只能通过数组引用变量来访问。
(4)引用类型数组初始化和二维数组初始化
引用类型数组初始化:引用类型数组的数组元素是引用,每个数组元素指向另一块内存,这块内存存储了有效数据。
如下图二所示
(图二)
二维数组及多位数组
定义:
type[][] arrayName;
初始化:
方法一:arrayName=new type[length][];//此种方式必须再次初始化length个type[]类型的变量
方法二:arrayName=new type[length01][length02];
举例(如下图三):
(图三)
三、小常识
①计算机底层运算逻辑:
/*计算机底层把数据转换为二进制,二进制加法计算方式(8位二进制举例)
* 比如:5+2=7
* 00000101=5
* 00000010=2
* 00000101
* + 00000010
* 00000111 =7
*0+0=0,0+1=1,1+0=1,1+1=10(向前进一位)
*举例: 00001100=12
* + 00000101=5
* 00010001=17
*/
②字符(char类型)的变量、值可直接比较大小,也可进行加减乘除运算,实际上都是使用该字符对应的编码参与运算
※Java中使用16位的Unicode字符集作为编码方式(ASCII字符集占8位)
四、补充知识:Arrays工具类
Java提供的Arrays工具类中static方法可以直接操作数组,
比如:
查找 : int binarySearch(type[] a,type key)等;
复制 : type[] copyOf(type[] array,int length)等;
排序 : void sort(type[] array)等;
赋值 : void fill(type[] a ,type value)等操作.