CodeGym /课程 /Java 语法 /初始化对象。initialize 方法

初始化对象。initialize 方法

Java 语法
第 5 级 , 课程 6
可用

“我要给你介绍一下对象初始化。创建对象时,你需要为其变量指定初始值,以免出现访问对象不包含正常运行所需信息的情况。”

“我们来考虑 File 对象。文件的最少必要信息是文件名。创建无名文件是很荒谬的。

“假设我们编写一个 MyFile 类来处理文件。每个对象的必要信息是什么?”

“与对象关联的文件的名称?”

“正确。为了执行此操作,我们向类中添加 initialize() 方法。它看起来是这样的。”

示例:
class MyFile
{
    private String filename = null;

    public void initialize(String name)
    {
        this.filename = name;
    }
…
}

“我们添加了 initialize 方法,以便通过调用该方法来处理对象。我们可以在调用 initialize 方法之后立即调用对象的方法。如果无法处理对象,则称该对象无效;否则,则称该对象有效。initialize 方法的主要任务是接收使对象有效所需的所有数据。

“我明白了。”

“现在我们让任务变得更难一些。或者,转念一想,变得更容易一些。具体取决于你是如何看待它的。假设使用我们的类的程序员会发现,仅传递文件的目录和短名称而不是其完整路径会更方便。我们可以通过创建另一个 initialize 方法(Java 允许创建多个具有相同名称的方法)来允许程序员达到此目的。我们的类看起来如下所示:”

包含两个 initialize 方法的示例:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

…
}

“还要指出一点:我们经常需要在当前文件的旁边创建一个临时文件副本。”

“我们可以创建一个方法来完成此操作吗?”

“当然。请看。”

在当前文件旁边创建一个副本:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

   // 文件名将与文件存储在同一目录中。 
    public void initialize(MyFile file, String name) 
    {       
        this.filename = file.getFolder() + name;
    }

…
}

“我可以根据需要创建任意数量的方法吗?”

“嗯,要在合理范围内。但从技术层面讲,是可以根据需要创建任意数量的方法的。”

“我在什么时候必须调用 initialize 方法?”

“创建对象后立即调用,以使对象生效。”

示例:
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize("a.txt");

String text = file2.readText();

“这个 getFolder() 方法是什么?”

“我们实际上并没有在此处显示代码。它表示一个返回字符串的方法,该字符串包含存储文件的文件夹的名称。”

评论 (18)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
ant 级别 7,Xinxiang,中国
9 九月 2024
初始化对象:初始化 Person 对象(对字段赋值) public class Person { String name; int age; int sex; 1直接引用: Person person = new Person(); person.name = "沉默王二"; 2通过 initialize方法: public void initialize(String n, int a, int s) { name = n; age = a; sex = s;//在person类中可直接使用 initialize方法赋值。 3构造方法初始化: Person person = new Person("沉默王二", 18, 1);
Harry Levis 级别 10,Aruba,Aruba
13 九月 2023
这个地方是不是写错了。

MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize("a.txt");

String text = file2.readText();
新建file2的时候,正确的应该是要传入file才能使用新建同一个目录下文件的简便方法

MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize(file, "a.txt");

String text = file2.readText();
元. 级别 26,Taipei,Taiwan, Province of China
24 十二月 2022
這跟建構函數(constructor)差在哪裡?
Ocean 级别 22,China,Hong Kong
21 七月 2022
overloading
诸葛靓 级别 11,China
7 五月 2021
这算是重写构造方法吗?
UMKevinGe 级别 20,Nanjing,China
15 九月 2021
感觉就是方法的重写
hello world 级别 22,shanghai,China
24 九月 2021
重载吧
刘文 级别 9,Пекин
5 四月 2021
😀
1 度的依赖╰つ 级别 9,China
5 四月 2021
就是一种变相构造方法简介
1 度的依赖╰つ 级别 9,China
5 四月 2021
new对象的时候在不同的类当中,这是在同一个类当中使用的
1 度的依赖╰つ 级别 9,China
5 四月 2021
构造方法的定义跟这个一样,说错了
1 度的依赖╰つ 级别 9,China
5 四月 2021
private一般想到的是封装
小K185 级别 7
19 三月 2021
初始化mark
lizhi 级别 20,英国
14 三月 2021
MyFile 为什么不继承File类?
Daniel Tse 级别 10,shanghai,China
26 一月 2021
what is the meaning of "file2.readText()"?