定义NameComparator类时为什么要加上static才不报错

定义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);
		}
	}

}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,主程序是是静态类(public static class main)。在Java中,静态类中不能直接调用动态方法。只有将内部类(AgeComparator与NameComparator)修饰为静态类,然后才能够在主方法中调用该类。所以需要添加static,将其设置为静态类。或同学也可以不将NameComparator类写在StudentTest类中进行调用。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师