Java 您可以在公共类之外使用Scanner吗?相对于公共类,您将把单独的类放在哪里?

Java 您可以在公共类之外使用Scanner吗?相对于公共类,您将把单独的类放在哪里?,java,class,oop,Java,Class,Oop,我正致力于在面向对象编程的程序中使用单独的类。警告:我对OOP很反感,所以如果我的问题愚蠢且荒谬,请告诉我,或者,如果你知道我的意思,请为我编辑我的帖子 您是在单独的.java文件或相同的*文件中创建单独的类和程序本身吗 *和我的一样 public class filename { // ... content } class name { } 您可以在单独的类中使用Scanner,还是应该在main()方法中使用它?如果是,怎么做 假设您必须在main()方法中使用Scanner,并且声

我正致力于在面向对象编程的程序中使用单独的类。警告:我对OOP很反感,所以如果我的问题愚蠢且荒谬,请告诉我,或者,如果你知道我的意思,请为我编辑我的帖子

  • 您是在单独的.java文件或相同的*文件中创建单独的类和程序本身吗
  • *和我的一样

    public class filename
    {
    // ... content
    }
    
    class name
    {
    
    }
    
  • 您可以在单独的类中使用Scanner,还是应该在main()方法中使用它?如果是,怎么做

  • 假设您必须在main()方法中使用Scanner,并且声明了一个新的变量输入,并将其初始化为Scanner输入。如何将其设置为单独类中的变量之一?你会制作一个新的物体并做

  • 例如:

    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())

  • 在单独的类中创建变量时,它们是否以某种方式连接到main()方法中具有相同名称的变量或其他类

  • Scanner就像任何其他对象一样,可以通过引用传递到另一个方法/类中,并且仍然可以使用

    可以创建并使用scanner类的不同实例

    您可以在任何需要的类中使用Scanner。如果创建对象的新实例,它将不会与其他实例连接。这个问题不是特定于Scanner的,而是一般的java对象

    你会创建单独的类和程序本身吗 .java文件还是相同的*

    但是您可以在一个文件中创建多个类。比如说

    class A{
        public A(){
            System.out.println("A created");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            A x = new A();
        }
    }
    
    您可以在单独的类中使用Scanner,还是应该在单独的类中使用Scanner main()方法?如果是,怎么做

    取决于您的应用程序。许多人更喜欢组织和分离,所以最好的建议是在自己的课堂上进行。但是对于非常简单的示例和应用程序,我只是将其放入
    main()
    方法中,或者在任何方法中只使用一次。Scanner是一个独立的类,所以如果您创建另一个类只是为了单独包装它,那么它真的不值得

    您可以将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,并且您声明了 新变量输入,并将其初始化为扫描仪输入。你会怎么做 您将其设置为单独类中的变量之一?你愿意吗 创建一个新对象并执行

    是的,我将创建该类的新对象,并用输入值初始化其成员。或者我把扫描器放在类中,询问使用构造函数创建的每个对象的半径,而不带参数。有很多不同的方法,没有对错之分。尽量避免重复和依赖

    这里是您的代码编辑的例子这样做

    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;
        }
    }
    

    一个类-一个文件。也不例外。这将在将来维护产品时节省大量时间

    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
    )。尽量避免通过setter更改类状态。创建具有新状态(半径)的新对象

    尝试调用反映返回实体的方法名词

    尝试将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

    的代码。是的,您可以在同一个java文件中创建不同的类, 编译java文件后,将为您定义的每个类创建单独的.class文件

    我想说的是,您可以用任何名称保存java文件,然后对其进行编译。但是,如果任何类被声明为public(如上面的示例public class filename),那么java文件应该与public类具有相同的名称

    如果不这样做,则会出现编译时错误,说明: 类文件名是公共的,应在名为filename的文件中声明


    希望这对你有点帮助…

    为什么不上传代码的图片?对不起,我会纠正的!具有相同名称的不同变量之间没有连接,尽管它们可能具有相同的值。阅读你最喜欢的书中关于作用域的概念。你会以同样的方式使用它吗(也创建新的扫描仪)?如果你需要另一个扫描仪实例,你会使用Scanner input=new Scanner()创建一个新实例谢谢,我得到了这个部分!