一.显示错误:No enclosing instance of type SortButtonListener is accessible. Must qualify the allocation with an enclosing instance of type SortButtonListener (e.g. x.new A() where x is an instance of SortButtonListener).
二.错误原因:因为xx是一个动态的内部类,创建这样的对象必须有实例与之对应,程序是在静态方法中直接调用动态内部类会报这样错误。这样的错误好比类中的静态方法不能直接调用动态方法。可以把该内部类声明为static。或者不要在静态方法中调用。
三.静态方法与非静态方法的区别:1.在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而非静态方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象;2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制; 3. 静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,static内部只能出现static变量和其他static方法,而且static方法中还不能使用this.... 等关键字; 4.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
四.静态内部类和非静态内部类:1.静态内部类中可以定义静态或者非静态的成员 ;2.静态内部类只能访问外部类的静态成员(包括静态变量和静态方法) ;3.非静态内部类能访问外部类的静态成员(包括静态变量和静态方法);4.外部类访问内部类的静态成员:内部类.静态成员;5.外部类访问内部类的非静态成员:实例化内部类。
五.内部类:内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。(1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。(2)内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。(3)内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量。
六.成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。1.内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)2.用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。3.成员内部类不能定义静态成员,只能定义对象成员。4、创建成员内部类实例时,外部类的实例必须已经存在。5、当内部类和外部类有同名的成员时,内部类可通过 外部类名.this.变量名 访问外部类成员。
七.静态嵌套类:静态内部类中可以定义静态或者非静态的成员。从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
二.错误原因:因为xx是一个动态的内部类,创建这样的对象必须有实例与之对应,程序是在静态方法中直接调用动态内部类会报这样错误。这样的错误好比类中的静态方法不能直接调用动态方法。可以把该内部类声明为static。或者不要在静态方法中调用。
三.静态方法与非静态方法的区别:1.在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而非静态方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象;2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制; 3. 静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,static内部只能出现static变量和其他static方法,而且static方法中还不能使用this.... 等关键字; 4.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
四.静态内部类和非静态内部类:1.静态内部类中可以定义静态或者非静态的成员 ;2.静态内部类只能访问外部类的静态成员(包括静态变量和静态方法) ;3.非静态内部类能访问外部类的静态成员(包括静态变量和静态方法);4.外部类访问内部类的静态成员:内部类.静态成员;5.外部类访问内部类的非静态成员:实例化内部类。
五.内部类:内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。(1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。(2)内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。(3)内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量。
六.成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。1.内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)2.用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。3.成员内部类不能定义静态成员,只能定义对象成员。4、创建成员内部类实例时,外部类的实例必须已经存在。5、当内部类和外部类有同名的成员时,内部类可通过 外部类名.this.变量名 访问外部类成员。
七.静态嵌套类:静态内部类中可以定义静态或者非静态的成员。从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。