gpt4 book ai didi

java - 将方法 makeEvent() 设为静态有什么优点吗?

转载 作者:行者123 更新时间:2023-11-30 03:38:16 25 4
gpt4 key购买 nike

package hf;

import javax.sound.midi.*;

public class BeatBox1
{
public static void main(String[] args)
{
BeatBox1 boom = new BeatBox1();
boom.go();
}

public void go()
{
try
{
Sequencer player = MidiSystem.getSequencer();
player.open();

Sequence seq = new Sequence(Sequence.PPQ,4);

Track track = seq.createTrack();

for(int i = 5;i<125;i+=5)
{
track.add(makeEvent(144,i,i));
track.add(makeEvent(128,i,i+2));
}

player.setSequence(seq);
player.start();

}
catch(Exception e)
{
System.out.println("Problem starting the BeatBox");
}
}

public static MidiEvent makeEvent(int onOff,int note,int time)
{
MidiEvent event = null;
try
{
ShortMessage a = new ShortMessage();
a.setMessage(onOff,1,note,100);
event = new MidiEvent(a,time);
return event;
}
catch(Exception e)
{
System.out.println("Error in creating Event.");
}
return event;
}
}

上面的示例代码是我在一本书上找到的。他们建议将 makeEvent 方法设为静态。原因是什么?

当 makeEvent() 也设为非静态时,程序可以正确运行。通过使方法静态化是否可以获得任何性能增益或任何优势?

最佳答案

基于一般的 OOP 原则,方法实际上是类向其实例的公共(public) View 提供的一种“行为”。实例是类“抽象存在”的现实版本。现在要理解的重要一点是实例方法是类演示的行为。类的行为与其“状态”相关,即。变量或属性。对于不同的状态值,类的相同方法可以显示不同的行为,即:执行的操作。

因此,作为一般规则:当方法提供依赖于实例状态的行为并且该行为对于类是唯一的时,它应该是非静态的并封装在类中。这种行为只能通过明确定义的契约(通常是公共(public)方法或类的接口(interface))向世界公开。

然而,当一个方法提供不依赖于任何类或实例状态,也不受状态变化影响的通用行为时,它应该是静态的,即:独立于任何类。一些示例是将给定日期转换为字符串,或登录消息,或转换异常等。

看看什么适合您的情况。

关于java - 将方法 makeEvent() 设为静态有什么优点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com