流程控制
顺序结构
Java的基本结构就是顺序结,程序从上到下逐行执行,没有任何判断和跳转。
选择结构
Java提供了两种常见的分支控制结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支控制。
if
if(logic expression){
statement...
}
if(logic expression){
statement...
}else {
statement...
}
if(logic expression){
statement...
}
else if(logic expression){
statement...
}
... //可以有零个或多个else if语句
else{ //最后的else语句也可以省略
statement...
}
switch
switch(表达式){
case 值1:
statement...
break;
case 值2:
statement...
break;
case 值3:
statement...
break;
default:
默认语句;
}
循环结构
循环语句可以在满足条件的情况下,反复执行某一段代码。
while(布尔表达式){
循环体;
}
//实现1+2+3+...+100=?
public class WhileTest{
public static void main(String[] args){
int i = 0;
int sum = 0;
while(i <= 100){
sum+=i;
i++;
}
System.out.println(sum);
}
}
do-while
do{
循环体;
}while(布尔表达式);
区别
while先判断后执行,do-while是先执行后判断,do-while总是保证循环体会被至少执行一次。
for 循环
for(初始表达式;布尔表达式;步进){
循环体;
}
public class Test{
public static void main(String[] args){
int sum = 0;
for(int i=0;i<100;i++){
sum += i;
}
System.out.println(sum);
}
}
九九乘法表
public class Test {
public static void main(String[] args) {
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
for(type variableName : array | collection){
System.out.println(variableName);
}
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4};
for(int i : arr) {
System.out.println(i);
}
}
}
break
break用于强行退出循环,不执行循环中剩余的语句。
continue
continue语句用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
// 把100-150之间不能被3整除的数输出
public class Test {
public static void main(String[] args) {
for(int i=100;i<=150;i++) {
if(i%3 == 0)
continue;
System.out.println(i);
}
}
}
数组
数组是一种常用的数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素。Java的数组要求所有的数组元素具有相同的数据类型。
一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留。数组也是一种数据类型,它本身是一种引用类型。例如int是一个基本类型,但int[]就是一种引用类型了。
定义数组
type[] arrayName;
type arrayName[];
数组的初始化
静态初始化:
arrayName = new Type[] {element1,element2,element3 ...};
intArr = new int[]{5,6,7,8};
动态初始化
int[] arrayName = new [5];
执行动态初始化时,只需指定数组的长度,即为每个数组元素指定所需的内存空间。
使用数组
数组索引是由0开始的,如果访问数组元素时指定的索引值小于0或者大于等于数组的长度,编译程序不会出现任何错误,但运行时出现异常:java.lang.ArrayIndexOutOfBoundsException:N数组索引越界异常
所有的数组都提供了一个length属性,使用for循环遍历每个元素
for(int i=0;i<arrayName.length;i++){
System.out.println(arrayName[i]);
}
数组内存分析
数组是一种引用类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。实际的数组对象被存储在堆内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。
如果堆内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。
Java8增强的工具类Arrays类
public class Test {
public static void main(String[] args) {
int[] arr = new int[] {1,2,3,4};
int[] arr2 = new int[] {3,1,8,4};
System.out.println(arr.length); //length属性
int[] b = Arrays.copyOf(arr2, 3); //复制数组
Arrays.sort(b); //对数组进行排序
for(int s:b) {
System.out.println(s);
}
}
}