Java中的getter / setter方法和构造方法有什么区别?

构造函数

Java中的构造函数类似于method,它在创建类的对象时被调用,它通常用于初始化类的实例变量。构造函数与其类具有相同的名称,并且没有返回类型。

如果不提供构造函数,则编译器将代表您定义一个构造函数,该构造函数将使用默认值初始化实例变量。

您还可以通过构造函数接受参数,并使用给定的值初始化类的实例变量,这些被称为参数化构造函数。

示例

以下Java程序具有一个名为Student的类,该类使用默认构造函数和参数化构造函数初始化其实例变量的名称和年龄。

import java.util.Scanner;
class Student {
   private String name;
   private int age;
   Student(){
      this.name = "Rama";
      this.age = 29;
   }
   Student(String name, int age){
      this.name = name;
      this.age = age;
   }
   public void display() {
      System.out.println("name: "+this.name);
      System.out.println("age: "+this.age);
   }
}
public class AccessData{
   public static void main(String args[]) {
      //从用户读取值
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the name of the student: ");
      String name = sc.nextLine();
      System.out.println("Enter the age of the student: ");
      int age = sc.nextInt();
      Student obj1 = new Student(name, age);
      obj1.display();
      Student obj2 = new Student();
      obj2.display();
   }
}

输出结果

Enter the name of the student:
Krishna
Enter the age of the student:
20
name: Krishna
age: 20
name: Rama
age: 29

getter和setter方法

通常,在定义POJO / Bean对象(或封装类的变量)时,

  • 声明as私有的所有变量。

  • 提供公共方法来修改和查看它们的值(因为您不能直接访问它们)。

用于设置/修改类的私有实例变量的值的方法称为setter方法,用于检索私有实例变量的值的方法称为getter方法。

示例

在下面的Java程序中,Student(POJO)类具有两个变量name和age。我们通过将它们设为私有并提供setter和getter方法来封装此类。

如果要访问这些变量,则不能直接访问它们,您可以使用提供的setter和getter方法读取和写入它们的值。您未提供这些方法的变量将从外部类中完全隐藏。

import java.util.Scanner;
class Student {
   private String name;
   private int age;
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void display() {
      System.out.println("name: "+getName());
      System.out.println("age: "+getAge());
   }
}
public class AccessData{
   public static void main(String args[]) {
      //从用户读取值
      Scanner sc = new Scanner(System.in);
   System.out.println("Enter the name of the student: ");
   String name = sc.nextLine();
   System.out.println("Enter the age of the student: ");
   int age = sc.nextInt();
   //调用setter和getter方法
   Student obj = new Student();
   obj.setName(name);
   obj.setAge(age);
   obj.display();
   }
}

输出结果

Enter the name of the student:
Krishna
Enter the age of the student:
20
name: Krishna
age: 20

如您所见,构造函数和setter / getter方法之间的主要区别是-

  • 构造函数用于初始化类的实例变量或创建对象。

  • setter / getter方法用于分配/更改和检索类的实例变量的值。