千家信息网

Java内部类知识总结

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"Java内部类知识总结",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java内部类知识总结"吧!Java内部类一、 含义在Java编程语
千家信息网最后更新 2026年10月31日Java内部类知识总结

本篇内容主要讲解"Java内部类知识总结",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java内部类知识总结"吧!

Java内部类

一、 含义

  在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。

二、 作用

•实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明为private时,只有外部类可以访问内部类,很好地隐藏了内部类。
•内部类可以继承(extends)或实现(implements)其他的类或接口,而不受外部类的影响。
•内部类可以直接访问外部类的字段和方法,即使是用private修饰的,相反的,外部类不能直接访问内部类的成员。

三、 原理

  内部类是一个编译时的概念,编译后会生成两个独立的class文件,如下:

  public class Outer{    private String outerName = "outer";    class Inner{      private String innerName = "inner";    }  }

  编译后的文件如下图:

  编译后Outer.Inner被重命名为Outer$Inner,句点(.)被替换成了美元符号($)。

四、 分类

  Java内部类可分为成员内部类、局部内部类、匿名内部类、静态内部类。

  1) 成员内部类

    成员内部类可以看成是外部类的一个成员,在成员内部类中无法声明静态成员,但static final字段是个例外。我们知道加载类时,会先初始化静态成员,如果成员内部类有静态成员,那么内部类就会在外部类之前生成,而内部类是为外部类服务的,内部类在外部类之前就生成可能会脱离掌控。在实例化成员内部类时,成员内部类会持有一个外部类当前对象的引用,这样在成员内部类中就可以直接访问外部类的成员,即使是private修饰的。

    import static java.lang.System.out;    public class Outer{    private String outerName = "outer";    //外部类无法直接访问内部类的成员,需要实例化内部类对象    private Inner inner = new Inner();     public class Inner{       private String innerName = "inner";      public void show(){        out.println(outerName); //可以直接访问外部类的成员      }    }    public void show(){       out.println(inner.innerName);      inner.show();    }    public static void main(String[] args){       Outer outer = new Outer();      outer.show();      //实例化内部类      Outer.Inner inner = outer.new Inner();      inner.show();    }  }

  运行结果:

   inner

   outer

   outer

  成员内部类对外部类对象的引用,是通过在this前面加上外部类的名字构成的,这种形式叫作

  限定-this,out.println(outerName)与out.println(Outer.this.outerName)是等价的。

2) 局部内部类

  局部内部类的使用和成员内部类的使用基本一致,只是局部内部类定义在外部类的方法中,就像局部变量一样,并不是外部类的成员。局部内部类在方法外是无法访问到的,但它的实例可以从方法中返回,并且实例在不再被引用之前会一直存在。局部内部类也可以访问所在方法的局部变量、方法参数等,限制是局部变量或方法参数只有在声明为final时才能被访问。  

  import static java.lang.System.out;  public class Outer{    private String outerName = "outer";    public void show(final String str){  //方法参数为final类型      class Inner{        public void print(){          out.println(outerName+str);        }      }      Inner inner = new Inner();      inner.print();    }    public static void main(String[] args){      Outer outer = new Outer();      outer.show(":lalala");    }  }

  运行结果:

   outer:lalala

3) 匿名内部类

  可以把匿名内部类想象成是没有类名的局部内部类,匿名内部类有以下特点:

   1、匿名内部类不能有构造器,匿名内部类没有类名,肯定无法声明构造器。

   2、匿名内部类必须继承或实现一个接口,指定给new的类型为匿名类的超类型,匿名类不能有显示的extends或implements子句,也不能有任何修饰符。

   3、匿名内部类和成员内部类、局部内部类一样,也不能声明静态成员。   

  import static java.lang.System.out;  public class Outer{     private String outerName = "outer";     public void show(final String str){        new Inner(){  //实现了Inner接口           public void print(){              out.println(outerName+str);           }        }.print();     }     public static void main(String[] args){         Outer outer = new Outer();         outer.show(":lalala");      }  }  interface Inner{      void print();  }

  运行结果:

   outer:lalala

4) 静态内部类

  静态内部类,有的书上也称为嵌套类,声明它时需要用static修饰符,静态内部类不同于前三种内部类,静态内部类不会持有外部类当前对象的引用,所以在静态内部类中无法访问外部类的非静态成员,可以这么说,静态内部类不依赖于外部类。 

  import static java.lang.System.out;  public class Outer{    private String outerName = "outer";    private static int id = 123;    private Inner inner = new Inner();    public static class Inner{      public void print1(){        //out.println(outerName); 无法访问外部类的非静态成员        out.println(id);      }      public static void print2(){        out.println(id);      }    }    public void show(){      inner.print1();    }    public static void main(String[] args){      Outer outer = new Outer();      outer.show();      Outer.Inner.print2(); //直接通过类名访问静态内部类    }  }

到此,相信大家对"Java内部类知识总结"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

成员 静态 部类 局部 方法 实例 对象 编译 知识 参数 变量 接口 类名 类型 结果 生成 运行 内容 只有 字段 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 河南云网互联网络科技有限公司 科技服务与互联网 安徽鑫晟辉互联网科技 融贸通互联网科技 太原新华互联网科技学校怎么样 银川新华互联网科技学校地址 博兴的互联网电子科技公司 昭通互联网科技选哪家 搜狐科技互联网 浙南科技城互联网大厦建设工程 世界互联网领先科技成果获奖 为客找房互联网科技公司怎么样 黑云互联网科技有限公司 广州百诚互联网科技有限公司官网 江苏互联网智能科技软件 张召忠谈中国互联网科技 半导体行业属于互联网高科技类吗 吉林省码上互联网科技电话 三亚科技创新互联网基地 互联网科技股 西安纸贵互联网科技有限公司 互联网科技深圳 互联网科技资迅 金融科技与互联网金融 互联网科技咨询 互联网科技公司招聘 互联网金融科技展 互联网公司黑科技创始人 伍佰万互联网科技怎么赚钱
0