首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaSound应用编程接口序列器接口

JavaSound应用编程接口序列器接口
EN

Stack Overflow用户
提问于 2018-04-08 12:36:35
回答 1查看 54关注 0票数 0

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

代码语言:javascript
运行
复制
Sequencer sequencer=MidiSystem.getSequencer();

我读到我们不能创建一个接口的实例。

EN

回答 1

Stack Overflow用户

发布于 2018-04-08 13:52:43

静态充其量是一个非常麻烦的概念,它解释起来最麻烦的是"volatile“关键字声明。

与前两个关键字相比,在代码块上使用"synchronized“关键字来解释它们的用法参数和概念的问题会更少!

静态“”没有被构造为“新的”,因为它不是一个“单独的实例”,它在编译为静态对象时已经可用。 Java中的所有接口都是抽象的,但只有“静态”字段(变量),只有只有一个被加载的静态类指令版本(一种别名)的“实例”将出现在JVM运行时中进程的类层次结构上的那个特定的“用户类”层次结构中,调用的特定“用户类”层次结构用于创建任何数量的类,提交对静态对象或静态方法的调用(如果从各种类副本中同时调用,静态代码不会生成新的单独的指令集)。

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

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

但是如果你需要你的变量non static来删除静态的,如果你要转换的类类型是非静态的,只有当你转换的类本身不是一个实际的“静态”编译类时,你才需要强制转换它!

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

代码语言:javascript
运行
复制
// 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 !

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

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

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

代码语言:javascript
运行
复制
    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();

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

抽象类没有全局变量。

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

与接口相比,抽象类对方法声明的规则不那么严格。

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

对于包含实现代码体或必须是静态方法的方法,接口有"default“修饰符。

简而言之,Sequencer接口的变量不是实例变量,它是一个引用和(静态子句)你引用的是定义为“静态”的东西,所以当调用它的类启动时,它必须在那里!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49714464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档