我正在使用面向对象编程的程序中的单独类。警告:我是OOP的HORRID,所以如果我的问题是愚蠢和荒谬的,请告诉我,或者,如果你知道我的意思,请为我编辑我的帖子。
*相同,如
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())?
答案 0 :(得分:2)
您是否可以单独创建单独的类和程序本身 .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本身就是一个类,所以如果你创建另一个类只是为了单独包装它,它根本就不值得。
您可以将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,并声明了 新变量输入并将其初始化为扫描仪输入。怎么会 你将其设置为单独类中的变量之一?你会 制作一个新对象并做...
是的我会创建该类的新对象并使用输入值初始化其成员。或者我将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;
}
}
答案 1 :(得分:1)
扫描仪就像任何其他对象一样,可以通过引用传递到另一个方法/类中并仍然可以使用。
可以创建并使用扫描仪类的不同实例。
您可以在您需要的任何类中使用Scanner。如果您创建了该对象的新实例,它将不会与另一个实例连接。这个问题不是特定于Scanner,而是一般的java对象。
答案 2 :(得分:1)
第一个问题。是的,你可以在同一个java文件中创建不同的类, 在编译java文件之后,将为您定义的每个类创建单独的.class文件。
我想提一下,你可以保存你的java文件的任何名称然后编译它。但如果任何类被声明为public(如上例公共类文件名)那么java文件应该与公共类的名称相同。
没有这样做。你会得到编译时错误说: 类文件名是公共的,应在名为 filename 的文件中声明。
希望这对你有所帮助......
答案 3 :(得分:0)
一个班级 - 一个档案。没有例外。这将为将来维护产品节省大量时间。
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方法动词。
现在关于Scanner。
尝试使用这个想法/模板
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()方法中具有相同名称的变量或a 不同的班级?
只有一种方式。通过方法或构造函数参数。请使用Main
/ MyClass
查看以前的代码。