1、在java里,到处都是class,你的x和y是哪里的呢?或许在c里,它们是全局变量什么的,但是在java里,它们一定要属于哪个class才行的。如果是类自己的变量的话,可以直接在方法里修改,如果是其他的类的变量的话,像你自己说的那样,可以把对象的引用传进去。
2、不怎么清楚,但是Oobject的的clone确实是要throws 那个exception的,你加上try和catch再try一try吧。
3、jcreator没有用过,用ide的话,在指定路径的时候可以用-cp 参数,不用设置环境变量。
在dos下当然用set命令
               set classpath=....
只是在dos下设置的环境变量只能在set这个命令的dos环境下用,不影响其他地方,
在win2k下好象在我的电脑-》属性的某个地方可以设置env变量,这样的环境变量才可以。package其实就是别人的class,可以理解成lib吧,也许。

解决方案 »

  1.   

    1.你可以写两个方法:
    int getX() {
      return this.x;
    }
    int getY() {
      return this.y;
    }
    2.因为super.clone()会抛出java.lang.CloneNotSupportedException这个异常,所以你必须在外面catch。你在c里面抛出异常外面能不catch就这样让它跑掉吗?3。你可以把package看成一种路径标识。好的package命名,可以让人知道这个包下面是做什么的。比如:
    com.mypackage.util.StringUtil
    com.mypackage.util.TimeUtil
    com.mypackage.db.DBConn
    com.mypackage.dao.tbDao
    com.teacher.util.StringUtil
    因为OOP的重用思想,别人的东西都可以拿过来引用,所以出现同样的类名可以在不同package下共存。
    至于怎么设置,你在csdn可以找到很多文章
      

  2.   

    1.
    To: jan4984(Janny) 
    我的意思是:如果我要在外面使用Point类怎么办?
    比如:Point pt = new Point();
          ...
          do something
          ...
          如果这个时候我要使用x,y怎么办?
          在C++下,我直接传递地址或者引用就行了,
          比如:int x,y;
          getXY(&x,&y)就行了(如果是引用直接getXY(x,y)就行了)
          可是在Java里怎么办呢?传对象的引用?传哪个对象?      如果说简单点通用点,我的意思是:
         在Java里,如果我要得到一个对象的“几个相关”(比如上面的座标)变量成员,
    不是很方便吧?      所以我觉得Java在这方面的设定是不是有些
    ////////////////////////////////////////////////////////////////////////////
    To: happyegg(快乐蛋) int getX() {
    return this.x;
    }
    int getY() {
    return this.y;
    }
    ?
    这样用我还不如直接用Point.x,Point.y,唉,Java为什么不能对普通变量引用呢?
    -----------------------------------------------------------2.可是我怎么看到以前的帖子里的答案有的在重写clone的时候没有用到catch和throw
    的呢?-----------------------------------------------------------3.
    To jan4984(Janny):
    请问,怎么“在指定路径的时候可以用-cp 参数”?
    能不能给一个例子?
    多谢了!
      

  3.   

    2.class A implements Cloneable
    {
      public Object clone()
      {
       return super.clone();//不要(A),因为CLONE返回的是Object类型
      }
      
    }
    这样可以实现浅层次的COLNE(即对类中的基本类型的复制)
    如果类中有对象,则要求每个对象是Cloneabble的,然后对要对clone()方法中对每个对象
    再CLONE,这叫深层次的CLONE,有点像递归。
      

  4.   

    环境变量设置:右击“我的电脑”选择“属性”->“高级”->“环境变量”;
    选择系统变量中的“path”在点击“编辑”,然后在最前面加上“C:\j2sdk1.4.1\bin;”。
      

  5.   

    classpath的主要用途是告诉编译器去哪里执行所需要的类;如果你的a.java文件所在的目录是“d:\java”,则你应该在命令行输入:“javac -classpath d:\java d:\java\a.java”
    要运行是输入:“java -classpath d:\java a”
      

  6.   

    看得出来,楼主确实是初学者,我并不想解答问题,我只是随便说一下,希望对你有帮助。学习java首先要学习面向对象程序设计,当然啦,并不是说一定要找一本这样的书去啃,我的意思是说要了解面向对象和面向过程的异同点,以及为什么说面向对象的这些特性好。面向对象其中有个特性就是封装性,也就是说你不能(最好不要)在类的外部直接改变类的数据。以你的Point为例,如果只接访问它的x和y,比如Point p;... p.x = 1;p.y = 2;这样就在Point类的外部直接改变了Point的数据,对于面向对象程序设计来说应该尽量避免这样做,所以将x和y设置为private,如果类的外部需要访问x和y则由Point类来提供访问方法,比如getX() setX() getY() setY();这样做是有好处的,比如在某个系统里,Point的x和y不能是负数,如果直接访问x和y的话,p.x = -1就会使整个系统出现不可预料的错误。而使用setX方法,则可以先检查一下参数是否合法。
    public void setX(int x) {
        this.x = (x < 0) ? 0 : x;
    }
    这样就不会出现x是负数而导致系统出现不可预料的错误了。java抛弃指针就是为了防止在类的外部直接改变类的数据,这就是你的第一个问题的答案。至于将x,y声明成public而直接p.x这样访问是应该尽量避免(在某些特殊场合需要这样做)。当然了,这只是个简单的例子,面向对象还有很多好的特性,需要自己慢慢体会。
      

  7.   

    一般情况下,我们是不希望别人直接访问自己类的数据的,当然我们可以给他提供方法,让它通过我们的方法来做某件事情。这样就保证了,不会因为我们的类,给整个系统带来潜在的危险!如同,微软给大家提供的很多api一样,它是不会允许你直接对底层的数据进行操作,但是它可以给你提供接口,让大家通过它的接口进行动作!
      

  8.   

    1。第一个问题就算了吧2。去掉(A)也不行啊!难道真的要catch和throw?
    哪位高人能给我详细讲讲clone的具体定义和使用方法(主要是格式和注意事项)
    在下实在是感激不尽(至于浅copy和深copy的理论知识我已经知道了,就不用了)3.我想问的问题是:
       我在打包的时候,怎么指定“打”到哪里?而不是我要用某个类而想上哪里去找。
       也就是说,如果我已经实现好一个类了,我怎么让系统把它们打到我想放的地方
       我用JCreator的时候,它放的根目录是程序运行的地方
    多谢了!
      

  9.   

    多谢 llcc2003(理论) 设环境变量的方法可是在IDE下怎么指定classpath呢或者说,怎么指定打包到哪里呢?
      

  10.   

    另外就是,为什么我的类不能在包外访问啊?
    我设的是方法是public如下:在try.java下:
    //try package and import
    //
    package myClasses;
    //------------------------------------------------------------------------------
    //////////////////////////////////////////////
    class Trys
    {
    public static void Print()
    {
      System.out.print("You can call me by importing");
      }
    }
    在HelloWorldApp.java下:
    //  Sample HelloWorld Application and other tries.
    import myClasses.*;
    //------------------------------------------------------------------------------
    //////////////////////////////////////////////
    public  class  HelloWorldApp
    {
      public  static  void  main(String  args[])
      {
    System.out.println("Hello World!");

    Trys ft1 = new Trys();

    ft1.Print();
       }
    }
    结果出错了:
    HelloWorldApp.java:13: myClasses.Trys is not public in myClasses; cannot be acce
    ssed from outside package
                    Trys ft1 = new Trys();
                    ^
    HelloWorldApp.java:13: myClasses.Trys is not public in myClasses; cannot be acce
    ssed from outside package
                    Trys ft1 = new Trys();
                                   ^
    HelloWorldApp.java:13: Trys() is not public in myClasses.Trys; cannot be accesse
    d from outside package
                    Trys ft1 = new Trys();
                               ^
    HelloWorldApp.java:15: Print() in myClasses.Trys is not defined in a public clas
    s or interface; cannot be accessed from outside package
                    ft1.Print();
                       ^
    4 errors
    难道类还要定义为public?
      

  11.   

    clone方法跟扑通方法并没有什么两样,你要调用super.clone()就必须try...catch或者声明throws出去。如果想在package外面访问,类也要定义为publicjavac -d <directory> <source files>
    java -cp <classpath> class [args...]
          classpath: <directories and zip/jar files separated by ;>
      

  12.   

    但是一个文件只能有一个public类啊?
    也就是说我只能调用public的类?那其他的怎么办?
    难道分别建一个文件?
      

  13.   

    好了,第一个和第三个问题我已经解决了。现在只有clone了,为什么clone后不相等呢?public  class  HelloWorldApp
    {
      public  static  void  main(String  args[])
      {
    System.out.println("Hello World!");

    A a = new A(); if(a.equals((A)a.clone()))
        System.out.println("yes!");   
       }
    }
    class A implements Cloneable
    {
      public Object clone()
      {
       A temp;
        try
        {
         temp  = (A)super.clone();  
       }
       catch(CloneNotSupportedException e)
       {
       System.out.println("clone fails!");
       return null;
       }
       System.out.println("clone successes!");
       return temp;
      }
      
    }执行后是:
    Hello World!
    You can call me by importing
    clone successes!也就是clone成功了,可为什么a.equals((A)a.clone())为false呢?
    类A没有什么变量成员,更没有什么类对象,只有一个函数啊!即使是浅clone也应该是相等的啊?请高手指点!
      

  14.   

    需要定义equalsclass A implements Cloneable
    {
      ...  public boolean equals(Object o)
      {
         if (o instanceof A) {
           // 只是一个例子
           return ((A)o).toString().equals(this.toString());
          }      return false;
      }
      
    }
      

  15.   

    还是不行
    Hello World!
    clone successes!
    Press any key to continue...
    它们的toString是不同的,
    A@1a125f0
    A@c1cd1f我现在的想法是:
    是不是每个equals应该根据不同的类来实现不同的重载呢?比如说,这个A类没有变量成员,所以只要判断是不是类A就行了假设类A有一个变量成员int a,
    则应该这样:if (o instanceof A and o.A == this.a) 
    {
       return true;            
    }
    return false.不知道我这样说对不对?
      

  16.   

    你那个toString()也不是自己定义的,Object的toString()只是返回内存哈希码之类的一数据,所以就不同啦
    然后你那个equal()也不是自己定义的,它比较的是内存中地址的引用,当然也不同啦你去看一下API的话会更清楚的第一三个问题也不是一下就知道为什么了的,建议看一下设计模式
      

  17.   

    从你的例子中,看不到内部的数据,那又如何
    比较两个Object是否相同?研究一下以下的代码吧:class A implements Cloneable
    {
      Stirng id = null;  public void setId(String _id) { this.id = _id; }
      public String getId() { return this.id; }  // 浅层Clone
      public Object clone()
      {
        A temp = new A();
        temp.setId(this.id); 
        return temp;
      }  // 通常改动equals,也需要改动hashCode
      public int hashCode() { return this.id.hashCode(); }  public boolean equals(Object o)
      {
         if (o instanceof A) {
           return ((A)o).id.equals(this.id);
          }      return false;
      }
      
    }