JavaSound接口中的方法getSequencer如何返回接口Sequencer的实例?
Sequencer sequencer=MidiSystem.getSequencer();我读到我们不能创建一个接口的实例。
发布于 2018-04-08 13:52:43
静态充其量是一个非常麻烦的概念,它解释起来最麻烦的是"volatile“关键字声明。
与前两个关键字相比,在代码块上使用"synchronized“关键字来解释它们的用法参数和概念的问题会更少!
静态“”没有被构造为“新的”,因为它不是一个“单独的实例”,它在编译为静态对象时已经可用。 Java中的所有接口都是抽象的,但只有“静态”字段(变量),只有,只有一个被加载的静态类指令版本(一种别名)的“实例”将出现在JVM运行时中进程的类层次结构上的那个特定的“用户类”层次结构中,调用的特定“用户类”层次结构用于创建任何数量的类,提交对静态对象或静态方法的调用(如果从各种类副本中同时调用,静态代码不会生成新的单独的指令集)。
对于任何“静态”,在运行时,JVM中PID进程级别的调用类上的所有程序只有一个副本在使用。
您不能实例化MidiSystem,因为它的所有方法都是“静态”,因此要使用任何静态类从它调用它的静态方法之一(或在接口上相同),您只需在要调用的方法上使用其类名后跟点运算符。与您发布的代码和语法完全相同。(注意"Sequencer“实际上是静态的)
但是如果你需要你的变量non static来删除静态的,如果你要转换的类类型是非静态的,只有当你转换的类本身不是一个实际的“静态”编译类时,你才需要强制转换它!
例如,同时运行多个连接的JDBC数据库的DriverManager.getDriver()不能使用静态驱动程序副本,或者在运行时只有一个副本可用于指令模板(静态类的类字节码)!要从对象中删除" static“,必须将对象转换为非静态对象类型的变量,该变量不是静态表示法(声明的)。
// 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“接口作为数据类型。当类“实现”接口时,类本身可以转换为该接口,因为它也是该对象类型。例如:
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接口的变量不是实例变量,它是一个引用和(静态子句)你引用的是定义为“静态”的东西,所以当调用它的类启动时,它必须在那里!
https://stackoverflow.com/questions/49714464
复制相似问题