1. java外部类怎么调用内部类的方法
首先,你要搞清楚静态方法跟非静态方法的区别:
非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。
静态方法是不受制于类的实例化对象的,即静态方法从程序开始运行到最后释放内存结束是一直存在的,它的生命周期就是程序的生命周期。
从以上可知,静态方法调用非静态方法会造成一个问题,就是生命周期的不一致,比如说:程序刚刚开始运行时,类的实例化构造函数还没有执行,这时静态方法是调用不了非静态方法的;或者当实例化对象消亡之后,静态方法也是不能够去调用非静态方法的。
静态方法要想调用非静态方法,必须要通过实例化对象去调用;当然也可以把非静态方法变成静态方法,这样就不存在任何障碍了。
希望我的回答对你能够有所帮助。
2. Java里什么叫内部类什么叫外部类
在Java中,将一个类定义在另一个类内部,这个内部的类被称为内部类,而包含内部类的外部类则被称为外部类。例如:
class A {
class B {}
B b = new B();
A a = new A();
}
外部类调用内部类非常简单,因为内部类的对象是在外部类中定义的,因此可以直接使用内部类对象的引用。不过需要注意的是,只能访问public级别的成员。例如:
A a = new A();
A.B b = a.new B();
在内部类中调用外部类也很简单,直接使用外部类名即可。内部类可以访问外部类的所有成员,包括private的数据和方法。例如:
class A {
class B {
void method() {
System.out.println("内部类访问外部类的成员");
}
}
private String data = "外部类私有数据";
void access() {
B b = new B();
b.method();
System.out.println(data);
}
}
值得注意的是,想要创建内部类的对象,必须有一个外部类的实例的引用。例如:
A a = new A();
A.B b = a.new B();
如果尝试在外部类外部直接创建内部类对象,例如:
B b = new B();
这是不允许的。必须先创建外部类的实例,然后通过外部类实例创建内部类对象。例如:
A a = new A();
A.B b = a.new B();
当然,在外部类内部可以直接创建内部类对象,例如:
class A {
class B {}
B b = new B();
}