java 对象new的理解

来源:互联网 发布:免费行业报告下载知乎 编辑:程序博客网 时间:2024/05/18 00:57

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 functionThis is Cat,it's the children>>>>>>cat
上面的代码中,Pet类中并没有任何的属性值,但是依旧保存了字符串,也就是说这个是先有的实例,然后实例赋值给了cat;

原创粉丝点击