我们可以将代码放在构造函数或方法或初始化块中.初始化块有什么用?每个java程序都必须拥有它吗?
到目前为止,我已经看到了两种在Java中设置变量值的方法.有时使用带参数的构造函数,其他setter方法用于设置每个变量的值.
我知道一旦使用"new"关键字对类进行实例化,构造函数就会在类中初始化一个实例变量.
但是我们何时使用构造函数,何时使用setter?
这是面试中提出的问题.如果一个类在java中有多个构造函数,那么我们可以从另一个构造函数中调用吗?何时?我怎么称为语法?
对于重载的New或Factory样式方法,嵌套构造函数调用(从设计POV)是一个好主意吗?这主要适用于简单的构造函数,其中每个重载构建在前一个构建器上.
MyClass( arg1 ) {
_arg1 = arg1;
_otherField = true;
_color="Blue"
}
MyClass( arg1, arg2) : this(arg1) {
_arg2 = arg2
}
MyClass( arg1, arg2, arg3) : this(arg1, ar2) {
_arg3 = arg3;
}
Run Code Online (Sandbox Code Playgroud)
或者使用工厂方法:
static NewInstance(arg1 ) {
_arg1 = arg1;
}
static NewInstance(arg1, arg2) {
f = NewInstance(arg1);
f._arg2 = arg2;
}
//... and so on
Run Code Online (Sandbox Code Playgroud)
我可以看到双方都有一些弊端
所以,这样做是个好主意,还是让我为一些我没有看到的问题做好准备.出于某种原因,我感到不安,主要是因为它分担了初始化的责任.
编辑: @Jon Skeet:我现在明白为什么这太困扰我了.我倒退了!我写了整篇文章,甚至没有注意到,它只是闻到了.我所拥有的大多数其他情况(我写的),按你推荐的方式做,但这肯定不是我这样做的唯一一个.我注意到我做得比较复杂,但是我看起来很简单. 我喜欢微编辑.我也喜欢首字母缩略词!
您好我是Java新手,我在生产工人类中遇到此错误.我的生产工作者构造函数说明显了调用另一个构造函数.我不知道该怎么办?.
import java.util.Date;
public class Employee
{
private String name, number;
private Date date;
public Employee(String name, String number, Date date)
{
setName(name);
setNumber(number);
setDate(date);
}
public void setName(String n)
{
name = n;
}
public void setNumber(String n)
{
number = n;
// you can check the format here for correctness
}
public void setDate(Date d)
{
date = d;
}
public String getName()
{
return name;
}
public String getNumber()
{
return number;
}
public Date getDate()
{ …Run Code Online (Sandbox Code Playgroud) 如果我的自定义类中有2个构造函数,并且其中一个构造函数需要一个额外的参数并完成第一个构造函数,但只需要一行代码(并且这个额外的行使用额外的参数),如何在没有它的情况下处理这个问题.必须复制第一个构造函数中的所有代码?
示例代码
public myConstuctor(int number, int number2){
int result = (number + number2);
int result2 = (number2 - number1)
//Etc
//Etc
//Etc
//Etc
}
public myConstructor(int number1, int number2, int number 3){
int result = (number + number2);
int result2 = (number2 - number1)
//Etc
//Etc
//Etc
//Etc
int result3 = (result + result2 + number3)
}
Run Code Online (Sandbox Code Playgroud) 我想在创建单个对象时执行多个构造函数.例如,我有一个像这样的类定义 -
public class Prg
{
public Prg()
{
System.out.println("In default constructor");
}
public Prg(int a)
{
System.out.println("In single parameter constructor");
}
public Prg(int b, int c)
{
System.out.println("In multiple parameter constructor");
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过以下代码实现它 -
public class Prg
{
public Prg()
{
System.out.println("In default constructor");
}
public Prg(int a)
{
Prg();
System.out.println("In single parameter constructor");
}
public Prg(int b, int c)
{
Prg(b);
System.out.println("In multiple parameter constructor");
}
public static void main(String s[])
{
Prg obj = new Prg(10, …Run Code Online (Sandbox Code Playgroud) 我想知道这意味着什么?
public Settings() {
this(null);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是"设置"类的构造函数.这(null)在这里意味着什么?
我有一个构造函数
private Double mA;
private Double mB;
Foo(Double a) {
mA = a;
mB = a + 10;
}
Foo(Double a, Double b) {
mA = a;
mB = b;
// some logic here
}
Run Code Online (Sandbox Code Playgroud)
如果我这样调用第二个构造函数:
Foo(Double a) {
Double b = a + 10;
this(a, b);
}
Run Code Online (Sandbox Code Playgroud)
比编译器告诉我的那样,那个构造函数应该是第一个语句.那么我需要将所有逻辑从第二个构造函数复制到第一个构造函数吗?
你好,我仍然是java的新手.当涉及到实例变量时,我得到了"this"的概念,但是当我在没有参数的构造函数中使用它时,我会有点困惑.所以我的问题是这样的工作怎么样?
private double x;
private double y;
public static final double EPSILON = 1e-5;
public static boolean debug = false;
public Point(double x, double y){
this.x=x;
this.y=y; // Done sets the x,y private types to the x,y type provided in the ()
}
public Point(){
this(0.0,0.0); //Sets, x and y to doubles of 0.0,0.0??
} //How does this work?
Run Code Online (Sandbox Code Playgroud)
我的point()构造函数会通过调用point(x,y)构造函数来创建(0.0,0.0)的原点吗?任何有关这方面的澄清都会对我有所帮助!
java ×9
constructor ×7
this ×2
c# ×1
duplicates ×1
eclipse ×1
overloading ×1
setter ×1
superclass ×1