繁体   English   中英

JavaSound API Sequencer接口

[英]JavaSound API Sequencer Interface

JavaSound API中的getSequencer方法如何返回接口Sequencer的实例?

Sequencer sequencer=MidiSystem.getSequencer();

我读过我们不能创建接口的实例。

static充其量是一个非常麻烦的概念,其最大的麻烦在于解释“ volatile”关键字声明。

与前面的两个代码块解释其用法参数和概念相比,在代码块上使用“ synchronized”关键字的麻烦会更少!

“静态”不是构造为“新”的,因为它不是“单独的实例” ,当作为静态对象编译时已经可用。 Java中的所有接口都是抽象的,但仅具有“静态”字段(变量)届时将仅存在 那些已加载的AKA(一种别名)的静态类指令版本的某个类(或替代接口)的“实例”。 JVM运行时中进程的类层次结构级别,该特定“用户类”调用的层次结构用于创建的任何数量的提交了对静态对象或静态方法的调用的类 (静态代码不进行新的单独指令集设置) (如果从各种类别的副本中同时调用)。

对于任何“静态”,在运行期间,JVM的PID进程级别上的那个调用类的所有程序都只使用一个副本。

您不能实例化MidiSystem,因为其所有方法都是“静态的”,因此要使用ANY静态类从其调用其静态方法之一(或在接口上 使用 相同的静态方法 ,则只能使用其类名,然后在其方法上使用点运算符希望致电。 与发布的代码和语法完全相同。 (注意“ Sequencer”实际上是静态的)

但是,如果您需要使用非静态变量来删除静态变量,则仅当要转换的类类型本身不是实际的“静态”编译类时,才将其强制转换为非静态!

例如,同时运行多个连接的JDBC数据库的DriverManager.getDriver()无法使用静态驱动程序副本,或者在运行时使用带有指令模板的静态副本(静态类的类字节码)! 要从对象中删除“静态”,必须将该对象强制转换为非静态类型的对象,该对象类型不是静态表示法(声明)。

// the getDriver() method is static inside class DriverManager , 
// Driver is an Interface not a class
Driver driver = (Driver) DriverManager.getDriver( configuration.jdbcUrl() );
// After casting, there is now a separate non static reference of Driver 
// interface , so **note that neither MidiSystem or DriverManager class are** 
// actually declared static and both have no constructor and not declared 
// abstract but contain only static methods !

一个“ INSTANCE” 是您构造的东西 ,因此另一个是一个实例! 接口不是构造的,它们的操作更像“抽象”和“静态”声明。 仅使用类名称是调用EITHER抽象或静态类以获取其方法的语法

最后一点,将接口称为“数据类型”是使引用变量表示它,因为接口是与类或抽象类相同的数据类型(称为对象)。

因此,您上面的代码具有“ Sequencer”接口作为数据类型。 当类“实现”接口时,该类本身也可以转换为该接口,因为它也是该对象类型。 例如

    public class Example implements Extra{.....}
    Extra example = (Extra)new Example();
// next below shorthand implicit cast is compiler dependent
    public class Example implements Extra{.....}
    Extra example = new Example();

如果您未在类中实现接口,则可以通过使用具有获取该接口数据类型的方法的类来调用该接口,并分配参考变量。 抽象类和接口之间存在巨大的关系,但它们并不相同。

抽象类没有全局变量。

接口的确具有全局变量,但是它们都必须是静态的和最终的。 抽象类不能具有任何全局变量 ,否则它将是“类的实例 ”, 然后需要构造为“新”。

抽象类在方法声明方面的规则不如接口严格。

抽象类可以具有大多数类修饰符,接口都是公共的

接口具有“默认”修饰符,用于包含代码的实现主体或必须为静态方法的方法。

简而言之,Sequencer接口的变量不是实例变量,它是一个引用,并且(对于静态而言是) 您所引用的是定义为“静态”的内容,因此,在调用它的类开始时,它必须存在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM