Tag:

为什么方法中不允许使用静态本地类?

我一直在刷我的java,我对本地类(我最终从未使用过)有一些误解,我很清楚静态的概念,但不是本地类的情况。 1.为什么本地类不允许使用静态方法? 2.为什么方法中不允许使用静态本地类? 本地类中不允许使用静态方法: 在这里,我不明白。 对我来说,本地类与静态方法main相关联。 我只是不明白为什么不能这样做。 方法main通过Sequence类访问,然后因为sayGoodbye是静态的,所以应该通过它的类访问它。 但不是。 public class Sequence { public static void main(String… args) { class EnglishGoodbye { public static void sayGoodbye() { // this cannot be done System.out.println(“Bye bye”); } } EnglishGoodbye.sayGoodbye(); } } 方法中不允许使用静态本地类: 这是不可能做到的:它有点含糊不清但我认为这里的静态与非静态具有相同的含义,因为静态类与静态方法相关联。 我很困惑。 public class Sequence { public static void main(String… args) { static class EnglishGoodbye […]

私人类声明

可能重复: Java:为什么我们可以将顶级类定义为私有? 为什么我们不能宣布私人外部阶级? 如果我们可以拥有内部私人课程那么为什么我们不能拥有外部私人课程……?

Java类文件上的ACC_SUPER访问标志的目的是什么?

invokespecial JVM指令用于在创建新对象时调用初始化方法( )。 该指令的描述建议(但不澄清)关于是否调用超类的构造函数或当前类的构造函数的决定取决于class文件中设置的ACC_SUPER标志的状态。 来自Sun JVM规范: 接下来,选择已解析的方法进行调用,除非满足以下所有条件: 为当前类设置ACC_SUPER标志(参见表4.1“类访问和属性修饰符”)。 – Source ( invokespecial opcode definition) ACC_SUPER标志的设置指示Java虚拟机要表达的其invokespecial指令的两个备选语义中的哪一个; 存在ACC_SUPER标志,以便向后兼容Sun的旧编译器为Java编程语言编译的代码。 Java虚拟机的所有新实现都应该实现本规范中记录的invokespecial的语义。 Java虚拟机指令集的所有新编译器都应设置ACC_SUPER标志。 Sun的旧编译器生成了Class_Sile标志,并且未设置ACC_SUPER。 Sun的旧Java虚拟机实现会在设置时忽略该标志。 – 来源 ( ClassFile格式) 该定义指出该标志是为了与旧编译器向后兼容。 然而,它继续与Sun’s older Java virtual machine implementations ignore the flag if it is set.相矛盾, Sun’s older Java virtual machine implementations ignore the flag if it is set. 该标志是否仍与invokespecial操作码一起使用? 从我所知,它似乎没有任何目的,我找不到建议它曾经做过的资源。 谢谢。

我可以使用类的方法而不实例化这个类吗?

我有一个有几个方法的类,这些方法中没有构造函数。 所以,我想知道是否可以在没有创建类实例的情况下调用类的方法。 例如,我可以这样做: NameOfClass.doMethod(x1,x2,…,xn) 总的来说,我不明白为什么它应该是不可能的。 我只是调用一个函数来做某事(或返回一些值)。 如果可能,如果方法为类的私有变量设置值,将会发生什么。 我怎样才能达到这个值? 以同样的方式? NameOfClass.nameOfVariable

Java:获取类的属性以构造字符串表示

假设我有一个这样的类(并且还假设所有私有变量: public class Item { private String _id = null; private String _name = null; private String _description = null; … } 现在,如果我想构建这个类的toString()表示,我会在Item类中做这样的事情: @Override public String toString() { return (_id + ” ” + _name + ” ” + _description); } 但是如果我在课堂上说15个私有变量呢? 我是否必须像这样写出每个变量的名称? 理想情况下,我想通过遍历此类的私有变量列表并构造字符串表示来完成任务: @Override public String toString() { ArrayList members = getClass().getMembers(); //Some method […]

如何确保已重写的方法已同步

我有一类线程安全的公共代码。 该类中的一个方法是抽象的,需要为不同的实现重写。 我需要确保或至少向其他开发人员标记此方法的所有实现都需要是线程安全的。 做这个的最好方式是什么? 这个效果有关键字或注释吗? 我已经尝试过abstract synchronized但不允许使用关键字组合。

找不到符号assertEquals

我正在尝试为计算器编写我的第一个unit testing,但NetBeans说它无法找到符号assertEquals和注释@Test 。 我应该包括什么吗? 我正在使用NetBeans 7.3.1和W7。 package calculator; import org.junit.Assert.*; public class UnitTests{ @Test public void checkAdd(){ assertEquals(2, Calculator.rpnCalc(” 2 3 + “)); } } 编辑:谢谢你们,导入它作为静态帮助。 仅需要测试注释包括 import org.junit.Test;

通过JNI将C ++类返回给Java

我目前正在项目中使用C ++和Java,并且我希望能够将包含在C ++中的对象发送到我的Java接口,以便通过GUI修改它,然后用C ++发送修改。 到目前为止,我已经通过JNI接口向Java返回任何内容,int或布尔值。 这次我必须通过界面发送一个对象。 我已经在C ++和Java中提供了类似的类定义。 我想知道如何创建对象,以便我可以在Java中使用它。 在C ++中我有: JNIEXPORT MyObject JNICALL Java_ca_X_Y_Z_C_1getMyObject(JNIEnv* env, jclass, jint number); Java会调用此函数,以便从C ++端获取对象(该对象包含在单例中,可以轻松访问)。 在Java端,我只是简单地调用这个方法, MyObject anObject = C_getMyObject(3); 哪个应该返回我新创建的对象。 当我进行实际调用时,Java当前返回一个UnsatisfiedLinkError。 怎么了?

sun.reflect.CallerSensitive注释是什么意思?

@CallerSensitive注释在上面的方法中隐含了什么? 例如,注释存在于Class的getClassLoader方法中 @CallerSensitive public ClassLoader getClassLoader() { // }

Methods.class中的代码重用与策略模式和dependency injection

Status: Fendy和Glen Best的答案同样被我接受和尊重,但由于我可以接受并给予赏金,我选择了Fendy的答案。 Scenario: 如果我有一些代码 必须在许多类中 重复使用很多次 (很少有明显的次要参数更改)和并发线程,那么采用哪种方法? 必须重用的代码可以是任何理智的东西(适当考虑静态和非静态上下文和方法制作技术)。 它可以是一个算法,一个DB方法做连接,操作,关闭。 任何东西。 创建一些类MyMethods.class 并将所有这些方法放入其中 。 表1.A 使方法 static并直接调用(由所有类和并发线程)作为MyMethods.someMethod(); 1.B. 使方法 non-static并且在调用它们时,通过MyMethods mm = MyMethods(); mm.someMethod(); instantiate整个类 MyMethods mm = MyMethods(); mm.someMethod(); MyMethods mm = MyMethods(); mm.someMethod(); 使用https://en.wikipedia.org/wiki/Strategy_pattern中声明的策略模式 (此处附带的代码)。 使用https://en.wikipedia.org/wiki/Dependency_injection#Java中所述的dependency injection Problems: 有些人会说使用这种方法进行 unit testing http://en.wikipedia.org/wiki/Unit_testing 是不可能的 , 在换出后者时会遇到麻烦 。 如果你想测试你的类并使用依赖的模拟版本 表1.A 并发调用或多个类会有任何问题吗? 特别是在JDBC static methods中只是一个例子? 1.B. […]