首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:所有构造函数的通用代码?

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

Stack Overflow用户
提问于 2013-11-09 03:12:59
回答 2查看 2.9K关注 0票数 4

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

代码语言:javascript
运行
复制
public class Foo {
 private int foo;
 {foo = 5;}
 public Foo(){}
 public Foo(int v){this.foo = v;}
 public int getFoo(){return foo;}
}   

这两个构造函数都需要代码"foo=5;“。

在我看来你做不到,但我想确定一下。不可能创建这样使用参数的通用代码?

例如:

代码语言:javascript
运行
复制
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 (Int m),由所有的构造函数调用?

ps:我称{foo = 5;}为“公共代码”,但我想这个特性还有另一个官方名称吗?

编辑(1):

  1. 我正在寻找的术语是初始化程序块。
  2. 这个问题与询问构造函数是否也可以调用另一个构造函数不同。因为当使用初始化程序块时,代码会自动调用,即。没有风险调用构造函数而忘记调用它
  3. 我关于使用"void“的评论并不好,实际上,在这种情况下,调用另一个构造函数更好。
  4. 简而言之,我的问题是:初始化程序块能接受参数吗?这与强制执行所有构造函数上的一些参数类似。

编辑(2):

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

EN

回答 2

Stack Overflow用户

发布于 2013-11-09 03:17:22

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

说我有:

代码语言:javascript
运行
复制
Foo(int a, int b) {
  // some code..
}

但我也想打个电话:

代码语言:javascript
运行
复制
Foo(int a, int b, int c) {
  // some other code
}

我想这样说:

代码语言:javascript
运行
复制
Foo(int a, int b) {
  this(a, b, 0);
  // Whatever other code you want in this constructor.
}
票数 6
EN

Stack Overflow用户

发布于 2013-11-09 03:34:47

您需要了解Java是如何创建对象的!

代码语言:javascript
运行
复制
class A{

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

{
   b = "b2";
}

static{
 a = "a2";  
}

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


} 

所以我们的想法是当你创建一个

代码语言:javascript
运行
复制
new A();

第一个

代码语言:javascript
运行
复制
private static String a = "a";

之后

代码语言:javascript
运行
复制
static{
 a = "a2";  
}

之后

代码语言:javascript
运行
复制
private String b = "b";

之后

代码语言:javascript
运行
复制
{
   b = "b2";
}

只在之后

代码语言:javascript
运行
复制
public A()
{
 b = "b3";
}

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

代码语言:javascript
运行
复制
static{
 a = "a2";  
}

在此之后

代码语言:javascript
运行
复制
private static String a = "a";

您将忽略块中的代码,因为您在声明前使用了变量!正常变量也是如此!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19871949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档