黑马程序员技术交流社区

标题: new一个对象都做了什么 [打印本页]

作者: 马年出黑马    时间: 2014-4-2 08:16
标题: new一个对象都做了什么
我知道的是:在堆中分配空间,初始化成员变量,执行构造函数……  在栈内定义变量指向这个对象…… 还有什么啊?

如果只有这些的话,如果一个类没有成员变量,构造函数为默认构造函数,那new它有什么意义呢?

作者: Engle    时间: 2014-4-2 10:15
如果你想知道new一个对象底层做了什么,你可以百度一下有很多答案。
我想说的是,java是一门面向对象语言,你在开发过程中不管是自己定义了一个类,还是使用jdk已经存在的类,你都是为了使用该类的属性或者方法,所以你必须拿到这个类的实例,而new对象的就是获取这个类实例的一种最普遍的方式。
作者: shi0000    时间: 2014-4-2 11:17
这样的类就没有啥具体用途啊,你想让它做啥,有没有源码,贴出来,我看看
作者: 491138002    时间: 2014-4-2 11:29
本帖最后由 491138002 于 2014-4-2 11:31 编辑

举个例子:Person p= new Person();
new的过程大概是这样:
1.开辟内存空间。
2加载相应的person类,代码块也加载进来。
3.创建这个类的实体对象,调用构造方法,给对象中的成员变量进行赋值。
4.把创建好对象的地址赋值给p。
作者: 马年出黑马    时间: 2014-4-2 11:35
shi0000 发表于 2014-4-2 11:17
这样的类就没有啥具体用途啊,你想让它做啥,有没有源码,贴出来,我看看 ...
  1. package text;

  2. class A {
  3.         public static void fun(){
  4.                 System.out.print("static方法不new也能用");
  5.         }
  6.        
  7.         public void fun1(){
  8.                 System.out.print("非静态方法不newb不能用?");
  9.         }
  10.        
  11. }
  12. public class text {

  13.         public static void main(String[] args){
  14.                 A.fun();
  15.                 A.fun1();
  16.         }
  17. }
复制代码


通过验证发现不创建A类对象的话,A类中的非静态函数是不能被直接调用的,new了以后就能调用了,说明new的过程对成员函数做了什么,可是我不知道它到底做了什么
作者: 马年出黑马    时间: 2014-4-2 11:41
Engle 发表于 2014-4-2 10:15
如果你想知道new一个对象底层做了什么,你可以百度一下有很多答案。
我想说的是,java是一门面向对象语言, ...

我百度过了,找不到单纯就这个问题说透的,我想知道创建一个对象时,内存中 对象的基本数据类型和引用数据类型的成员变量分别怎么分配,他们值又放在哪里,对类的成员方法做了怎样的初始化 等等
作者: shi0000    时间: 2014-4-2 11:51
非静态的代码是在创建对象的时候加载的,new之后创建对象,静态是在类加载时加载的,可以直接使用  类名.   的方式调用
作者: 肖涵    时间: 2014-4-2 13:49
new 一个数组的时候其实也是执行了默认构造函数的,数组也是对象(Java中一切皆对象),它执行的构造函数是Object的构造函数。。。
作者: 请备注    时间: 2014-4-2 17:54
静态是优先与对象存在的,对象存在之前已经初始化,所以可以直接用类名调用。
非静态是在对象建立之后才初始化的,不new的话fun1( )并为进行初始化,当然就不能调用了。
以上仅供参考。
作者: 马年出黑马    时间: 2014-4-2 19:02
请备注 发表于 2014-4-2 17:54
静态是优先与对象存在的,对象存在之前已经初始化,所以可以直接用类名调用。
非静态是在对象建立之后才初 ...

你所指的是fun1()初始化指的是?你的意思是:new 创建一个A类对象时,会把fun1()加载进代码区?这时new出来的这个对象和代码区中的fun1()怎样建立联系,否则此没有成员变量和重写过的构造函数的对象有什么存在价值?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2