定义NameComparator类时为什么要加上static才不报错
package com.imooc;
public class Student {
private int stuId;
private String name;
private int age;
public Student() {}
public Student(int stuId, String name, int age) {
super();
this.stuId = stuId;
this.name = name;
this.age = age;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
String str = "["+"学号:"+this.stuId+",姓名:"+this.name+",成绩:"+this.age+"]";
return str;
}
}import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class StudentTest {
// 为什么这里不加static,在下方传入时会报错
public static class AgeComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return (o1.getAge()-o2.getAge());
}
}
public static class NameComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getName().compareTo(o2.getName());
}
}
public static void main(String[] args) {
//定义三个Student类的对象及一个ArrayList类的对象
List<Student> list = new ArrayList<Student>();
Student stu1 = new Student(40,"peter",20);
Student stu2 = new Student(28,"angel",5);
Student stu3 = new Student(35,"tom",18);
//将Student类的对象添加到集合中
list.add(stu2);
list.add(stu3);
list.add(stu1);
for(Student stu:list) {
System.out.println(stu);
}
System.out.println("====按照name排序后====");
//这里的new NameComparator(),如果NameComparator前面不加static会报如下错误
//No enclosing instance of type StudentTest is accessible. Must qualify the allocation with an enclosing instance of type StudentTest (e.g. x.new A() where x is an instance of StudentTest).
Collections.sort(list, new NameComparator());
for(Student stu:list) {
System.out.println(stu);
}
}
}23
收起
正在回答
1回答
同学你好,主程序是是静态类(public static class main)。在Java中,静态类中不能直接调用动态方法。只有将内部类(AgeComparator与NameComparator)修饰为静态类,然后才能够在主方法中调用该类。所以需要添加static,将其设置为静态类。或同学也可以不将NameComparator类写在StudentTest类中进行调用。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星