using System;class Car
{
    private String color;
    private int meter;    public Car()
    {  
        color = "黄色";
        meter = 12345;
    }    public void setColor(String theColor)
    {
        color = theColor;
    }    public void setMeter(int theMeter)
    {
        meter = theMeter; 
    }    public string Show()
    {
        return "color=" + color + "meter=" + meter;
    }    public static void Main()//String[] args
    {
        Car car1 = new Car();       
       Console.WriteLine(car1.Show());
        //
         Car car2 = new Car();
        car2.setColor("黄色");
        car2.setMeter(98765);
        Console.WriteLine(car2.Show());
    }
}
以上代码定义了个Car类。 但为什么在Car类的Main方法里就直接能用这个Car类创建对象呢? 创建对象的时候我的Car类不是还能定义好吗? 怎么都可以拿来创建对象呢。???
在线等我就这点分了

解决方案 »

  1.   

    在类内 new 类本身是允许的。
      

  2.   

    为什么认为是在定义类的时候调用呢?
    不能认为是定义好了以后再调用Main的吗?
    就像在定义其他方法一样,
    定义的时候,内部代码是不执行的啊。
    等到程序说有的定义都结束以后,
    才会开始运行Main方法的啊
      

  3.   

    请注意:
    public static void Main()//String[] args 
    !!!这个方法是静态的静态方法的调用是不需要实例化的,
    静态方法与实际化的内容是隔离的,
    这个方法本身并没有被对象进一步的实例化,
    所以不存在循环NEW的情况.把你的代码重构一下,去掉static,你看看还能编译通过嘛?using System;class Car
    {
        private String color;
        private int meter;    public Car()
        {
            color = "黄色";
            meter = 12345;
        }    public void setColor(String theColor)
        {
            color = theColor;
        }    public void setMeter(int theMeter)
        {
            meter = theMeter;
        }    public string Show()
        {
            return "color=" + color + "meter=" + meter;
        }    public static void Main()//String[] args 
        {
            NewMethod();
        }    //这里没用到static!!! 
        private void NewMethod()
        {
            Car car1 = new Car();
            Console.WriteLine(car1.Show());
            // 
            Car car2 = new Car();
            car2.setColor("黄色");
            car2.setMeter(98765);
            Console.WriteLine(car2.Show());
        }
    }
      

  4.   

    我问的问题的关键是 在Main 方法里为什么能直接能用我没定义好的类创建对象 car1,car2 呢????
      

  5.   

    到Mian方法结束为止我的类才定义完成呢!, 我理解的概念是一个类创建好了,再在其它类里应用先前定义好的类创建对象。
    上面的情况好像跟我理解的不一样啊。?/ 所以纳闷呢 ? 等待高手解释!!!
      

  6.   

    一个简单的求阶乘的递归函数
    public int mm(int a)
    {
        if (a == 0) return 1;
        else return a * mm(a - 1);
    }
    难道根据楼主的认为这个函数不能使用了么?感觉应该套用C++ "先声明后使用”的概念来解释,只要一个变量或函数声明过了,编译器就能根据声明的类型来分配内存,在编译的时候就不会出现问题了。Car car1 = new Car();这句语句的意思就是在堆中申请一段足够的空间,用来存放一个Car类型的数据。而且是在堆中申请的空间,和栈不一样,不需要特别指明分配连续空间的大小。因此这句语句和你类的定义有没有结束没什么关系。