初始化复数JAVA
我想请问,我该怎么initiallize最终场1和0,如果我想他们使用加法和乘法中性元素,如在环初始化复数JAVA
他们必须costantly
public class ComplexNumber {
/**Constant for multiplication. Value 1*/
//public final ComplexNumber ONE;
/**Constant for addition. Value 0 */
//public final ComplexNumber ZERO;
/**The real value of ComplexNumber! FINAL*/
private final double a;
/**The imaginary value of ComplexNumber! FINAL*/
private final double b;
/**
* This Constructor initializes real and imaginary values of ComplexNumber
* @param a double real value
* @param b double imaginary value
*/
ComplexNumber(double a, double b) {
this.a = a;
this.b = b;
//this.ONE = new ComplexNumber(1,0); //TODO ask
// this.ZERO = new ComplexNumber(0);
}
/**
* This Constructor initializes imaginary value of CompexNumber
* @param b double imaginary value
*/
ComplexNumber(double b){
this.a = 0;
this.b = b;
//this.ONE = new ComplexNumber(1,0); //TODO ask
// this.ZERO = new ComplexNumber(0);
}
谢谢!
如果你想从他们的常量,声明并初始化它们是这样的:
public static final ComplexNumber ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
static
表示该字段是特定类的,而不是特定实例。 final
表示该参考不能被重新分配。对于一个真正的常量,这个实例也必须是不可变的,我认为你的代码在a
和b
之外不能从你的课程以外访问。
只constructor
是初始化Java中的final
变量的方法。
因为最终只能初始化一次它的生命周期,你不能重新初始化它。
所以,使用参数调用构造函数是初始化的最佳方式。
当我将它们初始化为构造函数时,会出现*Exception! '代码' 公共类ComplexNumber { \t/**恒为乘法。值1 */ \t public final ComplexNumber ONE; \t/**添加的常量。值0 */ \t public static final ComplexNumber ZERO = new ComplexNumber(0,0); \t \t \t/** ComplexNumber的实际值! FINAL */ \t private final double a; \t \t \t/** ComplexNumber的虚数值! FINAL */ \t private final double b; \t ComplexNumber(double a,double b){ \t \t this.a = a; \t \t this.b = b; \t \t this.ONE = new ComplexNumber(1,0); \t \t \t \t} –
public class ComplexNumber {
final double realPart;
final double imgPart;
public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
public ComplexNumber(double realPart, double imgPart) {
this.realPart = realPart;
this.imgPart = imgPart;
}
public ComplexNumber(double imgPart) {
this(0, imgPart);
}
}
为了使您的代码可读,您可以将您的字段名称重命名为real和img部分。
并使用构造函数链,以便可以重用现有的构造函数。
编辑
public class ComplexNumber {
final double realPart;
final double imgPart;
public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
public ComplexNumber(double realPart, double imgPart) {
this.realPart = realPart;
this.imgPart = imgPart;
}
public static ComplexNumber createRealComplexNumber(double realPart) {
return new ComplexNumber(realPart, 0.0);
}
public static ComplexNumber createImgComplexNumber(double imgPart) {
return new ComplexNumber(0.0, imgPart);
}
}
如果你想创建一个只实部的复数,你就不能过载构造函数,只有真正的一部分,因为相同的签名已被用过的。您可以使用此方法
谢谢!它的工作原理 –
使用@Timmos建议的方法初始化REAL_ONE&ZERO。在其上添加可读性和构造器链接 –
谢谢!它的工作 –
但我不喜欢静态在这种情况下,因为如果我没有任何对象,我不会需要常量!还是我不对? 但没有静态我有*异常 –
@DmitrySavkin如果你从不使用类,你将不会实例化常量。第一次使用该类时,静态字段将被初始化。无论如何,这是一个常量,所以你应该声明它是静态的。当您在ComplexNumber的构造过程中实例化ComplexNumber时,*Exception是正常的,因此您正在进行递归调用,该调用越来越深,没有转折点。 – Timmos