与其类同名的方法?

时间:2017-08-03 08:53:34

标签: java

public class Person {
    private int age;    

    public Person(int initialAge) {
     if (initialAge<= 0) {
         System.out.println("Age is not valid, setting age to 0.");
     }
      else {
          age = initialAge;
      }
    // Add some more code to run some checks on initialAge
    }

  public void amIOld() {
    if (age < 13) {
        System.out.print("You are young.");

    }
    else if (age >= 13 && age < 18) {
        System.out.print("You are a teenager.");
    }
    else {
        System.out.print("You are old.");
    }
    // Write code determining if this person's age is old and print the correct statement:
    System.out.println(/*Insert correct print statement here*/);
  }

  public void yearPasses() {
    age += 1;

  }




  public static void main(String[] args  {

    Scanner sc = new Scanner(System.in);
    int T = sc.nextInt();
    for (int i = 0; i < T; i++) {
        int age = sc.nextInt();
        Person p = new Person(age);
        p.amIOld();
        for (int j = 0; j < 3; j++) {
            p.yearPasses();
        }
        p.amIOld();
        System.out.println();
    }
    sc.close();
  }
}

在上面的代码中,当使用参数创建person类的实例时,它是否会自动调用类中的Person方法?

是代码     人p =新人(年龄); 构造函数或方法调用?是吗? 使用与该类同名的方法的目的是什么? 它是如何运作的?

4 个答案:

答案 0 :(得分:0)

我个人而言,不喜欢与其所在类相同的nam方法,但是:

public class Person {
  public Person() {}    // constructor
  public void Person {} // method
  public static void main(String... args) {
    Person p = new Person();
    p.Person();
  }
}

通常,班级名称应为名词,而方法名称应为动词

答案 1 :(得分:0)

这就是构造函数。当你创建一个像这样的新实例时,它就会被破坏:Person me = new Person(99); 您可以拥有多个构造函数,如:

enter code here
public Person(int initialAge) {
    if (initialAge<= 0) {
        System.out.println("Age is not valid, setting age to 0.");
    }
    else {
        age = initialAge;
    }
}

public Person() {
    age = 0;
}

在同一个班级。在这种情况下,如果您创建这样的实例:像这样:Person me = new Person(99);只调用第一个构造函数,如果您创建这样的实例:Person me = new Person();只有第二个(除非您有一个引用当然其他)。

答案 2 :(得分:0)

一个名为类的mehtode,没有void或任何返回类型称为构造函数。

class MyClass {
    public MyClass () {
        //constructor code here
    }
}

每个calss都有一个默认的构造函数(如上所示),不需要写出来使用(由编译器生成),但它可能会被过度压缩和重载以获得更多功能。 每次生成类的对象时都会调用构造函数。

class Person {
    pulbic int age;

    public Person (int age) {
        this.age = age;
  }


   }

class Main {
    public static void main(String args[]) {
        //creating 2 objects of person
        Person p1 = new Person(23)
        Person p2 = new Person(51)
    }
}

该程序现在生成2个对象,对象p1在年龄变量中保存值23,而对象p2在年龄变量中保存值51。 年龄由使用new Person(int age)语句调用的构造函数设置。

如果你还没有初始化一个类vriable(在这种情况下是int age)但是在构造函数上设置它的值,那么它将被类的其余部分处理,就好像它是用特定值初始化一样。

您可以强制程序员使用构造函数在创建类时设置类的特定属性,并且可以确保设置此值。

如果重载构造函数,可以使用:

调用另一个构造函数
this(/*Overloaded parameters*/);

构造函数也不能调用类的任何方法(exept其他构造函数),因为在构造函数运行时类没有完全生成。

答案 3 :(得分:-1)

创建类的对象时

  1. 首先执行静态块
  2. 如果未定义构造函数,则默认为Constructor
  3. 用该对象调用该方法之后。
  4. 构造函数不是一个方法,因为它没有任何返回类型。如果没有在类中定义构造函数,则会自动调用默认构造函数。 否则,在创建对象时将调用特定的构造函数。