方法1:使用自定义类(面向对象基础)
最直观的方式是创建Point
类封装坐标属性,符合面向对象设计原则:
public class Point { private double x; private double y; // 构造方法 public Point(double x, double y) { this.x = x; this.y = y; } // Getter和Setter public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } // 计算两点距离 public double distanceTo(Point other) { return Math.sqrt(Math.pow(x - other.x, 2) + Math.pow(y - other.y, 2)); } // 重写toString方便输出 @Override public String toString() { return "(" + x + ", " + y + ")"; } } // 使用示例 Point p1 = new Point(3.5, 4.2); Point p2 = new Point(7.1, 8.6); System.out.println("距离: " + p1.distanceTo(p2)); // 输出:距离: 5.0
优点:
- 高可读性,直接通过
getX()
/setX()
访问数据 - 可扩展性强(如添加三维坐标)
- 符合封装原则,避免数据暴露风险
方法2:利用Java标准库(java.awt.Point
或Point2D
)
Java内置类库提供现成解决方案:
import java.awt.Point; // 整数坐标 import java.awt.geom.Point2D; // 浮点数坐标 // 使用Point类(整数坐标) Point awtPoint = new Point(10, 20); System.out.println(awtPoint); // 输出:(10,20) // 使用Point2D.Double(高精度浮点坐标) Point2D.Double point2D = new Point2D.Double(3.14, 5.67); double distance = point2D.distance(0, 0); // 计算到原点的距离 System.out.println("距离原点: " + distance); // 输出:距离原点: 6.54
适用场景:
java.awt.Point
:适合屏幕像素坐标(整数)Point2D.Double
/Point2D.Float
:需要高精度计算时(如几何图形)
方法3:轻量级替代方案(数组或记录类)
对简单场景可使用更简洁的结构:
// 方式1:数组(需手动维护索引) double[] coord = {2.3, 5.1}; System.out.println("X: " + coord[0] + ", Y: " + coord[1]); // 方式2:Java 14+ 记录类(Record) public record PointRecord(double x, double y) {} PointRecord p = new PointRecord(1.1, 2.2); System.out.println(p.x()); // 自动生成getter
优缺点对比:
| 方式 | 优点 | 缺点 |
|————|————————–|————————–|
| 自定义类 | 灵活扩展,强封装 | 代码量稍多 |
| 标准库 | 无需重复造轮子,功能丰富 | 依赖java.desktop
模块 |
| 数组/Record| 极简实现 | Record需Java 14+,数组易出错 |
最佳实践建议
- 精度选择:
- 图形界面用
java.awt.Point
- 科学计算用
Point2D.Double
- 图形界面用
- 线程安全:
多线程环境下推荐创建不可变坐标类(字段用final
修饰)。 - 性能优化:
高频计算场景避免频繁创建对象,可复用实例或使用基本类型数组。
完整示例:自定义类+标准库结合
import java.awt.geom.Point2D; public class CustomPoint extends Point2D.Double { public CustomPoint(double x, double y) { super(x, y); } // 添加自定义方法 public boolean isOrigin() { return x == 0 && y == 0; } } // 使用 CustomPoint cp = new CustomPoint(0, 0); System.out.println("是否原点: " + cp.isOrigin()); // 输出:true
- 基础开发:优先使用
java.awt.geom.Point2D
,避免重复实现。 - 复杂系统:自定义类增强控制力(如添加业务逻辑)。
- 临时计算:数组或Record简化代码。
引用说明:
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/31237.html