编写一个圆类,使用此类生成圆对象,要求具备一个无参构造方法和一个有参构造方法,能求出圆的周长和面积。要求圆半径的输入方式采用Scanner类来完成,分别使用两种构造方法生成圆的对象,编程时适当采用注释。
时间: 2024-09-27 21:16:15 浏览: 58
在Java中,我们可以创建一个名为Circle的类来表示圆形,并包含无参和有参构造函数,以及用于计算周长和面积的方法。这里是一个简单的例子:
```java
import java.util.Scanner;
// 定义Circle类,包含radius属性和相关的构造方法、getArea()和getCircumference()方法
public class Circle {
// 双重检查锁定,防止多次实例化null对象
private static volatile Circle instance; // 单例模式,保证只有一个实例
// 无参构造方法
private Circle() {
// 初始化私有变量radius,避免外部直接访问
this.radius = 0;
}
// 有参构造方法,接受半径作为参数
public Circle(double radius) {
if (radius <= 0) {
throw new IllegalArgumentException("Radius must be positive.");
}
this.radius = radius;
}
// 计算并返回圆的面积
private double getArea() {
return Math.PI * Math.pow(radius, 2);
}
// 计算并返回圆的周长
private double getCircumference() {
return 2 * Math.PI * radius;
}
// 获取Circle的唯一实例
public static Circle getInstance() {
if (instance == null) { // 判断是否已有实例
synchronized (Circle.class) {
if (instance == null) { // 内部同步,确保线程安全
instance = new Circle(); // 如果没有,创建新实例
}
}
}
return instance;
}
// 主函数,通过Scanner获取用户输入并创建Circle对象
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the circle's radius (using first constructor):");
Circle circle1 = Circle.getInstance();
circle1.radius = scanner.nextDouble();
System.out.println("Enter the circle's radius (using second constructor):");
Circle circle2 = new Circle(scanner.nextDouble()); // 使用有参构造函数,允许用户输入半径
System.out.println("Circle 1 area: " + circle1.getArea());
System.out.println("Circle 1 circumference: " + circle1.getCircumference());
System.out.println("Circle 2 area: " + circle2.getArea());
System.out.println("Circle 2 circumference: " + circle2.getCircumference());
scanner.close();
}
}
```
在这个例子中,我们使用了单例模式保证只有一个Circle对象实例,并通过Scanner获取用户输入的半径来创建Circle对象。同时,提供了无参构造和有参构造两种方式。
阅读全文