package e4_23;
public class StaticIntanceLocalDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer o1 = new Outer();
o1.intanceMethod();
o1.staticMethod();//实例名.实例方法
//Outer.staticMethod();//类名.静态方法
//局部类所在代码块和方法体中以外的地方不可见;
//new Outer().new Inner1();
}
}
package e4_23;
public class Outer {
private int x = 1;
private static int y = 2;
//在外部类的实例代码块中定义实例局部类。
{
int x1 = 3;
final int y1 = 4;
//局部实例不能添加访问权限修饰符。
//public class Inner2{}
//实例局部类。
class Inner1{
public void InnerM1(){
x = 11;//实例局部类可以直接访问外部类的成员变量。
Outer.this.y = 22;//可以通过Outer.this的方式访问外部类的成员。
//在实例局部类的所在代码块中,不能访问非final的局部实例变量。
//System.out.println(x1);
//在实例局部类的所在代码块中可以访问final的局部实例变量。
System.out.println("在实例局部类"+Inner1.this+"中访问final变量y1 = "+y1);
System.out.println("在实例局部类"+Inner1.this+"中访问外部类的实例变量x = "+x);
System.out.println("在实例局部类"+Inner1.this+"中访问外部类的静态实例变量y = "+y);
System.out.println("---------------------");
}
}
//只能在方法体中或局部代码快中创建局部类的实例,并且只能在局部域中被访问。
new Inner1().InnerM1();
}
//在外部类的静态代码块中定义静态局部类。
static{
int x2 = 5;
final int y3 = 6;
//静态局部类。
class Inner2{
public Inner2(){
//静态局部类不能访问外部类的实例变量和实例方法。
//x = 111
//intanceMethod();
//静态局部类只能访问外部类的静态变量和静态方法。
y = 222;
staticMethod();
System.out.println("在局部类"+Inner2.this+"中访问外部类的静态变量y = "+y);
System.out.println("---------------------");
}
}
//只能在方法体中或局部代码快中创建局部类的实例,并且只能在局部域中被访问。
new Inner2();
}
//在外部类的实例方法中定义实例局部类,
public void intanceMethod(){
class Inner3{
class Inner4{//实例局部类的嵌套定义。
public Inner4(){
System.out.println("在嵌套实例局部类"+this.getClass()+"访问外部类Outer的静态变量y = "+y);
System.out.println("---------------------");
}
}
}
//局部类只能在其所在代码块和方法域中可见。
//Outer.Inner2 inner2;
new Inner3().new Inner4();
}
static void staticMethod(){
//在外部类的静态方法中定义静态局部类
class Inner5{
public Inner5(){
//静态局部类只能访问外部类的静态方法和静态变量。
y = 2222;
System.out.println("在静态局部类"+Inner5.this+"中访问外部类的静态变量y = "+y);
System.out.println("---------------------");
//静态局部类不能访问外部类的非静态方法和实例变量。
//x = 1111;
}
}
new Inner5();
//接口不能定义成局部类。
//Interface I{}
}
}