静态局部类和实例局部类的定义、访问控制、约束和引用



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{}
  
 }
 

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值