我在一段代码中看到的.我把它的意思重新写了一下
看下面的三个文件源代码:CObj.java ====================================================
public class CObj {
    public int iObj = 0;
    public CObj() {
this(1);
    }
    public CObj(int a) {
iObj = a;
System.out.println("Create CObj:(" + a + ")");
    }
    public void print() {
System.out.println("This.Value:=" + iObj + ";");
    }
    public static void main(String[] args) {
//
    }
}
StaticMethod.java ============================================
public class StaticMethod {
    public CObj myObj = null;
    public static CObj myMethod() {
return new CObj(9);
    }
    public static void main(String[] args) {
//
    }
}
TestObj.java =================================================
public class TestObj {
    public static void main(String[] args) {
StaticMethod staticMethod = new StaticMethod(); //下面这句话是什么意思;
//CObj 和 StaticMethod 是两个类名;能这样赋值么?
//具体有什么好处;
//TIJ2中我没有看到过.
CObj StaticMethod = staticMethod.myMethod();
    }
}

解决方案 »

  1.   

    类的静态方法,是调用他的构造器,生成一个Cobj的类象,
    我是小虾,一点意见,不知道对不对
      

  2.   

    你们可以拿来执行一下试试就知道了呀我有没有写错.?
    我用的是 JDK1.5 + Notepad.exe 的.通过了。一起来学学吧.~~ 先别这么肯定!
      

  3.   

    你们可以拿来执行一下试试就知道了呀我有没有写错.?
    我用的是 JDK1.5 + Notepad.exe 的.通过了。一起来学学吧.~~ 先别这么肯定!
      

  4.   

    呵呵。小虾 小米,我也差不多, 彼此彼此了.类的静态方法 是这样调用的吧 :   StaticMethod.myMethod();//注意字符首的大小写;
    赋值:  CObj myCObj = StaticMethod.myMethod();
      

  5.   

    CObj StaticMethod = staticMethod.myMethod();
    这句大小写没写错?
      

  6.   

    CObj StaticMethod = staticMethod.myMethod();
    调用StaticMethod的静态方法生成一个CObj对象,这个对象的名称为StaticMethod
    没错呀
      

  7.   

    to: bluelily22(丁丁)哈哈,反啦~CObj StaticMethod = staticMethod.myMethod();
    CObj staticMethod = StaticMethod.myMethod(); //注意大小写;
    并且:没看到上面的定义吗.staticMethod 不是CObj对象;
    StaticMethod staticMethod = new StaticMethod();
      

  8.   

    to : TraBant(顶风) 你能说的详细些么 ?   我不理解你说的意思.
    我很忙.今天还要交差. 没时间来玩文字游戏.还是你看错了. 我写的变量名的字首都是小写的.类名是大写的.
    我又仔细检查了一边.并没有发现你所谓的文字游戏.
      

  9.   

    To:  weiyi220(唯一) 这代码是我看了人家写的代码后写的测试代码.
    我看的很清楚..
    也写的很清楚.你明白我问的问题 和 我写的代码吗 ?
      

  10.   

    CObj StaticMethod = staticMethod.myMethod();
    还是你看错了. 我写的变量名的字首都是小写的.类名是大写的.
    ----------------------------------------------
    没看懂,楼主你说的是真的吗?
    那StaticMethod不是变量名吗?
    小人愚笨,恕罪
      

  11.   

    你看看我写的.(看下面也行,我复制过来了。) 你认为 StaticMethod 是变量名 还是 类名StaticMethod.java ============================================
    public class StaticMethod {
        public CObj myObj = null;
        public static CObj myMethod() {
    return new CObj(9);
        }
        public static void main(String[] args) {
    //
        }
    }
      

  12.   

    改写 下面的代码:TestObj.java =================================================
    public class TestObj {
        public static void main(String[] args) { //各位能再看仔细写吗?为了不造成视觉效应我改一下.(只改变量名)
    StaticMethod mySMethod = new StaticMethod();
    CObj StaticMethod = mySMethod.myMethod();//1,比较2的staticMethod的大小写
    //下面这样是谁都能理解的.楼上的很多兄弟都在说下面这种情况.
    CObj myCObj = null;
    myCObj = StaticMethod.myMethod();//2,比较1的StaticMethod的大小写
        }
    }
      

  13.   

    to:  foolfish(呆鱼) 
    你可真 TMD 三八.
      

  14.   

    这是设计模式中的简单工厂模式,把类CObj的实例化委托给了类StaticMethod的静态工厂方法myMethod();工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。我们以类Sample为例, 如果我们要创建Sample的实例对象:Sample sample=new Sample();可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:Sample sample=new Sample(参数);但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。为什么说代码很难看,初学者可能没有这种感觉,我们分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample .我们要实例化他们时,如下:Sample mysample=new MySample();
    Sample hissample=new HisSample();随着项目的深入,Sample可能还会"生出很多儿子出来", 那么我们要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的.但如果你一开始就有意识使用了工厂模式,这些麻烦就没有了.工厂方法
    你会建立一个专门生产Sample实例的工厂:public class Factory{  public static Sample creator(int which){  //getClass 产生Sample 一般可使用动态类装载装入类。
      if (which==1)
        return new SampleA();
      else if (which==2)
        return new SampleB();  }}
     那么在你的程序中,如果要实例化Sample时.就使用Sample sampleA=Factory.creator(1);这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,范错误可能性就越少.好象我们从编程序中也能悟出人生道理?呵呵.
      

  15.   

    to: zhy_ufida(BWM7)呵呵。说的很详细.让我理解了很多很多.不过我还有一个疑问.Sample sampleA=Factory.creator(1); 
    这句话创建了一个没有任何引用的实例. 那他不会被 gc 回收吗 ?
    我要引用变量 mySimple 引用它呢 ? 我该怎么做呢?
      

  16.   

    就是一个简单的静态工厂模式,
    这个模式产生的对象是CObj 初始值的 9.这种东西当学习用都不好.没有任何引用的实例会被gc 回收Sample mySimple =Factory.creator(1);   mySimple 就是你已经引用了.你的慨念太不清楚了,建议先写简单的程序,在学模式
      

  17.   

    好像走题了,的确是有工厂模式的影子,但似乎并不能解释楼主的疑问 //下面这句话是什么意思;
    //CObj 和 StaticMethod 是两个类名;能这样赋值么?
    //具体有什么好处;
    //TIJ2中我没有看到过.
    CObj StaticMethod = staticMethod.myMethod();我觉得最后的StaticMethod  仅仅被当作一个普通的变量来用了,随便你改成什么,甚至是Object 结果都一样。
      

  18.   

    CObj StaticMethod = staticMethod.myMethod();
    不啊.  StaticMethod 不是一个变量. 它是一个类名.可一定要看清楚
      

  19.   

    人家的代码没有错呀,
    一个方法的返回值是一个COBJ类呀
    然后将他赋给一个相同的类,有什么不行.
    这个不就是类挎贝吗??
      

  20.   

    类、
    变量、
    方法、
    对象、学习ing
      

  21.   

    to: FBug(花知)
    CObj StaticMethod = staticMethod.myMethod();
    不啊.  StaticMethod 不是一个变量. 它是一个类名.可一定要看清楚
    ---------------------------------------------------------------------------------------
    如果你认为StaticMethod是一个类名,那是你概念错误(Java中没用这种语法),StaticMethod虽然和你的类名相同,但是它只是被用来做为普通变量来使用,不信你换一个其他的变量试试。
    如果你认为StaticMethod是变量名,那是你变量名命名不规范。
      

  22.   

    to: CAYU(中原)
    sorry.   是我看错了。to :ioby(iii)
    你说的对的,我做了测试。起先还不相信.呵呵。to : 27257674(烈火£焰冰)
    我还没有清楚你说的是什么.不过.我在我以前写代码里面.有一点是错的.正如ioby所说的。
    CObj StaticMethod = staticMethod.myMethod();//这里的StaticMethod已经被JVM认为是一个变量名。但如果你在下面使用 StaticMethod sm = new StaticMethod();也是行的.希望你也能清楚.
      

  23.   

    re TraBant(顶风);不是的。以前没有认为 CObj StaticMethod = staticMethod.myMethod();中的 StaticMethod 是变量名,也正是这样.我误解了(我是在看别人写的代码,看到这里有疑问,因为没有碰到过)。所以我写了上面的测试代码.结果能执行。我更加的模糊. 不过经过上面的几个朋友的知道,现在我清楚了.谢谢你!
      

  24.   

    没有什么问题吧,但是变量名一般不要与类名相同的,如果 你相同了也可以啊
    Hashtable Hashtable = new Hashtable();