定义一个正方形类square,在次类中包括写内容:
- 定义成员变量边长private int edge;
- 定义方法:包括构造方法,setter getter方法,求面积方法等,要求如下所示:
- 定义正方形类的构造方法:在构造方法中给edge赋值为2,并添加System.out.println("this is constructor method");
- 为成员变量edge设置set方法,用来接收用户给edge的值,如果用户给的值<=0,则设置edge值为1
- 为成员变量edge设置get方法,用来返回edge的值
- 完成求面积方法,得到正方形的面积:public int getArea()
定义类Main,并在main方法中, 1.首先创建正方形对象s1,然后通过getEdge()方法输出edge的值,然后调用getArea方法求出s1的面积并输出
2.创建正方形对象s2,并通过键盘输入s2对象的边的值,然后通过getEdge()方法输出edge的值,然后调用getArea方法求出s1的面积并输出
输入格式:
输入在一行中给出边的值。
输出格式:
输出s1对象的边、输出s1对象的面积
输出s2对象的边、s2对象的面积
输入样例:
在这里给出一组输入。例如:
3
-5
输出样例:
在这里给出相应的输出。例如:
this is constructor method
s1:edge=2
s1:area=4
this is constructor method
s2:edge=3
s2:area=9
this is constructor method
s1:edge=2
s1:area=4
this is constructor method
s2:edge=1
s2:area=1
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Square square1 = new Square();
System.out.println("s1:edge="+square1.getEdge());
System.out.println("s1:area="+square1.getArea());
Scanner sc = new Scanner(System.in);
Square square2 = new Square();
square2.setEdge(sc.nextInt());
System.out.println("s2:edge="+square2.getEdge());
System.out.println("s2:area="+square2.getArea());
}
}
class Square{
private int edge;
public Square() {
System.out.println("this is constructor method");
this.edge = 2;
}
public int getArea(){
return this.edge*this.edge;
}
public int getEdge() {
return edge;
}
public void setEdge(int edge) {
if(edge<=0){
this.edge = 1;
}else{
this.edge = edge;
}
}
}
代码详解:
import java.util.Scanner;
// 导入 java.util 包中的 Scanner 类,Scanner 类用于从控制台读取用户输入
public class Main {
// 定义一个公共类 Main,Java 程序的入口必须在一个类中,这里 Main 类是程序的入口类
public static void main(String[] args) {
在 Java 程序中, args 是 main 方法的参数, String[] args 表示一个字符串类型的数组,称为命令行参数数组。
// 定义程序的主方法,Java 程序从这里开始执行,args 是命令行参数数组.
Square square1 = new Square();
// 创建一个 Square 类的对象 square1,调用 Square 类的构造方法来初始化对象
System.out.println("s1:edge="+square1.getEdge());
// 输出 square1 的边长,通过调用 getEdge 方法获取边长
System.out.println("s1:area="+square1.getArea());
// 输出 square1 的面积,通过调用 getArea 方法计算并获取面积
Scanner sc = new Scanner(System.in);
// 创建一个 Scanner 对象 sc,用于读取控制台输入,System.in 表示标准输入流(即键盘输入)
Square square2 = new Square();
// 创建另一个 Square 类的对象 square2,再次调用 Square 类的构造方法
square2.setEdge(sc.nextInt());
// 从控制台读取一个整数,并通过 setEdge 方法设置 square2 的边长
System.out.println("s2:edge="+square2.getEdge()); // 输出 square2 的边长
System.out.println("s2:area="+square2.getArea()); // 输出 square2 的面积
}
}
class Square{
// 定义一个 Square 类,用于表示正方形
private int edge;
// 声明一个私有成员变量 edge,表示正方形的边长,私有变量只能在本类中访问
public Square() {
// 定义 Square 类的构造方法:
结构: public Square() {... } 。构造方法的名称与类名相同,没有返回值类型(也不能写 void ),这里访问修饰符是 public 表示可以被外部访问。
用法:在使用 new Square() 创建 Square 类的对象时自动调用,用于对新创建的对象进行初始化操作,比如在该方法中输出提示信息以及给成员变量 edge 赋初始值。
System.out.println("this is constructor method");
// 输出提示信息,表示正在调用构造方法
this.edge = 2;
// 将 edge 初始化为 2,this 关键字表示当前对象
}
当执行 Square square1 = new Square(); 这行代码时,就会调用上述 Square 类的构造方法。构造方法首先输出提示信息 this is constructor method ,然后将 edge 成员变量初始化为 2 。也就是说,在创建 square1 对象的同时, square1 对象的 edge 成员变量就被赋值为 2 了,完成了对对象的初始化操作。
public int getArea(){
// 定义一个公共方法 getArea,用于计算并返回正方形的面积:
结构: public int getArea() {... } 。 public 表示公共可访问, int 是返回值类型,表示该方法返回一个整数,方法名是 getArea 。
用法:用于计算并返回正方形的面积,在 main 方法中通过对象(如 square1.getArea() )调用该方法获取正方形的面积并进行输出。
return this.edge*this.edge;
this 关键字表示当前对象, this.edge 指的是当前对象中名为 edge 的成员变量,代表正方形的边长。
// 返回边长的平方,即正方形的面积
}
public int getEdge() {
// 定义一个公共方法 getEdge,用于获取正方形的边长
结构: public int getEdge() {... } 。 public 修饰表示公共, int 是返回值类型,返回私有成员变量 edge 的值。
用法:用于获取正方形的边长,在 main 方法中通过对象(如 square1.getEdge() )调用该方法获取边长并输出。
return edge;
// 返回私有成员变量 edge 的值
}
public void setEdge(int edge) {
// 定义一个公共方法 setEdge,用于设置正方形的边长
结构: public void setEdge(int edge) {... } 。 public 表示公共可访问, void 表示没有返回值,方法接收一个 int 类型的参数 edge 。
用法:用于设置正方形的边长,在 main 方法中通过对象(如 square2.setEdge(sc.nextInt()) )调用该方法,传入一个整数值来设置正方形的边长,并且方法内部会对传入的值进行判断和处理。
结构: Scanner 类是 Java 标准库中用于获取用户输入的类, nextInt 方法是 Scanner 类的一个实例方法。当你创建了一个 Scanner 类的对象(例如代码中的 sc ,即 Scanner sc = new Scanner(System.in); 所创建的对象)后,就可以通过该对象来调用 nextInt 方法,形式为 对象名.nextInt() ,在 nextInt 方法的括号内不需要传入参数(即该方法没有形参),它会从输入流中读取数据并进行处理。
用法: nextInt 方法主要的作用是从标准输入流( System.in ,通常对应键盘输入)中读取一个整数类型的数据。在上述代码的 main 方法中,先创建了 Scanner 对象 sc ,通过 sc.nextInt() 来等待用户在控制台输入一个整数,输入的整数会被 nextInt 方法获取并返回。返回的整数会作为参数传递给 square2 对象的 setEdge 方法(即 square2.setEdge(sc.nextInt()); ),从而实现对 square2 这个正方形对象边长的设置操作。也就是说, nextInt 方法起到了获取用户输入整数,并为后续程序处理提供数据的关键作用
if(edge<=0){ // 如果传入的边长小于等于 0
this.edge = 1; // 将边长设置为 1
}else{ // 否则
this.edge = edge; // 将边长设置为传入的值
}
}
}
创建正方形 s2 比 s1 多了 Scanner sc = new Scanner(System.in); 这一步,是因为它们设置边长的方式不同。
对于正方形 s1 ,在创建它的时候,通过调用 Square 类的构造方法 public Square() { System.out.println("this is constructor method"); this.edge = 2; } ,将边长默认初始化为 2 ,不需要从外部获取边长数据,所以不需要使用 Scanner 类来读取输入。
而对于正方形 s2 ,希望根据用户从控制台输入的数值来设置其边长。 Scanner 类是 Java 中用于从输入流(如控制台输入 System.in )读取数据的工具类, Scanner sc = new Scanner(System.in); 创建了一个 Scanner 对象 sc 后,就可以通过调用 sc 的相关方法(如 nextInt() )来读取用户输入的整数,然后将这个整数作为边长值传递给 square2 的 setEdge 方法( square2.setEdge(sc.nextInt()); ),从而实现根据用户输入来动态设置 s2 边长的功能。
简单来说,这一步是为了实现从外部(控制台)获取数据来设置正方形 s2 的边长,而 s1 不需要这样的外部输入,采用的是默认初始化边长的方式。
在面向对象编程中,将 Square square1 = new Square(); 这行创建对象的代码和 Square 类的构造方法的代码不写在一起,体现了封装的原则,即对象的内部实现细节(构造方法)对外部是隐藏的,外部只需要通过特定的方式( new 关键字)来创建对象。