这个Java代码有什么错误?

时间:2013-08-09 08:08:55

标签: java

package example;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.Object;

public static Object copy(Object oldObj) {
    Object obj = null;
    try {
        // Write the object out to a byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(bos);
        out.writeObject(oldObj);
        out.flush();
        out.close();

        // Retrieve an input stream from the byte array and read
        // a copy of the object back in.
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream in = new ObjectInputStream(bis);
        obj = in.readObject();
    } catch (IOException e) {
        e.printStackTrace();   
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }
    return obj;
}

public class mytest {
    public static void main(String[] args) throws IOException {
        clone

    }
}

对于上面的代码,它想要显示Java的深层副本。但myeclipse报告了一些错误。但我不知道它有什么问题? 有人可以帮忙指出来吗?

enter image description here

根据您的建议更改了代码。

package example;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.Object;

class Utils {
    public static Object copy(Object oldObj) {
        Object obj = null;
        try {
            // Write the object out to a byte array
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(bos);
            out.writeObject(oldObj);
            out.flush();
            out.close();

            // Retrieve an input stream from the byte array and read
            // a copy of the object back in.
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream in = new ObjectInputStream(bis);
            obj = in.readObject();
        } catch (IOException e) {
            e.printStackTrace();   
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        }
        return obj;
    }
}

public class mytest {
    public static void main(String[] args) throws IOException {
        Object clonedObject = Utils.copy(new Object());
        clonedObject.notifyAll();
    }
}

此外: 谢谢你们! 我修改了上面的代码,它变得更好但仍然无法正常运行。 新的错误消息如下: enter image description here

有任何新建议吗?

10 个答案:

答案 0 :(得分:2)

您不能在Java中使用浮动方法。一切都必须是班级的一员。在这种情况下,只有一个名为Utils的静态方法的虚拟类是常见的做法。

e.g。

public class Utils {

    // Static methods go here
    public static Object copy(Object oldObj) {
        // etc
    }

}

然后你可以这样称呼它:

public class mytest {
    public static void main(String[] args) throws IOException {
        Object clonedObject = Utils.copy(new Object());
        // etc
    }
}

答案 1 :(得分:1)

以下是解决错误的步骤:

  1. 在项目(特定名称)中创建一个包
  2. 在创建的包中创建名称MyTest
  3. 将方法写入或复制到已创建的类中 上方。
  4. 运行程序制作一个主要方法,按名称调用它 它是静态的。
  5. 如果您的方法不是静态的,请创建类的对象并调用 这个对象。

  6. 它将解决您的错误&也运行你的程序......

  7. 注意:尝试放置finally块以释放对象ByteArrayOutputStream和&等资源。 ObjectStream等等......它会提高你的节目表现。

答案 2 :(得分:0)

您需要将方法放入类中。

public class SomeClass{
public static Object copy(Object oldObj) {
    Object obj = null;
    try {
        // Write the object out to a byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(bos);
        out.writeObject(oldObj);
        out.flush();
        out.close();

        // Retrieve an input stream from the byte array and read
        // a copy of the object back in.
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream in = new ObjectInputStream(bis);
        obj = in.readObject();
    } catch (IOException e) {
        e.printStackTrace();   
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }
    return obj;



}

您可以将其用作:

public class mytest {
    public static void main(String[] args) throws IOException {

      Object object = Someclass.copy(someObject);

    }
}

答案 3 :(得分:0)

您无法在Java中的类之外声明方法(甚至是静态方法)。你必须将所有东西(除了导入)放在一个类中。

你需要这样的东西:

public class YourClass {
    public static Object copy(Object oldObj) {
    ...
    }
}

答案 4 :(得分:0)

方法public static Object copy(Object oldObj)不在班级中。这就是你得到错误的原因。

答案 5 :(得分:0)

您必须添加一个名为mytest的类作为'顶级范围'在这个文件中,将所有其他方法嵌套在其中。

class mytest { 
   public static Object copy(Object oldObj) {
       Object obj = null;
       try {
           // Write the object out to a byte array
           ByteArrayOutputStream bos = new ByteArrayOutputStream();
           ObjectOutputStream out = new ObjectOutputStream(bos);
           out.writeObject(oldObj);
           out.flush();
           out.close();

           // Retrieve an input stream from the byte array and read
           // a copy of the object back in.
           ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
           ObjectInputStream in = new ObjectInputStream(bis);
           obj = in.readObject();
       } catch (IOException e) {
           e.printStackTrace();   
       } catch (ClassNotFoundException cnfe) {
           cnfe.printStackTrace();
       }
       return obj;
   }

   public class mytest {
       public static void main(String[] args) throws IOException {
           clone

       }
   }
}

作为旁注,您应该将类​​名(和文件名)重命名为MyTestMyTest.java - 以匹配java编码约定。

答案 6 :(得分:0)

您应该将您的方法放在一个类中,最好称为mytest,因为它是文件的名称,声明为

public class mytest {
    //Your method here
}

另请注意,Java中的命名约定是以大写字母开头的类名,因此它应为MyTest,并且应重命名您的文件以反映该值。

答案 7 :(得分:0)

尝试

public class MyTest {

public static Object copy(Object oldObj) {
    Object obj = null;
    try {
        // Write the object out to a byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(bos);
        out.writeObject(oldObj);
        out.flush();
        out.close();

        // Retrieve an input stream from the byte array and read
        // a copy of the object back in.
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream in = new ObjectInputStream(bis);
        obj = in.readObject();
    } catch (IOException e) {
        e.printStackTrace();   
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }
    return obj;
}
    public static void main(String[] args) throws IOException {
        clone

    }
}

没有方法不属于某个类(如JavaScript函数)。 静态意味着该方法确实属于该类而不属于该类的实例,因为非静态方法可以

答案 8 :(得分:0)

你不能在课外写作方法。将您的方法#copy放在课堂中。像这样:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class mytest 
{
    public static void main(String[] args) throws IOException 
    {
        // Now you can use your method here
    }

    public static Object copy(Object oldObj) 
    {
        Object obj = null;
        try {
            // Write the object out to a byte array
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(bos);
            out.writeObject(oldObj);
            out.flush();
            out.close();

            // Retrieve an input stream from the byte array and read
            // a copy of the object back in.
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream in = new ObjectInputStream(bis);
            obj = in.readObject();
        } catch (IOException e) {
            e.printStackTrace();   
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        }
        return obj;
    }
}

答案 9 :(得分:0)

class在哪里?这些method应该包含一个类。

您的java类应该如下所示

 package name;

 imports;

 public class MyClass{

   public void myMethod(){

   }

 }