java 对象new的理解

java作为一种面向对象编程的语言,至今非常火热,我学习了一段时间发现自己并没有什么进步,在这里记录一些学习的东西;

java的new过程:

Pet pet =  new Pet();

上面的代码产生了一个新的对象pet,其中pet为引用,存储的内存中实例对象的地址,左侧的Pet说明对象的类型,右侧的new过程则是分配内存空间,并产生对象实例。

看过程就是简单的赋值: String pet = “pet_Object”;

将右侧的值赋给左侧的类型为String的引用pet;

这样的话,不难以理解,右侧是一个完整的实例,通过Pet()构造出来的完整对象,Pet pet =  new Pet();将右侧的对象赋给左侧,在这个赋值的过程中,左侧的类型对这个实例进行验证,这个验证过程有三种情况:

1)右侧的实例和左侧的类不符,并且不存在任何关系,那么JVM就会报错;

2)右侧的实例和左侧的类符合,编译成功;

3)右侧的实例和左侧的类并不符合,但是右侧的实例所对应的类是左侧类型的子类,这时候就会发生“向上转型”的情况,编译成功,虽然这时候子类中的特定方法不能使用,但是在对pet实例进行“向下转型”,就可以调用子类中的特殊方法;

上面的过程中依然有很多的疑问:1、这个new的过程中产生的实例在对象中是如何存储的;2、方法体的存储问题;

网上关于new的资料很多,很多都说,等号左侧的类是模板,经过我的验证,并非如此;

eg:

public static void main(String[] args){
    String str = "cat";
    Pet cat = new Cat(str);
    cat.eat();
    Cat cat1=(Cat)cat;
    System.out.println(">>>>>>"+cat1.getCat());
}
结果:
This is Cat's constructed function
This is Cat,it's the children
>>>>>>cat
上面的代码中,Pet类中并没有任何的属性值,但是依旧保存了字符串,也就是说这个是先有的实例,然后实例赋值给了cat;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值