java进阶-第三天

流程控制与数组

##switch
switch语句中只能是byte,short int, char,枚举类型和String。
StringBuffer等不可以
例如 String season=“夏天”; switch(“season”) //是可以的

##循环结构
1 可以使用break控制循环结束
2 break 不止可以结束其所在循环,还可以直接结束其外层循环,需要在break后面紧跟一盒标签,这个标签用于标识一个外层循环
例如

public class BreakTest
{
    public static void main(String[] args)
    {
        //外层循环,outer作为标识符
        outer:
        for(int i=0;i<5;i++)
        {
            //内层循环
            for(int j=0;j<3;j++)
            {
                System.out.println("今天不开心");
                if(j==1)
                {
                    //跳出外层循环
                    break outer;
                }
            }
        }
    }
}
  

3 使用continue作用是忽略本次循环剩下语句。和break一样也可以跟标签。
4 return用来结束整个方法·。

数组

1 定义数组

type[] aeeayname;   //推荐使用
type arrayname[];

2 数组的初始化
静态初始化:指定每个数组元素的初始值,系统决定数组长度

//第一种:一个int类型数组
int[] intArr;
intArr=new int[]{5,6,8,20};
//第二种,简写
type[] arrayName={element1,element2};
int[] a={5,8,12};  //将数组定义和初始化同时进行

动态初始化
动态初始化只需要指定数组长度。

int[] price=new int[5];

3 使用数组
foreach循环
介绍:使用foreach循环遍历数组和集合的时候,无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。

语法格式:

for(type variableName:array|collection)
{ 
    //variableName自动迭代的访问每个元素
}

//示范
public class FoeeachTest
{
    public static void main(String[] args)
    {
        String[] books={"jaba大全","死神来了"};
        //其中book将会自动迭代每个元素
        for(String book:books)
        {
            System.out.println(book);
        }
    }
}
注意:使用foreach迭代数组的时候,并不能改变数组元素的值,因此不要对foreach循环变量进行赋值。

4 深入数组
1 数组是一种引用数据类型。
其中数组的引用存储在栈内存中,真实的数组存储在堆内存中。
注意:在jvm中栈存储的是对象的引用和局部变量,堆中存储的是对象,垃圾回收就是发生在堆中。

下面举个例子说明了数组在内存中的变化。

public class ArrayInRam
{
    public static void main(String[] args)
    {
        //定义数组a,并且进行静态初始化
        int[] a={5,7,20};
        //定义数组b,并且进行动态初始化
        int[] b=new int[4];
        //输出b的长度
        System.out,printlb("b的长度是"+b.length);
        //输出a元素
        for(int i=0;i<a.length;i++)
        {
            System.out.println(a[i]);
        }
         for(int i=0;i<b.length;i++)
        {
            System.out.println(a[i]);
        }
        //因为a,b都是int类型的数组,所以可以将a的值复制给b,也就是让b引用指向a引用指向的数组
        b=a;
        System.out.println("b的长度为"+b.length);   //此时长度变为3;
        
    }
}

解释:创建两个数组并且初始化就是产生了4个内存区,堆两个栈两个,执行代码块b=a时,系统将会把a的值赋值给b。
a,b都是引用类型的变量,存储的是地址,因此就是让b指向a所指向的地址,也就是指向堆中的内存,**由此对内存中的b数组对象就成了垃圾**,等待垃圾回收。

2 引用类型数组初始化
这种情况应对的是引用类型的数组元素是引用的情况。

class Person  // 先定义一个Person类,注意:所有的类都是引用类型
{
    public int age;
    public double height;
    public void info()
    {
        System.out.println("我的年龄是:"+age+"。我的身高是:"+height);
    }
}

下面定义一个Person数组,动态初始化这个数组

public class ReferenceArrayTest
{
    public static void main(String[] args)
    {
        //定义一个students数组变量,类型是Person[]
        Person[] students;
        //进行动态初始化
        students=new Person[2];
        //创建一个person实例zhang
        Person zhang=new Person();
        //为zhang所引用的Person对象赋值
        zhang.age=15;
        zhang.height=165;
        //再次创建一个Person实例lee
        Person lee=new person();
        lee.age=58;
        lee.age=198;
        //将zhang变量的值赋值给第一个数组元素
        students[0]=zhang;
        //将lee变量1值赋值给第二个数组元素
        students[1]=lee;
        //下联两行代码结果完全一样,因为lee和students[1]指向的是同一个Person实例
        lee.info();
        students[1].info();
    }
}

内存解释图:
在这里插入图片描述
3 多维数组
注意:java支持多维数组语法,但是内存上来看并没有多维数组,只是数组变量是引用,指向真实的数组内存也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情况看上去很像多维数组。

初始化方法

int[][] b=new int[3][4];

4 使用
java8增强工具类:Arrays
添加链接描述
并发场景下功能:添加链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值