【问题标题】:How do I make a constructor that assigns multiple parameters?如何制作分配多个参数的构造函数?
【发布时间】:2023-01-16 10:26:05
【问题描述】:

我真的是 java 的新手,只是想了解一切是如何工作的。我有这样的方法:

public assignmentmarks(String name, int mark1, int mark2, int mark3)
{

}

问题要求创建使用所有字段(courseName、assignment1、assignment2、assignment3)的构造函数

这是我试过的

import java.util.Scanner;
public class assignmentmarks {

     private String courseName;
     private int assignment1;
     private int assignment2;
     private int assignment3;
     int average;
     int mark;

     Scanner scanner = new Scanner(System.in);

    public void AssignmentMarks(String name, int mark1, int mark2, int mark3)
    {
        assignment1 = mark1;
        assignment2 = mark2;
        assignment3 = mark3;
        courseName = name;

        AssignmentMarks assignmentMarks = new AssignmentMarks(mark1, mark2, mark3, name);
    }

【问题讨论】:

  • 我建议您在线查看 Java OOP 教程like this one from tutorialspoint,以更好地掌握在 Java 对象中使用构造函数和成员变量。
  • 您的代码中有一些语法错误,请显示完整的类(即复制并粘贴此代码所在的整个文件),因为结构中可能存在一些错误,而不仅仅是逻辑
  • 我更新了它并输入了我的整个代码
  • 创建实例后调用实例的构造函数来初始化它,您不需要创建实例 - 实际上您正在创建一个新实例作为前一个实例初始化的一部分 - 新实例也将执行构造函数,还创建一个新实例,这将再次创建另一个新实例......再一次......也就是说,将创建无限实例(或内存不足) - 或者最后一条语句是否在错误的块中?!

标签: java eclipse


【解决方案1】:

我有这样的方法:

public assignmentmarks(String name, int mark1, int mark2, int mark3)
{

}

那不是一种方法。它是一个构造器!

构造函数是一种“类方法”,没有返回类型,并且与封闭类同名。

您需要做的就是添加一些语句,将参数分配给您的类的字段。


话虽如此,assignmentmarks 对于类名来说是一个糟糕的选择。 Java 风格规则规定类名应该:

  1. 以大写字母开头
  2. 使用驼峰式大小写;即每个嵌入的单词应以大写字母开头。

    因此... AssignmentMarks 会是一个更好的名字。

    (是的......这类东西确实很重要。符合标准风格使你的代码可读性更强,这使得它更易于维护,这将节省你和你未来的同事的时间和头发撕裂。)


    另请注意,Java 中的名称(标识符)区分大小写。所以你需要成为持续的.不要在一个地方使用assignmentmarks而在另一个地方使用AssignmentMarks。这很可能会导致编译错误……或者更糟。

【讨论】:

    【解决方案2】:

    几乎没有办法解决这个问题。 首先,您打算创建的东西称为“所有参数构造函数”,这意味着您希望有一种声明的方式来创建类的实例(实体),并且在这样做时您希望拥有它的所有属性(字段参数)填充了在调用所述构造函数时指定的值。 有一种 hack 方法可以使用 lombok 并用 @AllArgsConstructor 注释你的类,但我建议你继续学习这些东西是如何手工制作的,然后稍后再回顾提到的语法糖。 话虽这么说,你想创建一个既没有返回类型也没有在其签名中写入“void”的方法,然后通过 this 引用实例槽的每个属性(字段参数)(字面意思是“我想工作和这个特定实体”),然后为它们分配您通过构造函数传递的值。 在您的情况下,它看起来像这样:

    // We have passed all the values that we need trough constructor.
        public AssignmentMarks(String name, int ass1, int ass2, int ass3, int mark, int average) {
    
        // Now we assign them to the properties of an instance we creating.
        // "courseName" of the created instance becomes "name" we passed.
        this.courseName = name; 
    
       // "assignment1" of the created instance becomes "ass1" we passed
        this.assignment1 = ass1; 
    
        // I bet you are getting the hang of it now.
        this.assignment2 = ass2; 
    
        // And so on.
        this.assignment3 = ass3; 
    
        // And so forth.
        this.mark = mark; 
    
        // Until you have assigned values to all properties you want to assign in the constructor.
        this.average = average;
        }
    

    现在您有了这个构造函数,您可以像这样简单地创建一个新实例:

    AssignmentMarks instance = new AssignmentMarks("programming", 1, 2, 3, 17, 20);
    

    我们还声明了我们想要分配的所有值。

    这就是你如何使用 lombok 完成它的方法:

        //This is an entire class
        @AllArgsConstructor
        public class AssignmentMarks {
    
         private String courseName;
         private int assignment1;
         private int assignment2;
         private int assignment3;
         int average;
         int mark;
    }
    

    由于 @AllArgsConstructor 注释,现在它已经具有“所有参数构造函数”。

    附言我加倍了以前的作家在 CamelCase 中命名你的班级很重要。

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2020-07-22
      • 2013-02-05
      相关资源
      最近更新 更多