java 文件1  java1.javaimport java.util.*;
class Person
{
private String  name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int  getAge()
{
return age;
}
}
class Student extends Person
{
Student(String name,int age)
{
super(name,age);
}
}
java 文件2 java2.java
import java.util.*;
class GenericApplication2 
{
public static void main(String[] args) 
{
TreeSet<Student > ts = new TreeSet<Student > (new Mycompp ( ));//这里为什么提示 无法从静态上下文中引用非静态 变量 this????????????????????????????
ts.add(new Student ( "zhangsan1-st",21));
ts.add(new Student ( "zhangsan2-st",22));
ts.add(new Student ( "zhangsan3-st",23));
ts.add(new Student ( "zhangsan0-st",23));
ts.add(new Student ( "zhangsan3-st",22));
printColl(ts);
}
//比较器
static class Mycompp implements Comparator<Student >//这里如果为什么必须加静态?如果不加就会编译错误????????????????????????同上面的问题
{
public  int compare(Student s1,Student s2)
{
int num =  s1.getName().compareTo(s2.getName());  
if (num ==0)
{
 return new Integer (s1.getAge()).compareTo(new Integer(s2.getAge())); 
}
return num;
}
}
public static void printColl (TreeSet<Student > al
{
Iterator<Student > it = al.iterator();
while (it.hasNext())
{
System.out.println("it.next()===="+it.next().getName());
}
}
}

解决方案 »

  1.   

    问题一 :main方法是静态的,静态方法是类的,而不是对象的,this是指当前对象的。你应该好好看看什么是对象,什么是类。他们是什么区别,再就是static的作用。
    问题二 :main方法是static的 所以你所有调用的成员必须是static的。
      

  2.   

    1) main是静态方法
    2) 静态方法中只能引用静态的,或者说整个类所共有的变量,理由是,调用某个类的静态方法时,该类的实例可能还未生成,因此实例(非静态)变量/成员/方法是不可以在静态方法中使用的
    3) Mycompp是GenericApplication2这个类的一个内部成员类,如果不加static的话,是无法在该类main方法中使用的
    4) 如果把Mycompp拿到GenericApplication2的外面去,或者把main方法换到另外一个Test类中去,Mycompp前面的static是可以去掉的
      

  3.   


    关于3,4,
    a u sure?package A;import java.util.Comparator;public class StaticInner {    /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            StaticInner si = new StaticInner();
            A a  = si.new A();
            System.out.println(a.i);
        }
        
        class A implements Comparator{
            int i = 10;
            public int compare(Object o1, Object o2){
                return 0;
            }
        }}
      

  4.   


    呵呵,这本来就是JAVA支持的正规的可用语法特性。
    如果JAVA不支持,我无论怎么取巧,写出来编译器也不会认的。