JAVA问题:Person p=new Person;这个p是不是对象??是不是Person的实例?是不是凡是这样的p都叫对象?
发布网友
发布时间:2022-05-17 00:15
我来回答
共5个回答
热心网友
时间:2023-09-16 03:47
楼上的说得不太准确,准确地讲,p不是一个对象,其实p是一个引用.初学JAVA的时候可以把p理解成一个对象,但是到了后面编程,你会出现很多错误.
我们把你的这个代码拆开来讲,
Person p;执行这句代码时会在内存中开辟一段存储空间,用以存储一个引用(指针),由于你没有给这个引用(指针)赋值,所以,p现在是空指针,p==null成立!
new Person();的意思新建一个Person对象,然后放在对象栈中,对象栈是一个专门存放对象的一段存储空间,不能直接访问的,需要通过引用(指针)来间接访问,
最后解释=号的作用,他是说把后面的对象的引用(指针)赋给前面的,于是p就指向了一个对象.你现在就可以通过p来操作对象栈的对象了.
也许你会讲既然p始终指向的是该对象,那么直接认为他就是一个对象为什么说不对呢.来看看下面的代码(假设Person类有个public 变量int age代表一个人的年龄);
Person p=new Person();
p.age=10; //设置p的年龄为10岁
Person p2=p;
p2.age=20; //设置p2的年龄为20岁
System.out.println(p.age); //在屏幕上输出p的年龄
你认为会输出多少呢 ? 10? 那你就错了,屏幕上会输出20
因为p,p2是一个引用,p2=p的意思是把p的引用给p2,此时p和p2是同一个对象,在对象栈中指向同一个对象.p2改变了对象栈中的对象,因此p.age也会变.这个在C++中叫做浅拷贝,就是只把引用给p2,并没有生成新的对象.
也许你会说,只要我不用p2=p;这样的语句就不会错误了吧,但是在后面编程中你会把一个对象从一个类传到另一个类中,这样就避免不了这种浅拷贝.所以正确理解p的意义非常重要!
热心网友
时间:2023-09-16 03:47
首先,你应该明白 由类产生对象的基本形式:
类名 对象名 = new 类名();
由上面的格式,我们就可以产生一个类Person的实例化对象:
Person p = new Person( ); // 声明Person对象p并直接实例化此对象!
楼主您首先应该对类产生对象的基本形式有一个确切认识,您也可以用一下方式:
Person p ; // 先声明一个Person类的对象p
p = new Person(); // 用 new 关键字 实例化Person的 对象p
通过以上讲解:不知道您现在 能得出你 要的 答案了吗?
热心网友
时间:2023-09-16 03:48
是的,如果你创建的Person是抽象类的,那么这个p就不是对象,因为抽象类是不能实例化的。
热心网友
时间:2023-09-16 03:49
Person p=new Person这个应该不成立,也可能我不知道
Person p=new Person();都是这么写,
确实可以称之为对象
热心网友
时间:2023-09-16 03:49
差不多把,用new加上这个类的构造方法(即与类同名的那个方法)就是实例化一个该类的对象