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报告了一些错误。但我不知道它有什么问题? 有人可以帮忙指出来吗?
根据您的建议更改了代码。
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();
}
}
此外: 谢谢你们! 我修改了上面的代码,它变得更好但仍然无法正常运行。 新的错误消息如下:
有任何新建议吗?
答案 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)
以下是解决错误的步骤:
MyTest
。如果您的方法不是静态的,请创建类的对象并调用 这个对象。
它将解决您的错误&也运行你的程序......
注意:尝试放置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
}
}
}
作为旁注,您应该将类名(和文件名)重命名为MyTest
和MyTest.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(){
}
}