System.out.println(Arrays.toString(PersonOverride.class.getConstructors())); 是什么意思
时间: 2024-03-30 08:37:20 浏览: 56
`PersonOverride.class` 是一个 `Class` 对象,`getConstructors()` 是 `Class` 类的方法,用于获取该类的所有公共的构造方法(即参数为 `public` 的构造方法)。
`Arrays.toString()` 是 `Arrays` 类中的一个静态方法,用于将指定的数组转换为字符串并返回,其中会调用数组中每个元素的 `toString()` 方法。
因此,`System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));` 的作用是获取 `PersonOverride` 类的所有公共构造方法,并将它们转换为字符串输出到控制台。
相关问题
[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]如何使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出
可以直接将 `System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));` 放在 `PersonOverride` 类的定义中,如下所示:
```java
public class PersonOverride {
public PersonOverride() {
// 构造方法1
}
public PersonOverride(String name, int age, boolean gender) {
// 构造方法2
}
public static void main(String[] args) {
System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
}
}
```
当运行 `main` 方法时,输出如下:
```
[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]
```
其中,`[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]` 就是 `PersonOverride` 类的所有公共构造方法的字符串表示。
该代码错误在哪?import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; import java.util.Scanner; class PersonOverride{ private String name; private int age; private boolean gender; public PersonOverride(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; } public PersonOverride() { this("default",1,true); } @Override public String toString() { return name + '-' + age + "-" + gender ; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PersonOverride that = (PersonOverride) o; return age == that.age && gender == that.gender && Objects.equals(name, that.name); } @Override public int hashCode() { return Objects.hash(name, age, gender); } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1=sc.nextInt(); PersonOverride[] persons1 = new PersonOverride[n1]; int n2 = sc.nextInt(); ArrayList<PersonOverride> p = new ArrayList<>(); for (int i = 0; i < n2; i++) { PersonOverride per = new PersonOverride(sc.next(),sc.nextInt(),sc.nextBoolean()); p.add(per); } for (int i = 0; i < p.size()-1; i++) { if(p.get(i).equals(p.get(i+1))){ p.remove(i); i--; } } PersonOverride[] persons2 = new PersonOverride[p.size()]; for (int i = 0; i < persons2.length; i++) { persons2[i]=p.get(i); } for (int i = 0; i < persons1.length; i++) { System.out.println(persons1[i].toString()); } for (int i = 0; i < persons2.length; i++) { System.out.println(persons2[i].toString()); } System.out.println(persons2.length); System.out.println(Arrays.toString(PersonOverride.class.getConstructors())); } }
该代码错误在于最后一段输出 `persons1` 数组时,该数组并没有进行初始化,因此会出现 `NullPointerException` 异常。具体来说,你在代码中使用了如下语句:
```java
for (int i = 0; i < persons1.length; i++) {
System.out.println(persons1[i].toString());
}
```
这段代码中 `persons1` 数组没有被初始化,因此其中的元素都是 `null`。在执行 `persons1[i].toString()` 时,由于 `persons1[i]` 为 `null`,因此会抛出 `NullPointerException` 异常。
解决该问题的方法有两种:一种是将 `persons1` 数组初始化,例如:
```java
PersonOverride[] persons1 = new PersonOverride[n1];
for (int i = 0; i < n1; i++) {
persons1[i] = new PersonOverride();
}
```
另一种是直接删掉这段输出 `persons1` 数组的代码。
阅读全文