繁体   English   中英

Java:所有构造函数的通用代码?

[英]Java: common code for all constructors?

在我看来,构造函数可以共享相同的代码,例如:

public class Foo {
 private int foo;
 {foo = 5;}
 public Foo(){}
 public Foo(int v){this.foo = v;}
 public int getFoo(){return foo;}
}   

代码“foo = 5;” 两个构造函数都被调用。

在我看来你不能,但我想确定。 是不是可以创建使用参数的公共代码?

例如,像:

public class Foo {
 private int foo;
 (int m){foo = m*5;}
 public Foo(int m){}
 public Foo(int v,int m){this.foo = v;}
 public int getFoo(){return foo;}
}   

据我所知,唯一的方法是创建一个由所有构造函数调用的私有void init(int m)?

ps:我打电话给{foo = 5;}“公共代码”,但我想这个功能有另一个官方名称?

编辑(1):

  1. 我正在寻找的术语是初始化程序块

  2. 这个问题与询问构造函数是否也可以调用另一个构造函数不同。 因为在使用初始化程序块时,代码被称为AUTOMATICALLY,即。 没有风险调用构造函数而忘记调用它

  3. 我对使用“void init”的评论并不好,实际上在这种情况下调用另一个构造函数更好。

  4. 简而言之,我的问题是:初始化程序块可以采用参数吗? 这与强制实现所有构造函数的某些参数有点相同。

编辑(2):

我现在想知道实现我要求的唯一方法是使用继承来强制使用特定的构造函数。

您可以通过调用this()并匹配参数列表来从其他构造函数调用构造函数。

说我有:

Foo(int a, int b) {
  // some code..
}

但我也打电话:

Foo(int a, int b, int c) {
  // some other code
}

我会这样说:

Foo(int a, int b) {
  this(a, b, 0);
  // Whatever other code you want in this constructor.
}

您需要了解Java创建对象的方式!假设您拥有

class A{

private String b = "b";
private static String a = "a";

{
   b = "b2";
}

static{
 a = "a2";  
}

public A()
{
 b = "b3";
}


} 

所以我的想法是当你创建一个对象时

new A();

首先

private static String a = "a";

static{
 a = "a2";  
}

private String b = "b";

{
   b = "b2";
}

只有在之后

public A()
{
 b = "b3";
}

但要小心静态变量和静态块的优先级是相同的。 而正常变量和块的优先级也是一样的。 所以,如果你把下一个代码

static{
 a = "a2";  
}

之后

private static String a = "a";

您将忽略块中的代码,因为您在声明之前使用该变量! 对于正常变量也一样!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM