Tag: 构造函数

什么时候java对象在构造期间变为非null?

假设你正在创建一个java对象: SomeClass someObject = null; someObject = new SomeClass(); someObject在什么时候变为非null? 是在SomeClass()构造函数运行之前还是之后? 为了澄清一点,比如说另一个线程要检查someObject为null而SomeClass()构造函数是在完成的一半时,它是null还是非null? 另外,如果someObject是这样创建的,那会有什么不同: SomeClass someObject = new SomeClass(); someObject不会是null?

java强制扩展类

在Java中,我可以以某种方式强制扩展抽象类的类来实现其构造函数,并将Object作为参数吗? 就像是 public abstract class Points { //add some abstract method to force constructor to have object. } public class ExtendPoints extends Points { /** * I want the abstract class to force this implementation to have * a constructor with an object in it? * @param o */ public ExtendPoints(Object o){ } }

带有“void”的构造函数中的代码不执行

如果我这样使用 class Test { public Test() { System.out.println(“constructor”); } } public class MainClass { public static void main(String[] args) { Test t1 = new Test(); Test t2 = new Test(); } } 我得到2输出构造函数构造函数 但是如果我向构造函数添加void(public void Test()) – 输出为空。 为什么这么奇怪?

静态方法访问非静态构造函数?

我昨天参加了Java考试。 有些东西对我来说似乎很模糊。 规则很简单: 静态方法不能不能调用非静态方法。 构造函数是一种没有返回类型的方法 。 public class Main { public static void main(String[] args) { Main p = new Main(); k(); } protected Main() { System.out.print(“1234”); } protected void k() { } } Main p = new Main() line prints 1234 k() line raises error 那为什么会这样呢? 它不与上面的Java规则冲突吗?

为什么将HashSet (0)初始化为零?

我喜欢HashSet ()并在使用默认构造函数初始化时急切地使用它: Set users = new HashSet(); 现在,我的自动bean创建器(JBoss工具)将其初始化为: Set users = new HashSet(0); 为什么零 ? API告诉我这是初始容量 ,但将其置于零的优势是什么? 这是建议吗?

什么时候在java中使用Long vs long?

以下是我的界面 – public interface IDBClient { public String read(ClientInput input); } 这是我实现的界面 – public class DatabaseClient implements IDBClient { @Override public String read(ClientInput input) { } } 现在我有一个像这样获取DatabaseClient实例的工厂 – IDBClient client = DatabaseClientFactory.getInstance(); …. 现在我需要调用我的DatabaseClient read方法,该方法接受ClientInput参数,下面是相同的类。 这堂课不是我写的,所以这就是我对此有疑问的原因,我非常确定这是错误的做法。 public final class ClientInput { private Long userid; private Long clientid; private Long timeout_ms = 20L; private boolean […]

嵌套类中私有构造函数的范围

这不仅仅是一个难题而不是问题。 我有以下代码: public class PrivateBaseConstructor { public static class BaseClass { private BaseClass() { } } public static class DerivedClass extends BaseClass { public DerivedClass() { super(); // 1* } } } 这里调用super(); 虽然基类构造函数是private但是1 *是允许的事件。 如果我们将类作为单独的类编写在同一个包中: BClass.java public class BClass { private BClass() { } } DClass.java public class DClass extends BClass { public DClass() […]

将类作为final并将类构造函数设置为private是有区别的

final类和class构造函数之间的区别究竟是什么。 我知道两者都不能被分类(如果我错了,请纠正我)。 他们有什么不同吗?

我们可以在Java中使用构造函数的返回类型吗?

以下代码给出了编译错误: class parent { parent(int a){} } class child extends parent{} 错误: Main.java:6: cannot find symbol symbol : constructor parent() location: class parent class child extends parent{} ^ 1 error 我试图做不同的事情,发现向父构造函数添加一个返回类型摆脱了错误! class parent { int parent(int a){} } class child extends parent{} 我已经读过构造函数不应该有返回类型,这显然不是一直都是正确的。 所以我的问题是我们什么时候应该有构造函数的返回类型?

重载构造函数调用其他构造函数,但不作为第一个语句

我在java中使用多个构造函数时遇到了一些麻烦。 我想做的是这样的: public class MyClass { // first constructor public MyClass(arg1, arg2, arg3) { // do some construction } // second constructor public MyClass(arg1) { // do some stuff to calculate arg2 and arg3 this(arg1, arg2, arg3); } } 但我不能,因为第二个构造函数不能调用另一个构造函数,除非它是第一行。 这种情况的常见解决方案是什么? 我无法计算arg2和arg3“在行”。 我想可能会创建一个构造辅助方法,它将进行实际构造,但我不确定它是如此“漂亮”…… 编辑 :使用辅助方法也是有问题的,因为我的一些字段是最终的,我不能使用辅助方法设置它们。