面向对象03

面向对象03

引用类型数组
  1. 声明

    String[] str = new String[]{};
    //与普通类型数组类似 引用类型[] 数组名 new 引用类型数组 
    
  2. 赋值

    str = new String[10];
            for (int i = 0; i < str.length; i++) {
                str[i] = new String(""+i);
            }
    //需要注意的是,引用类型数组每个元素都是引用类型,赋值时需要单独new个对象存进去
    
    
  3. 访问

    System.out.println(str[0].charAt(0));
    System.out.println(str[1].length());
    //每个元素都是单独的对象,访问对象属性(和方法)通过对象名打点来访问
    
内存补充:

Java运行不是直接在内存条中运行,而是通过Java虚拟机(Jvm)管理。

在Jvm中,大致分为三个区域,栈,堆,方法区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nbwOR29H-1660976196078)(C:\Users\tarena\Desktop\ass\李柯辰作业.png)]

  • 所有方法,静态变量都存在方法区中(主方法也是方法),当加载一个类时(如new一个对象),先将其中的方法(构造方法)和静态变量加载。
  • 堆中存放对象(数组)和属于它的成员变量(数组元素)。
  • 栈中存放局部变量和方法的参数。

对象名也是局部变量(引用类型变量)存放在栈中,指向的是地址,通过变量名访问对象即通过地址指向堆中的实例。

基本类型变量存放的是值,直接放在栈中,使用时就是直接使用它代表的值。

引用类型数组的创建:

数组本身被看做是对象,数组名存放在栈中,存的是地址,指向的是堆中的数组对象,在没有赋值时,数组对象中的元素没有指向,即为null。在此时对数组元素进行操作就会报空指针异常。

赋值后,数组元素存放的是地址,指向的是堆中对应的实例对象。

对数组元素的访问,即为通过其存放的地址指向对应的实例。

Java中都是值传递:

  1. 基本类型的传递即为本身代表的值的副本的传递。

  2. 引用类型的传递即为本身对应的对象的的地址副本的传递。

    注:方法的传参也是同理。

int a = 5;
        int b = a;
        b = 8;
        System.out.println(a);//5
//在栈中a为5,b为a传递的值5,对b重新赋值,a结果并不会改变
class Test{
    int a;
}
Test test01 = new Test();
System.out.println(test01.a);//0,默认值
Test test02 = test01;
test02.a = 10;
System.out.println(test01.a);//10
//在栈中test01存放的地址指向Test对象,此时访问这个对象的属性a
//因为没有赋值,所以为0。然后把test01赋值给test02,首先没有new关键字,可以确定并没有创建新的对象,赋值就是把栈里面test01中存放的地址赋值给test02,对test02的属性a赋值为10,即为改变其地址所指向对象的属性a,那么再访问test01时,同样的地址指向同一个对象,属性a已被赋值为10

的属性a赋值为10,即为改变其地址所指向对象的属性a,那么再访问test01时,同样的地址指向同一个对象,属性a已被赋值为10
















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值