草庐IT

java - 在构造函数中泄漏这个 - 在哪里正确添加需要 "this"的监听器和其他方法

我有一个扩展JPanel的类。在其构造函数中,我将this传递给其他方法,主要是将jpanel对象作为监听器添加到jpanel中的容器/控件(以及其他对象)。由于Netbeans对这些调用显示了leakingthisinconstructor警告,因此我将它们放在从构造函数调用的另一个方法中。之前:classFoo...{publicFoo(){initComponents();tabX.addChangeListener(this);//之后:classFoo...{publicFoo(){initComponents();initListeners();}protectedvoid

java - 使用 Powermock 模拟类的构造函数时出现 ExceptionInInitializerError。如何解决?

这是我的案例。我有一个AbstractController类。它有一个子类Controller。在AbstractController的方法之一中,实例化了一个新的ApplicationLock。我想在为Controller编写ut时模拟ApplicationLock。我写了一个如下的测试用例。@testpublicvoidtestMethod(){ApplicationLockmockLock=PowerMockito.mock(ApplicationLock.class);PowerMockito.when(mockLock.tryObtain()).thenReturn(true

java - 如何横切带注释的方法和构造函数?

这就是我正在做的:@AspectpublicclassMethodLogger{@Around("(execution(**(..))||initialization(*.new(..)))&&@annotation(Foo)")publicObjectwrap(ProceedingJoinPointpoint)throwsThrowable{//worksfine,butonlyformethods}}该代码段工作正常,但仅适用于方法调用。这就是AspectJmavenplugin在应用方面之后说(不是在编译期间,它工作得很好):aroundoninitializationnotsu

java - 静态导入和构造函数

在Java中,如果我想在不创建特定类的实例对象的情况下使用方法,我会使用静态导入。类似于:importstaticcom.company.SomeClass.*;然后我可以在另一个类中调用该类的方法,而无需创建SomeClass的实例。一旦我使用了该类的方法,是否也调用了该类的构造函数?例如,如果我调用SomeClass.doStuff();是否在幕后为SomeClass调用了构造函数? 最佳答案 DoestheconstructorgetcalledforSomeClassbehindthescenes?调用方法不会调用构造函数。

java - 程序顺序规则在构造函数中起作用之前是否发生?

是否真的可以在构造函数中创建的线程中查看部分构造的对象,因为缺少同步和泄漏this实例?当然,有子类的情况除外,或者我们正在使用克隆或类似的东西进行隐式构造-所以我们假设该类是final并且它是否已完全初始化在调用其他线程之前调用构造函数的线程中。据我所知,以下hb()规则适用,线程中的每个Action先于该线程中的每个Action在程序顺序(ProgramOrderRule)中靠后的顺序线程上对start()的调用发生在已启动线程中的任何操作之前。如果hb(x,y)和hb(y,z),则hb(x,z)那么这是否意味着以下代码在技术上是线程安全的(我从类似的问题Whyshouldn'tI

java - 用 javap 反汇编的枚举不显示构造函数参数

当我用javap反汇编枚举时,枚举的隐式构造函数参数似乎丢失了,我不明白为什么。这是一个枚举:enumFoo{X}我用这个命令编译和反汇编这个(在Java8u60上):javacFoo.java&&javap-c-pFoo这是我得到的输出:finalclassFooextendsjava.lang.Enum{publicstaticfinalFooX;privatestaticfinalFoo[]$VALUES;publicstaticFoo[]values();Code:0:getstatic#1//Field$VALUES:[LFoo;3:invokevirtual#2//Meth

java - Java 中的同步构造是否在内部(以某种方式)使用硬件原语 CAS 操作?

我很难理解synchronized语句和关联的notify()、notifyAll的硬件支持是什么()和wait()方法,出现在每个java对象上。我已阅读并知道如何使用此构造,但我一直假设它们直接映射到硬件原语。当我深入研究有关并发的书籍时,我只读到了硬件直接提供的比较和交换(CAS)操作。似乎这个构造是由JVM本身创建/维护的。如果我的理解是正确的,每个对象都包含一些状态,其中包含有关访问它的线程的信息。这用于定义该对象的监视器并协调多个线程对该对象的访问。但如果是这样的话,如何通过并发访问管理这个状态本身?它肯定必须得到管理,对吗?是CAS吗?如果是CAS,那就意味着只有一种真正

java - 通用构造函数 (Class<T> clazz) 不支持 T,其中 T 是另一个泛型

想象一下这个类:publicclassObjectCreator{privateClasspersistentClass;publicObjectCreator(ClasspersistentClass){this.persistentClass=persistentClass;}publicTcreate(){Tinstance=null;try{instance=persistentClass.newInstance();}catch(Exceptione){e.printStackTrace();}returninstance;}}现在我用领域对象对它进行子类化:publiccl

java - JFrame 构造函数的最佳实践?

在我的Java类和我们在其中使用的书籍中,使用代码布置GUI时,大量涉及JFrame的构造函数。书上的标准技术似乎是初始化所有组件并在构造函数中将它们添加到JFrame中,并在需要的地方添加匿名事件处理程序来处理事件,这也是我类提倡的。这似乎很容易理解,并且在创建一个非常简单的GUI时也很容易使用,但在制作除非常简单的GUI之外的任何东西时似乎很快就会变得丑陋和麻烦。这是我所描述内容的一个小代码示例:publicclassFooFrameextendsJFrame{JLabelinputLabel;JTextFieldinputField;JButtonfooBtn;JPanelfoo

java - 使用复制构造函数而不是 Object.clone 进行深度复制的正确方法

我有一些代码使用Object.clone执行深层复制,但我正在尝试使用更“可接受”的复制构造函数技术重写它。下面是我正在尝试做的两个简单示例,第一个使用克隆,第二个使用复制构造函数。使用克隆的深拷贝importjava.util.*;abstractclassPersonimplementsCloneable{Stringname;publicObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}}classTeacherextendsPersonimplementsCloneable{intcourses