java - 自定义对象的实例在创建另一个 java 时被替换
问题描述
我有类似的代码,
public class ComplexSO {
public static double real;
public static double imaginary;
public ComplexSO(double cReal, double cImaginary) {
real = cReal;
imaginary = cImaginary;
}
public static ComplexSO selfSquare() {
return new ComplexSO(Math.pow(real, 2) - Math.pow(imaginary, 2),
2 * real * imaginary);
}
public static ComplexSO add(Complex other) {
return new ComplexSO(real + other.real, imaginary + other.imaginary);
}
public static void main(String[] args) {
ComplexSO c = new ComplexSO(1, 2);
System.out.println("c.real = " + c.real + ", c.imaginary = " + c.imaginary);
ComplexSO d = new ComplexSO(2, 3);
System.out.println("c.real = " + c.real + ", c.imaginary = " + c.imaginary);
}
}
当我运行它时,我得到了输出:
c.real = 1.0, c.imaginary = 2.0
c.real = 2.0, c.imaginary = 3.0
我对面向对象语言(C++ 和 python)并不陌生,但我对 java 很陌生,这对我来说毫无意义。请停下来。
解决方案
在 Java 中,类的静态属性是全局的。每个类定义只有一个值。同样,静态方法在全局范围内运行,而不是在类实例上运行。real
只需从、imaginary
、selfSquare
和中删除 static ,add
您应该会看到正确的行为。您的main
方法需要保持静态。
推荐阅读
- python-3.x - Yahoo Finance scraping does not select collapsed rows
- python - Finding a timedelta in pandas dataframe based upon specific values in one column
- php - Store data in the file with two indexes
- lua - lua: attempt to index a nil value (field '?')
- ruby-on-rails - Ruby on Rails - redirect_to does not redirect, yet creates successful GET request
- javascript - Can't find module 'discord.js' for Discord bot
- swift - 涉及 .with 模式的 Swift 语法之谜
- flutter - Flutter Card 的高度相对于其子内容没有变化
- mysql - 是否可以导入数据库模式来服务 mysql gitlab ci?
- python - python中pd groupby中的不同聚合