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