- 抽象的方法是否可以同时时静态的?
抽象的方法将来是要被重写的,而静态的方法是不能重写的,所以这个是错误的。 - 是否可以从一个静态的方法内部发出对非静态方法的调用?
不可以,静态方法只能访问静态成员,非静态方法的调用要先创建对象。 - static不可用来修饰局部变量
- 内部类和静态内部类的区别?
①普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。
②普通内部类能够访问外部类的静态和非静态成员,静态内部类不能访问外部类的非静态成员,他只能访问外部类的静态成员。
③一个普通内部类不能脱离外部类实体被创建,且可以访问外部类的数据和方法,因为他就在外部类里面。
public class classA {
int a =1;
static int d=2;
classC c = new classC();
classB b = new classB();
void test2(){
classC.e =2;
// classC.f = 2;//需要实例化普通内部类后才能调用非静态变量
classB b = new classB();
// classB.e = 2;//需要实例化静态内部类后才能调用非静态变量,像b.e = 2
b.e = 2;
classB.f = 2;//静态内部类的静态变量的调用方式
b.test1();
}
public static class classB{//静态内部类,只能在类内部声明
int e = 1;
static int f = 1;
void test1(){
// a = 2;//不允许访问外部类的非静态成员,但是可以new一个外部类的对象来访问
d=4;//可以访问外部类的静态成员
}
}
public class classC{
static int e = 1;//可以定义一个静态成员变量
int f =1;
public static void test4(){//可以创建静态方法
System.out.println(11);
}
public void test3(){
a = 2;//普通内部类可以直接访问外部类的普通成员变量
d= 4;//普通内部类也可以直接访问外部类的静态成员变量
}
}
@Test
public void main() {
classA a = new classA();
classA.classB c = new classA.classB();
// classA.classC d = new classA.classC();//一个普通内部类不能脱离外部类实体被创建
classA.classC d = a.new classC();//可以以这种方式创建,因为普通内部类需要持有对外部类的引用
d.test4();//可以通过实例调用静态方法
classA.classC.test4();//也可以通过”类名.“调用
}
}
静态内部类相对于外部类是独立存在的,在静态内部类中无法直接访问外部类中变量,方法。如果要访问的话,必须new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量,调用静态的方法。
普通内部类作为外部类的一个成员而存在,在普通内部类可以直接访问外部类的属性,调用外部类的方法。
如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象(静态变量和方法除外),使用该对象访问属性或者方法。
如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外部类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性。
如果其他类要访问静态内部类的属性或者方法,直接创建一个静态内部类对象即可。