java OOP问题,例如,在哪里放置单独的类?

643ylb08  于 2023-03-11  发布在  Java
关注(0)|答案(4)|浏览(95)

我正在一个面向对象的程序中使用独立的类。
1.您是在单独的.java文件中创建单独的类和程序本身,还是相同的文件?
例如:

public class filename {
    // ... content
}

class name {

}

1.您可以在单独的类中使用Scanner,还是应该在main()方法中使用它?
如果是,如何做到?
1.假设您必须在main()方法中使用Scanner,并且您声明了一个新的变量input并将其初始化为Scanner input。
你怎么把它设置为一个变量,在一个单独的类中,你会创建一个新的对象吗?
示例:

public class TestSimpleCircle {
    public static void main(String[] args {
    SimpleCircle circle1 = new SimpleCircle();
    System.out.println("The area of the circle of radius " + circle1.radius + " is "  + circle1.getArea());

    // Create a circle with radius 25
    SimpleCircle circle2 = new SimpleCircle(25);        System.out.println("The area of the circle of radius " + circle2.radius + " is " + circle2.getArea());

    // Create a circle with radius 125
    SimpleCircle circle3 = new SimpleCircle(125);       System.out.println("The area of the circle of radius " + circle3.radius + " is " + circle3.getArea());

    // Modify circle radius
    circle2.radius = 100; // or circle2.setRadius(100)  System.out.println("The area of the circle of radius " + circle2.radius + " is " + circle2.getArea());
    }
}

class SimpleCircle {
    double radius;

    SimpleCircle() {
        radius = 1;
    }

    SimpleCircle(double newRadius) {
        radius = newRadius;
    }

    double getArea() {
        return radius * radius * Math.PI;
    }

    double getPerimeter() {
        return 2 * radius * Math.PI;
    }

    void setRadius(double newRadius) {
        radius = newRadius;
    }
}

......(例如,circle1.getArea())?
1.当您在单独的类中创建变量时,它们是否以某种方式连接到main()方法中的同名变量或不同的类中?

yizd12fk

yizd12fk1#

对于第一个问题。是的,您可以在同一个java文件中创建不同的类,编译java文件后,将为您定义的每个类创建单独的.class文件。
我想提一下你可以用任何名字保存你的java文件然后编译它.但是如果任何类被声明为公共的(如上面的例子公共类文件名)那么java文件应该和公共类有相同的名字.
如果不这样做,您将得到编译时错误消息:* 类文件名是公共的,应在名为*文件名的文件中声明。
希望这对你有一点帮助...

jm81lzqq

jm81lzqq2#

一个类一个文件,无一例外,这将保存大量的时间时,维护产品的未来.

class SimpleCircle {
    // be private - accessible only inside class
    // be final - assign only in constructor
    private final double radius;

    SimpleCircle(double newRadius) {
        radius = newRadius;
    }

    double area() {
        return radius * radius * Math.PI;
    }

    double perimeter() {
        return 2 * radius * Math.PI;
    }
}

尽量避免使用带有无用赋值的构造函数(如果你使用不带参数的构造函数,那么默认值radius=1是什么意思)。2尽量避免通过设置函数改变类的状态。3创建带有新状态(半径)的新对象。
尝试调用方法名词,反映返回的实体
尝试命名void方法动词,以反映对象的行为。
现在说说扫描仪。
尝试使用此想法/模板

public class MyClass {
    private final Scanner scanner;

    public MyClass(Scanner scanner) {
        this.scanner = scanner;
    }

    public void any_work() {
        ...
        int readed = scanner.nextInt();
        ...
    }
}

public class Main {
    public static void main(String[] args) {
        ...
        MyClass myClass = new MyClass(new Scanner(System.in));
        ...
        myClass.any_work();
        ...
    }
}

当您在单独的类中创建变量时,它们是否以某种方式连接到main()方法中的同名变量或不同的类中?
只有一种方式。通过方法或构造函数参数。请参阅前面的Main/MyClass代码。

g9icjywg

g9icjywg3#

您是在单独的.java文件中创建单独的类和程序本身,还是在同一个 * 中创建?
Every class in Java should be in its own file,但是您可以在一个文件中创建多个类。例如

class A{
    public A(){
        System.out.println("A created");
    }
}

public class Main {
    public static void main(String[] args) {
        A x = new A();
    }
}

你能在单独的类中使用Scanner吗?还是应该在main()方法中使用它?如果可以,怎么做?
这取决于你的应用程序。许多人喜欢尽可能的组织和分离,所以最好的建议是把它放在自己的类中。但是对于非常简单的例子和应用程序,我只是把它放在main()方法中,或者如果我只想在任何方法中使用一次。Scanner是一个独立的类,所以如果你创建另一个类只是为了单独 Package 它,那真的不值得。
您可以将Scanner创建为任何类的成员变量,如果有一些方法要与它一起使用,则可以使用它。
这些只是一些想法,完全取决于您的设计、应用行为和个人推荐
至于怎么做,这里有一个例子

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a number");
        int number = sc.nextInt();
        System.out.println("You entered number " + number);
    }
}

假设你必须在main()方法中使用Scanner,并且你声明了一个新的变量input并初始化为Scanner input,你会如何将它设置为单独类中的变量之一?你会创建一个新对象并做...
是的,我会创建这个类的新对象并用输入值初始化它的成员。或者我把扫描器放在类中,询问用构造函数创建的每个对象的半径。有很多不同的方法,没有对与错。只是尽可能避免重复和依赖。
下面是您的代码编辑与这样做的例子

import java.util.Scanner;

public class TestSimpleCircle {
    public static void main(String[] args) {

        System.out.println("Enter radius of your choice please");
        Scanner sc = new Scanner(System.in);

        SimpleCircle circle1 = new SimpleCircle(sc.nextInt()); // taking the radius as input

        System.out.println("The area of the circle of radius " + circle1.radius + " is " + circle1.getArea());

        // Create a circle with radius 25
        SimpleCircle circle2 = new SimpleCircle(25);
        System.out.println("The area of the circle of radius " + circle2.radius + " is " + circle2.getArea());

        // Create a circle with radius 125
        SimpleCircle circle3 = new SimpleCircle(125);
        System.out.println("The area of the circle of radius " + circle3.radius + " is " + circle3.getArea());

        // Modify circle radius
        circle2.radius = 100;
        System.out.println("The area of the circle of radius " + circle2.radius + " is " + circle2.getArea());

    }
}

class SimpleCircle {
    double radius;

    SimpleCircle() {
        radius = 1;
    }

    SimpleCircle(double newRadius) {
        radius = newRadius;
    }

    double getArea() {
        return radius * radius * Math.PI;
    }

    double getPerimeter() {
        return 2 * radius * Math.PI;
    }

    void setRadius(double newRadius) {
        radius = newRadius;
    }
}
krugob8w

krugob8w4#

扫描器就像任何其他对象一样,可以通过引用传递到另一个方法/类中,并且仍然可以使用。
也可以创建和使用scanner类的不同示例。
你可以在任何你需要的类中使用Scanner。如果你创建了一个新的对象示例,它将不会与其他示例连接。这个问题并不是Scanner特有的,而是一般的java对象。

相关问题