前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础知识(六)--内部类

Java基础知识(六)--内部类

作者头像
用户7386338
发布2021-05-13 11:34:33
2110
发布2021-05-13 11:34:33
举报
文章被收录于专栏:Java患者

内部类

概述

  • 在类的内部又定义了一个新的类

内部类访问特点

  • 内部类可以直接访问外部类的成员,包括私有.
  • 外部类要访问内部类的成员,必须创建对象
  • 外部类名.内部类名 对象名 = 外部类对象.内部类对象
代码语言:javascript
复制
class Demo1_InnerClass {
 public static void main(String[] args) {
        
  //外部类名.内部类名 = 外部类对象.内部类对象
  Outer.Inner oi = new Outer().new Inner();   //创建内部类对象
  oi.method();

 }
}


class Outer {
 private int num = 10;
 class Inner {
  public void method() {
   System.out.println(num);
  }
 }
}

面试题

要求:使用已知的变量,在控制台输出30,20,10。

代码语言:javascript
复制
class Test1_InnerClass {
 public static void main(String[] args) {
  Outer.Inner oi = new Outer().new Inner();
  oi.show();
 }
}
//要求:使用已知的变量,在控制台输出30,20,10。
//内部类之所以能获取到外部类的成员,是因为他能获取到外部类的引用外部类名.this
class Outer {
 public int num = 10;
 class Inner {
  public int num = 20;
  public void show() {
   int num = 30;
   System.out.println(num);
   System.out.println(this.num);
   System.out.println(Outer.this.num);
  }
 }
}

局部内部类访问局部变量的问题

  • 局部内部类访问局部变量必须用final修饰
代码语言:javascript
复制
public class Test{ 
 public void play() {
  int x=4;
  class InTest{
   public void f() {
    System.out.println(x);
   }
  }
  new InTest().f();
 }
 public static void main(String[] args) {
  Test t=new Test();
  t.play();
  
 }
}

当t.play()方法出栈后,play中的局部变量就会随之销毁,但是我的内部类对象可能仍然存在的(当不再被使用才会被垃圾回收器回收)这时在内部类中访问了局部变量x,但此时的x已经被销毁,形成矛盾.

根本原因 : 内部类的生命周期比局部变量的长

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内部类
    • 概述
      • 内部类访问特点
        • 局部内部类访问局部变量的问题
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档