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

标签 java static midi

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/

相关文章:

java - 在 SWT TableViewer 中对齐图像

java - 使一切都非静态

go - 从 GO 读取 MIDI 输入

python - 如何使用python根据音符音高分割midi文件?

java - 无法为 libgdx 加载共享库 box2d

java - 如何确保这是我的类签名中引用的泛型类型?

具有自身静态 const 成员实例的 C++ 模板类

midi - XG MIDI 文件格式

java - 通过java中的socket编程检查远程服务器是否处于监听模式

c# - 锁定静态变量