package day14;
import java.io.*;
class Apple implements Serializable{
private String name;
private String color;
private double weight;
public Apple() {
super();
}
public Apple(String name, String color, double weight) {
super();
this.name = name;
this.color = color;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String toString() {
return "Apple[name="
+ name +",color=" + color
+ ",weight=" + weight + "]";
}
}
public class WriteObject {
public static void main(String[] args) {
Apple ap = new Apple("红富士", "红色", 3.4);
System.out.println(ap);
// 当程序结束时,虚拟机退出,内存中的Apple对象就被销毁了
try (
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("app.bin"));
)
{
oos.writeObject(ap); //把ap对象写入app.bin文件中
}
catch (Exception ex) {
// TODO: handle exception
}
}
}
问题1:为什么直接在eclipse上运行无法在当前文件夹下生成app.bin?
使用javac编译运行会找不到主类
问题2:在同一个包中新建一个类ReadObject,使用WriteObject定义的类Apple,同样使用javac编译,结果怎么样都是找不到符号Apple(除非把两个类中的package day14都去掉)。
package day14;
import java.io.*;
public class ReadObject {
public static void main(String[] args) {
try (
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("app.bin"));
)
{
Apple ap = (Apple)ois.readObject();
System.out.println(ap);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
两个类都不去掉package day14,在eclipse上又可以正常运行了。这是怎么回事?
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
问题1:为什么直接在Eclipse上运行无法在当前文件夹下生成app.bin?
在Eclipse中直接运行程序时,默认的当前工作目录可能与你所期望的不同。通常情况下,Eclipse运行程序时会使用项目的根目录作为当前工作目录,而不是源代码文件所在的目录。因此,当你使用相对路径来指定文件路径时,可能无法在当前文件夹下生成app.bin。
解决这个问题的一种方法是在Eclipse中设置当前工作目录。你可以按照以下步骤进行操作:
通过设置当前工作目录,你应该能够在Eclipse中直接运行程序时,在当前文件夹下生成app.bin。
问题2:在同一个包中新建一个类ReadObject,使用WriteObject定义的类Apple,同样使用javac编译,结果怎么样都是找不到符号Apple(除非把两个类中的package day14都去掉)。
在Java中,如果你定义了一个类在某个包中,其他类要使用该类时,需要使用完整的包名加上类名来引用。在你的情况下,WriteObject类和ReadObject类都在day14包中,因此在ReadObject类中使用Apple类时,应该使用完整的包名day14.Apple。
以下是修改后的ReadObject类的代码示例:
package day14;
import java.io.*;
public class ReadObject {
public static void main(String[] args) {
try (
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("app.bin"));
)
{
day14.Apple ap = (day14.Apple) ois.readObject();
System.out.println(ap);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
通过使用完整的包名day14.Apple
,你应该能够在同一个包中正常引用WriteObject中定义的Apple类。
希望这些解释能帮助你理解并解决问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
【以下回答由 GPT 生成】
这段代码的作用是将Apple
对象序列化并保存到文件中。
Apple
类有以下成员变量: - name
:苹果的名称,类型为字符串 - color
:苹果的颜色,类型为字符串 - weight
:苹果的重量,类型为双精度浮点数
Apple
类有以下方法: - 构造方法Apple()
:构造一个空的Apple
对象 - 构造方法Apple(String name, String color, double weight)
:构造一个具有指定名称、颜色和重量的Apple
对象 - getName()
:返回苹果的名称 - setName(String name)
:设置苹果的名称 - getColor()
:返回苹果的颜色 - setColor(String color)
:设置苹果的颜色 - getWeight()
:返回苹果的重量 - setWeight(double weight)
:设置苹果的重量 - toString()
:返回一个包含苹果名称、颜色和重量的字符串表示形式
WriteObject
类有以下方法: - serializeObject(Apple apple)
:将指定的Apple
对象序列化并保存到文件中 - main(String[] args)
:一个包含序列化示例的main
方法。在这个示例中,创建了一个Apple
对象,然后调用serializeObject
方法将其序列化并保存到文件中。