Java语言有三种控制结构:顺序结构、分支结构、循环结构java
顺序结构就是程序从上而下逐行地执行,中间没有任何判断和跳转程序员
控制表达式只容许byte、short、char、int、String和枚举类型
express
swicth(expression){ case condition1:{ statement(s) break; } case condition2:{ statement(s) break; } ... default:{ statement(s) } } // 注意每一个case中须要带有break;
switch中的每一个case中都须要带有break,由于switch语句遇到相等的值,程序就开始执行这个case标签后的代码,再也不判断与后面case,default标签的条件是否匹配,除非遇到break;才会结束数组
初始化语句init_statement 循环条件test_expression 循环体body_statement 迭代语句iteration_statement
[init_statement] while(test_expression){ statement; [iteration_statement] } 例: int count = 0; while(count<10){ System.out.println(count); count++; }
// 循环体至少执行一次 [init_statement] do{ statement; [iteration_statement] }while(test_expression); 例: int count = 0; do{ System.out.println(count); count++; }while(count<10);
for([init_statement];test_expression;[iteration_statement]){ statement; }
for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ System.out.println(i+j); } }
结束当前循环并发
// 结束至指定循环 outer: for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ System.out.println(i+j); if(j==1){ break outer; } } }
// 忽略本次循环 for(int i=0;i<5;i++){ if(i==2){ continue; System.out.println(i); } }
数组用于存储多个数据,每一个数组元素存放一个数据,一般可经过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值app
Java语言中数组必须先初始化,而后才可使用。所谓初始化,就是为数组元素分配内存空间,并为每一个数组元素赋初始值。只要为数组元素分配了内存空间,数组元素就具备了初始值。初始值的得到由两种形式:一种是由系统自动分配,另外一种由程序员指定。工具
String[] strArray(推荐) String strArray[]
arrayName=new type[ ] {element1,element2,element3.....};性能
初始化时由程序员显式指定每一个数组元素的初始值,由系统决定数组长度 int[] intArray = new int[]{5,6,7,8} int[] intArray = {5,6,7,8}
arrayName=new type[length];spa
int[] intArray = new int[4]; 初始值以下: 整型(byte、short、int和long),初始值是0 浮点(float、double),初始值是0.0 字符(char),初始值是'\u0000' 布尔(boolean),初始值是false 引用类型(类、接口和数组),初始值是null
数组下标从0开始,intArray[0]是第一个元素
可使用for或foreach遍历数组code
数组变量只是一个引用,实际的数组对象被存储在堆(heap)中
若是引用的对象是局部变量,那么它被存储在栈(stack)中
String[][] strArray = new String[][]{new String[3],new String[]{"hello"}}
Java提供了操做数组的工具类:java.util.Arrays;Arrays类包含的一些static修饰的方法能够直接操做手数组。
查找元素出现索引(要求元素已经升序排序): int Arrays.binarySearch(type[] a,type key) 若是数组不包含key,则返回负数 在指定范围查找元素出现索引(要求元素已经升序排序): int Arrays.binarySearch(type[] a,int fromIndex,int toIndex,type key) 复制数组,若是小于原来长度则取前面的元素,若是大于则多出来的补默认值 type[] Arrays.copyOf(type[] original,int length) 在指定范围复制数组,与上面相似 type[] Arrays.copyOfRange(type[] original,int from,int to) 对比数组,若是长度相等且数组元素也一一相同,返回true boolean Arrays.equals(type[] a,type[] b) 数组赋值,把数组元素所有复制为val void Arrays.fill(type[] a,type val) 在指定范围数组赋值 void Arrays.fill(type[] a,int fromIndex,int toIndex,type val) 排序 void Arrays.sort(type[] a) 在指定范围数组排序 void Arrays.sort(type[] a,int fromIndex,int toIndex) 转换成字符串,按顺序把多个数组元素连缀在一块儿,多个数组元素使用英文逗号和空格隔开 String Arrays.toString(type[] a)
Java8新增操做数组API
Java8加强了Arrays类的功能,为Arrays类增长了一些工具方法,这些工具方法能够充分利用多CPU并行的能力来提升设值、排序的性能。
int[] arr1 = new int[]{3,-4,25,16,30,18}; // 并发排序,性能更强 Arrays.parallelSort(arr1); int[] arr2 = new int[]{3,-4,25,16,30,18}; // 前一个元素乘积和后一个元素相乘,第一个元素时乘以1 {1*3=3,3*-4=-12,-12*25=-300,-300*16=-48000,-48000*30=-144000,-144000*18=-2592000} Arrays.parallelPrefix(arr2,new IntBinaryOperator(){ public int applyAsInt(int left,int right){ return left*right; } }); int[] arr3 = new int[5]; // 与索引值相乘 {0,5,10,15,20} Arrays.parallelSetAll(arr3,new IntUnaryOperator(){ public int applyAsInt(int operand){ return operand*5; } });