Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化复数JAVA_Java - Fatal编程技术网

初始化复数JAVA

初始化复数JAVA,java,Java,我想问,如果我想用它们作为加法和乘法的中性元素,比如在环中,如何初始化最终字段1和0 他们必须付出昂贵的代价 谢谢大家! 如果要使用它们生成常量,请按如下方式声明和初始化它们: public static final ComplexNumber ONE = new ComplexNumber(1, 0); public static final ComplexNumber ZERO = new ComplexNumber(0, 0); static表示字段是特定于类的,而不是特定于实例的最终

我想问,如果我想用它们作为加法和乘法的中性元素,比如在环中,如何初始化最终字段1和0

他们必须付出昂贵的代价


谢谢大家!

如果要使用它们生成常量,请按如下方式声明和初始化它们:

public static final ComplexNumber ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);

static
表示字段是特定于类的,而不是特定于实例的<代码>最终表示无法重新分配引用。对于真正的常量,实例也必须是不可变的,我认为您的代码正在这样做,因为
a
b
不能从类外访问。

如果您想从它们中生成常量,请像这样声明和初始化它们:

public static final ComplexNumber ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);

static
表示字段是特定于类的,而不是特定于实例的<代码>最终表示无法重新分配引用。对于实常量,实例也必须是不可变的,我认为您的代码正在这样做,因为
a
b
不能从类外访问。

只有
构造函数
是在Java中初始化
final
变量的方法

因为最终版本在其生命周期中只能初始化一次,所以不能再次重新初始化


因此,使用参数调用构造函数是一种最佳的初始化方法。

只有
构造函数
是在Java中初始化
最终
变量的方法

    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);
        }
    }
因为最终版本在其生命周期中只能初始化一次,所以不能再次重新初始化

所以,使用参数调用构造函数是初始化的最佳方式

    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 part。
并使用构造函数链接,以便可以重用现有构造函数

编辑

  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);
        }
    }
如果您想要创建一个只有实部的复数,您将无法重载只有实部的构造函数,因为已经使用了相同的签名。你可以用这个方法

为了使代码可读,您可以将字段名重命名为real和img part。
并使用构造函数链接,以便可以重用现有构造函数

编辑

  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,使用此方法。使用@Timmos建议的初始化REAL_ONE&ZERO的方法,在iTunes之上添加可读性和构造函数链接。在其上添加可读性和构造函数链接当我将它们初始化到构造函数中时,我将有StackOverFlowException代码'public class ComplexNumber{/**乘法常量。值1*/公共最终ComplexNumber 1;/**加法常量。值0*/公共静态最终ComplexNumber零=新的ComplexNumber(0,0);/**ComplexNumber!FINAL*/private FINAL double a的实值;/**ComplexNumber!FINAL*/private FINAL double b的虚值;ComplexNumber(double a,double b){this.a=a;this.b=b;this.ONE=new ComplexNumber(1,0);}当我将它们初始化到构造函数中时,我将使用StackOverFlowException!code'公共类ComplexNumber{/**乘法常量。值1*/公共最终ComplexNumber 1;/**加法常量。值0*/公共静态最终ComplexNumber零=新的ComplexNumber(0,0);/**ComplexNumber!FINAL*/private FINAL double a的实值;/**ComplexNumber!FINAL*/private FINAL double b的虚值;ComplexNumber(double a,double b){this.a=a;this.b=b;this.ONE=new ComplexNumber(1,0);}但是在这种情况下我不喜欢静态,因为如果我没有任何对象,我就不需要常数!或者我不对吗?但是没有静态,我就有堆栈溢出Exception@DmitrySavkin如果从不使用该类,则不会实例化常量。静态字段在第一次使用该类时会初始化。无论如何,它是一个常量,因此应该将其声明为静态。StackOverflowException是正常的,因为您在ComplexNumber的构造过程中实例化了一个ComplexNumber,所以您处于一个递归调用中,该调用会越来越深入,而不会出现转折点。但我不喜欢这种情况下的静态,因为如果我没有任何对象,我就不需要常量!或者我说的不对?但如果没有静电,我就有了堆栈溢出Exception@DmitrySavkin如果您从未使用该类,则不会实例化常量。静态字段在您第一次使用该类时初始化。无论如何,它是一个常量,因此您应该将其声明为静态。StackOverflowException是正常的,因为您在constr中实例化ComplexNumber一个复杂数的递归过程,所以你们处在一个递归调用中,这个调用越来越深入,而并没有转折点。