[Java]循环高级+数组

无限循环(死循环)

循环条件一直为真时,循环体内的内容会反复重复的执行。

无限循环下不能写其他代码了,循环一直执行会使无限循环下面的代码执行不到

for(;;){

}

while(true){

}

do{

}while(true);

跳转控制语句

循环执行过程中跳转到其他语句执行。

案例:小老虎吃包子

public class Test3 {
    public static void main(String[] args) {
        for (int i = 0; i <=5; i++) {
            if (i == 3) {
                continue;
            }
            System.out.println("吃:"+i);
        }
    }
}

·continue :结束本次循环继续下一次循环

·break:结束所有的循环

数组

存储同种数据类型的多个值的容器

但是数组容器在存储数据的时候,需要结合隐式转换考虑。例如:

        定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的,

但是byte类型,short类型,int类型的数据是可以存到这个数组里面的。

建议:容器的类,和存储的数据类型保持一致。

数组的定义:

格式一:数据类型[] 数组名

int [] array

格式二:数据类型 数组名[]

int array[]

数组的初始化:

初始化:在内存中为数组容器开辟空间并将数据存到容器的过程

格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,....}

简化格式:数据类型[] 数组名 = {元素1,元素2,....}

范例:int[] array = new int[]{11,22,33}

package day6;
//静态初始化
public class Msz1 {
    public static void main(String[] args) {
        int[] arr1 = {10,12,14,13};
        String[] arr2 = new String[]{"tom","bob","alie","faye"};
    }
}
地址值:

数据在内存中存放的位置的编号

打印数组的时候,实际出现的是数组的地址值。

public class Msz1 {
    public static void main(String[] args) {
        int[] arr1 = {10,12,14,13};
        String[] arr2 = new String[]{"tom","bob","alie","faye"};
        System.out.println(arr1);//输出数组地址[I@776ec8df
    }
}

[ :表示现在打印的是一个数组。

I:表示现在打印的数组是int类型的。

@:仅仅是一个间隔符号而已。

776ec8df:就是数组在内存中真正的地址值。(十六进制的)

数组元素访问:

public class Msz2 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3,4,5};
        arr1[2] = 10;
        System.out.println(arr1[2]);
    }
}

格式:

数组名[索引];

索引:

也叫角标、下标;就是数组容器中每一个小格子对应的编号。

  • 索引一定是从0开始的。
  • 连续不间断。
  • 逐个+1增长。

作用: 

  • 获取数组中对应索引上的值
  • 修改数组中对应索引上的值
数组的遍历:

遍历:就是把数组里面所有的内容一个一个全部取出来

数组长度:数组名.length

public class Msz2 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3,4,5};
        arr1[2] = 10;
        System.out.println(arr1[2]);

        for (int i = 0; i < arr1.length-1; i++) {
            System.out.println("第"+i+"为"+arr1[i]);
        }
    }
}

一个循环只干一件事情 !!!

动态初始化:

初始化时只给定数组的长度,由系统分配初始值

创建的时候,数组的长度由我们自己给定,由虚拟机给定默认初始化值

格式:

数据类型[] 数组名 = new 数据类型[数组的长度];

int[] arr =new int[3];

public class Msz6 {
    public static void main(String[] args) {
        String[] arr = new String[10];
        arr[0] = "tom";
        arr[1] = "jack";
        arr[2] = "lisi";

        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}
数组默认初始化值: 

整数类型:0

小数类型:0.0

布尔类型:false

字符类型:'\u0000'

引用类型:null

两种初始化的区别:

静态初始化:int[] arr = {1,2,3,4,5};

动态初始化:int[] arr = new int[3];

静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。

动态初始化:手动指定数组长度,由系统给出默认初始化值。

使用场景:

只明确元素个数,但是不明确具体的数据,推荐使用动态初始化。

已经明确了要操作的所有数据,推荐使用静态初始化。

例如:

1.使用数组来存储键盘录入的5个整数。

int[] arr = new int[5];       //动态初始化

2.将全班的学生成绩存入数组中,已知学生成绩为:66,77,88,99,100   

使用静态初始化:int[] arr = {66,77,88,99,100};

Java内存分配

Java的内存分配图:

栈:本地方法运行时使用的内存,比如main方法运行,进入方法栈中执行

堆:存储对象或者数组,new来创建的,都在堆中存储

方法区:存储可以运行的class文件

本地方法栈:JVM操作系统功能的时候使用

寄存器:给CPU使用

程序开始执行时,程序的入口(main)会进栈,代码执行完毕出栈。

public static void main(String[] args){//栈
int a = 10;//栈
int b = 10;//栈
c = a+b;//栈
sout(c);//栈
}

 栈中存储数组名,数组开辟的内存空间存储在堆内存中。arr用数组在堆中的地址获取到数组存储的数据。只要是new出来的一定是在堆里面开辟一个小空间,如果new了多次就会在堆里开辟多个小空间,每个小空间有各自的数据

public static void main(String[] args){//栈
int[] arr = new arr[10];//栈中存储数组名,都组开辟的内存空间存储在堆内存中。arr用数组在堆中的地址获取到数组存储的数据
sout(arr[1]);
arr[0]= 11;
sout[arr0];
}

arr2 赋予arr1的地址后,arr2所存储的数据和arr1中存储的数据相同 ,因为他们访问的是同一片内存地址。其中一个数组对小空间中的值改变,另一个数组访问得到是改变后的值

int[] arr1 = new arr[10];
int[] arr2 = arr1; //将arr1存储的堆内存地址赋值给arr2

 

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值