黑马程序员技术交流社区

标题: 构造函数中的小问题 [打印本页]

作者: 郭繁森    时间: 2011-12-17 23:23
标题: 构造函数中的小问题
本帖最后由 guofansen 于 2011-12-18 14:15 编辑

class person
{
        person()
        {
                System.out.println("person run");
        }
}
class persondemo
{
        public static void main(String[] args)
        {
                person p=new person();
        }

}
中                person p=new person();
的 person p   怎么理解?它是创立的对象么,格式如何书写
作者: 小春同学    时间: 2011-12-17 23:33
Person 是类型,p先是类型变量,然后用构造器新造了一个对象赋给p,p就成了Person的一个具体对象。
作者: 马伟奇    时间: 2011-12-17 23:39
person p=new person();
new person();这个是创建对象;

作者: 王胜利    时间: 2011-12-18 00:03
在堆上开辟一段控件标记为P 而内容就是Person类的属性和方法。 作用是要把需要用的P这个对象放在P这个载体中,让它去传递。
作者: 张帅    时间: 2011-12-18 00:06
首先,如果你没写构造函数,每个类会有一个默认的构造函数,所以可写可不写。
其次,似的你这是创建对象。格式为:
    (1)、在java中通过 new 操作符来完成 产生一个对象,其实就是在堆内存中产生一个实体
    (2)、类名 对象名 = new 类名();
    (3)、对象为类类型变量,记住:类类型变量指向对象
    (4)、对内存中的变量都有默认初始化值:str 为 null,int 为 0,赋给变量的值叫:显示初始化值。
    (5)、使用对象时,在java中为: 对象.对像成员
这是黑马视频中的例子
  1. class Car{
  2.         //描述颜色
  3.         String color = "red";
  4.         //描述轮胎数
  5.         int num = 4;
  6.        
  7.         //运行行为。
  8.         void run(){
  9.                 System.out.println(color+"|"+num);
  10.         }
  11.         public static void main(String[] args){
  12.                 //创建对象
  13.                 Car c = new Car();
  14.                 给对象赋值
  15.                 c.color = "blue";
  16.                 调用对象方法
  17.                 c.run();
  18.         }
  19. }
复制代码

作者: 郭繁森    时间: 2011-12-18 01:13
张帅 发表于 2011-12-18 00:06
首先,如果你没写构造函数,每个类会有一个默认的构造函数,所以可写可不写。
其次,似的你这是创建对象。 ...

(2)是我所疑惑的,其他的还知道
作者: 郭繁森    时间: 2011-12-18 01:14
熊明春 发表于 2011-12-17 23:33
Person 是类型,p先是类型变量,然后用构造器新造了一个对象赋给p,p就成了Person的一个具体对象。 ...

呃,对的
作者: 张帅    时间: 2011-12-18 02:05
guofansen 发表于 2011-12-18 01:13
(2)是我所疑惑的,其他的还知道

可否说的详细些?同学
作者: 刘志祥    时间: 2011-12-18 07:05
关于person p=new person();这句代码的分解:
=右边的new person()是在堆内存中开辟一片区域,用来存储实体对象。在一开辟出来以后,该对象实体就返回一个地址;
=左边是定义一个person类型的引用p,这个p可以用来存储地址(简单讲,p就是一变量);
=号就是赋值符,把右边产生的地址,赋给左边的地址引用变量p。
这样p就指向了堆内存中的实体对象。就可以利用p来调用对象中的方法。
作者: 郭繁森    时间: 2011-12-18 08:01
张帅 发表于 2011-12-18 02:05
可否说的详细些?同学

我 的意思是(2)所写的知识点我不知道,现在看懂了
作者: 李明    时间: 2011-12-18 09:54
Person p=new Person();
等号左边,Person p其实和int a差不多,是在栈内存中定义了一个变量。
等号右边,new Person(),这是固定格式,调用构造函数在堆内存中创建一个对象,创建对象时进行初始化,也就是执行构造函数Person()
然后把对象的内存地址赋给变量p,就可以用p来指向对象了,并且引用对象了。
作者: 黑马_孙万春    时间: 2011-12-18 10:26
Person p是创建一个Person类的对象引用,new Person()是创建的一个对象,Person p=newPerson();是把这个引用指向这个对象。
作者: 张帅    时间: 2011-12-18 11:00
guofansen 发表于 2011-12-18 08:01
我 的意思是(2)所写的知识点我不知道,现在看懂了

:D,好的,以后一起进步
作者: wsssx    时间: 2011-12-18 11:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 刘健    时间: 2011-12-18 11:56
person是类型,p是变量名称,=new person()是创建person的新的实例




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