Tag: 构造函数

在链接构造函数时,JVM的隐式内存屏障如何表现?

参考我之前关于不完整构造物体的问题 ,我有第二个问题。 正如Jon Skeet指出的那样,在构造函数的末尾有一个隐含的内存障碍,可以确保所有线程都可以看到final字段。 但是如果构造函数调用另一个构造函数呢? 在每个人的最后是否有这样的记忆障碍,或者只是在第一个被召唤的人的最后? 也就是说,当“错误”解决方案是: public class ThisEscape { public ThisEscape(EventSource source) { source.registerListener( new EventListener() { public void onEvent(Event e) { doSomething(e); } }); } } 正确的一个是工厂方法版本: public class SafeListener { private final EventListener listener; private SafeListener() { listener = new EventListener() { public void onEvent(Event e) { doSomething(e); } } } […]

构造函数中的多态方法(Java)

A类在构造函数中调用公共方法f() 。 B类用自己的实现覆盖方法f() 。 假设您实例化对象B ..对象B方法f()将在对象A的构造函数中调用,尽管对象B未完全初始化。 谁能解释这种行为? 编辑:是的,它不推荐练习..但我不明白为什么 Java没有调用基类A的f()实现而不是“伸出”到派生类B的f()实现。 码: class A { A() { System.out.println(“A: constructor”); f(); } public void f() { System.out.println(“A: f()”); } } class B extends A { int x = 10; B() { System.out.println(“B: constructor”); } @Override public void f() { System.out.println(“B: f()”); this.x++; System.out.println(“B: x = ” + x); […]

默认情况下,Java构造函数不公开吗?

我在两个不同的包中有两个类。 对于一个类,我已经定义了一个构造函数而没有为它设置访问修饰符。 我想在另一个包中实例化该类的对象,并获得错误’ the constructor xxx() is not visible ‘。 如果我将访问权限定义为public修改,则可以。 我认为构造函数默认是公开的?

Java中的无参数构造函数和默认构造函数之间的区别

实际上我无法理解no-arg构造函数和默认构造函数之间的区别。 import javax.swing.*; public class Test extends JFrame { public Test() { super(); this.setSize(200,200); this.setVisible(true); } public static void main(Sting[] arg) { Test cFrame = new Test(); } } 这是否在创建名为cFrame的Test对象时调用此类的默认构造函数?

应该在构造函数中放入多少代码?

我在想Java中构造函数应该放多少代码? 我的意思是,你经常使用辅助方法,你在构造函数中调用它,但有时会有一些更长的初始化事物,例如对于从文件,用户界面或其他程序中读取的程序,只初始化实例变量,构造函数可能会更长(如果你不使用辅助方法)。 我有一些想法,构造函数通常应该简洁明了,不应该吗? 这有例外吗?

如何解释构造函数中的return语句?

据我所知,构造函数什么也没有返回,甚至没有返回, 并且 return ; 在任何方法内部意味着返回void。 所以在我的程序中 public class returnTest { public static void main(String[] args) { returnTest obj = new returnTest(); System.out.println(“here1”); } public returnTest () { System.out.println(“here2”); return ; } } 我在打电话 return; 这将返回VOID,但构造函数不应该返回任何东西,程序编译得很好。 请解释 。

mockito如何创建模拟对象的实例

当我创建一个类Employee的模拟对象。 它不会调用Employee对象的构造函数。 我知道内部Mockito使用CGLIb和reflection,创建一个代理类,将类扩展为mock。 如果它没有调用employee的构造函数,那么employee类的mock实例是如何创建的?

了解NoSuchMethodexception中的方法签名

我得到了这个例外但解决了它。 java.lang.NoSuchMethodError: antlr.NoViableAltForCharException. (CLjava/lang/String;II)V 但我想知道如何解释这些消息:“(CLjava / lang / String; II)V”另外,这个“init”是否提到了NoViableAltForCharException类的构造函数? 谢谢。

为什么在构造函数调用之前初始化实例变量?

我有以下这段代码: public abstract class UCMService{ private String service; protected DataMap dataMap = new DataMap(); protected class DataMap extends HashMap { private static final long serialVersionUID = 4014308857539190977L; public DataMap(){ System.out.println(“11111”); put(“IdcService”,service); } } public UCMService(String service){ System.out.println(“2222”); this.service = service; } } 现在在控制台中, DataMap构造函数的System.out.println在UCMService的构造函数之前执行。 我想知道为什么会这样。

静态初始化程序在构造函数之后运行,为什么?

我有2个class: A类: public class A { static B b = new B(); static { System.out.println(“A static block”); } public A() { System.out.println(“A constructor”); } } B级: public class B { static { System.out.println(“B static block”); new A(); } public B() { System.out.println(“B constructor”); } } 我创建一个Main类,它只创建新的A: public class Main { public static void main(String[] args) […]