for循环
    for循环结构
    for ( ①初始化语句; ②boolean表达式; ④操作后的语句){
    ③循环体
    }
    1.初始化语句,用来声明变量,一般用于控制循环条件.只执行一次

    1. boolean表达式:作为循环条件

    —如果boolean表达式为ture,执行循环体
    — 如果boolean表达式为false,跳过执行循环体
    3.循环体:重复性的操作
    4.操作后的语句,循环体执行后会调用该语句,一般是循环控制变量的递增或递减

    总结
    1> 还是循环的四部曲
    2> for循环的代码更精简,代码行数更少, ( 在明确知道循环次数的情况下,让开发者更关注循环体本身)
    实际开发过程中,如果知道循环次数,一定用for

    无限循环
    while(true){
    //ToDo
    }
    for( ; ; ){
    //ToDo
    }

    嵌套循环
    重复性的操作使用循环
    如果这个重复性的操作也需要执行多次,此时就需要考虑嵌套循环了
    // System.out.println(x); 输出@后光标换行
    // System.out.print ( x ); 输出@后光标不换行

    // 输出一行 @ @ @ @
    for(int j = 1; j <=4; j++){
    System.out.print(“ @ “);
    }
    System.out.println(); //换行
    //第二行
    for(int j = 1; j <=4; j++){
    System.out.print(“ @ “);
    }
    System.out.println();

    //输出三行
    for( int i = 1; i <= 3; i++){
    for(int j = 1; j <=4; j++){
    System.out.print(“ @ “);
    }
    System.out.println();
    }

    经验
    1> 外层循环控制行,内层循环控制内容列
    2> 外层循环执行1次,内层循环4次

    image.png

    for( int row = 1; row <= 9; row++){
    for( int col = 1; col <= row; col++){
    System.out.print( col + “×” + row + “=” + row * col + “ “) ;
    }
    System.out.println();
    }

    控制循环
    break:
    1> 结束switch
    2> 应在循环中,用于停止整个循环(提前结束循环,循环不在继续)
    /

    for( ; ; ){
    if(表达式){
    语句;
    break;
    }
    }

    break的后续语句不会被执行

    continue:
    用来中止一次循环,立即进入下一次循环(跳过本次循环)

    break是终止整个循环,continue是中止本次循环,整个循环还没结束.

    数组 (必须掌握)
    第一部分:数组的定义 ,和静态初始化,动态初始化
    第二部分:数组的使用

    程序计数器(了解)
    当前线程所执行的字节码的行号指示器

    本地方法桟:(了解)
    为虚拟机使用的native方法服务

    方法区: (重点)
    存储已被虚拟机加载的类信息、常量、静态变量即时编译器编译后的代码数据等

    java虚拟机桟:
    每个方法在执行的时候都会同时创建一个桟帧, 当方法执行完毕后,该方法的桟帧就被销毁了
    ( java 方法执行时,在桟区执行)

    java堆: 简称为堆区
    所有的对象实例以及数字都在堆区上分配
    每次使用new关键字,就表示在堆区内开辟一块新的空间

    Gc ( 垃圾回收期 )
    java的自动垃圾回收机制:

    jvm内存模型
    1 方法区:用于存储字节码(xx.class)信息,也即类信息
    2 栈区:方法执行时在栈区分配内存空间,java方法执行时,在栈区执行。
    3 堆区:数组的内存都分配在该区。该区变量有一个标志——new操作符,表示在堆内存中开辟一块新的存储空间。

    数组 ( Array )
    所谓数组, 把具有相同类型的多个常量值有序组织起来的一种数据形式.
    这些按一定顺序排列的多个数据称为数组
    1> 数组中的每一个常量值称为数组元素( item / element )
    2> 数组中的使用索引/下标( index )来表示元素存放的位置,索引从0开始,步长是1 ,有点类似于Excel表格的行号.

    数组的定义语法
    int[] ages; 元素数据类型[] 数据名;
    // 建议: 数组名以 xx(Arr) / xx(Array) / xx(s)
    String[] nameArr / nameArray / names
    数组的长度是固定的,无论以那种,
    静态初始化:
    ( 事先知道元素是什么,就选择静态初始化)
    语法: 元素数据类型[] 数组名 = new 元素数据类型[] {元素1 , 元素2 , 元素3 , ….. };
    step1 : 定义一个数组
    int[] numArr;
    step2: 静态初始化numArr数组
    numArr = new int[] {1,3,5,9,7};

    // 定义和初始化合二为一
    int[] numArr = new int[] {1,3,5,9,7};

    // 语法糖 (定义和初始化必须在同一行)
    // 元素数据类型[] 数组名 = {元素1 , 元素2 , 元素3 , ….. };
    int[] numArr2 = {1,3,5,9,7};

    //错误用法: 语法糖定义和初始化必须在同一行上,不能分开
    int[] numArr3;
    numArr = {1,3,5,9,7};

    nums.length(nums的长度) 

    null: 空引用,不引用任何堆内容
    nums = null; (此时new就像未初始化,无法使用)
    image.png
    动态初始化
    事先不知道元素是什么,但知道需要几个内存空间(知道元素个数),
    程序员只设置

    语法:
    元素数据类型[] 数组名 = new 元素数据类型[ length ];
    int[] nums = new int[4];

    image.png
    int[] numArr = new int[4];
    //重新初始化
    numArr = new int[5];

    注意:不能同时指定元素值和数组长度
    错误写法 int[] numArr = new int[5]{1,3,5,7,9};

    基本操作:
    int[] nums = {1,3,5,7,9};
    1> 获取数组长度: 语法( 数组名.length )
    System.out.println(nums.length);
    2> 获取元素的值 语法: 变量 = 数组名[index]
    index 取值范围[0, 数组名.length - 1)
    // 最小下标 0
    // 最大下标 3
    数组的最大下标永远是 数组名.length - 1
    int item;
    item = nums[index];
    3> 设置元素值 语法 数组名[index] = 新的值;
    nums[0] = 10; // 把索引0的值设置为10

    // 注意 : 问题1: 数组下标越界的问题
    错误示范: item = nums[x]; (x >= nums.length)
    // 问题2: nums = null;
    没有初始化,空引用问题

    数组的遍历操作
    依次访问数组的每个元素 (也称之为迭代)
    // 1> 普通for循环 : 借助index获取每个元素
    int[] nums = {1,3,5,7};
    int item;
    for( int index = 0; index < nums.length; index++){
    // 获取指定索引为止数组元素
    item = nums[index];
    // 使用该元素
    System.out.println(“ item = “ + item);
    }

    // 2> 增强for (语法糖)
    语法:
    for( 元素数据类型 变量:数组){
    使用该变量
    }
    for(int item:nums) {
    System.out.println(item)
    }
    需要索引 用普通for , 不关注索引 用增强for
    int[] arr = {11,22,33,44,55,66,22,77,88};
    int target = 22; (有下标,用普通for)
    int index = -1; // 用于记录查找目标元素第一次出现的索引位置
    // step1: 依次取出每个元素
    int item;
    for(int i = 0; i < arr.length; i++){
    item = arr[i];
    // step2: 和目标元素target比较,如果相等,记录位置并停止查找
    if( item == target ){
    index = i;
    break;
    }
    // step3: 输出index的值
    if( index < 0){
    System.out.println(“没找到元素”);
    } else {
    System.out.println(“找到元素,位置为:” + item);
    }
    }

    image.png
    image.png
    image.png