返回顶部
首页 > 资讯 > 精选 >Java内部类都有哪些
  • 846
分享到

Java内部类都有哪些

2023-06-17 05:06:20 846人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关Java内部类都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类分为: 成员内部类、局部内部类

这期内容当中小编将会给大家带来有关Java内部类都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。

内部类分为: 成员内部类、局部内部类 、 静态嵌套类 、匿名内部类

1.成员内部类

成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:

class Outter {     private int age = 12;      class Inner {         private int age = 13;         public void print() {             int age = 14;             System.out.println("局部变量:" + age);             System.out.println("内部类变量:" + this.age);             System.out.println("外部类变量:" + Out.this.age);         }     } }  public class test1 {     public static void main(String[] args) {         Outter out = new Outter();         Outter.Inner in = out.new Inner();         in.print();     } }

运行结果:

局部变量:14
内部类变量:13
外部类变量:12

从本例可以看出:成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法, 即使是private的 。虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:

class Outter {     private int age = 12;     public Outter(int age) {         this.age = age;         getInInstance().print();   //必须先创建成员内部类的对象,再进行访问!     }      private Inner getInInstance() {         return new Inner();     }     class Inner {         public void print() {             System.out.println("内部类没同名,所以直接调用外部类成员变量:" + age);         }     } }  public class test1 {     public static void main(String[] args) {         Outter out = new Outter(10);     } }

运行结果:

内部类没同名,所以直接调用外部类成员变量:10
内部类可以拥有 private访问权限、protected访问权限、public访问权限及包访问权限 。

比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问; 如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。

这一点和外部类有一点不一样, 外部类只能被public和包访问两种权限修饰 。

我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。要注意的是,成员内部类不能含有static的变量和方法。 因为成员内部类需要先创建了外部类,才能创建它自己的

2.局部内部类

局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

定义在方法里的内部类:

class Outter {    private int age = 12;      public void Print(final int x) { //这里局部变量x必须设置为final类型!         class Inner {             public void inPrint() {                 System.out.println(x);                 System.out.println(age);             }         }         new Inner().inPrint();     }  }  public class test1 {     public static void main(String[] args) {         Outter out = new Outter();         out.Print(10);     } }

运行结果:

10
12

本例中我们将内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去调用内部类方法。如果此时我们需要往外部类的方法中传入参数,那么外部类的方法形参必须使用 final 定义。

换句话说,在方法中定义的内部类只能访问方法中final类型的局部变量,这是因为在方法中定义的局部变量相当于一个常量,它的生命周期超出方法运 行的生命周期,由于局部变量被设置为final,所以不能再内部类中改变局部变量的值。(这里看到网上有不同的解释,还没有彻底搞清楚==)

定义在作用域内的内部类:

class Outter { private int age = 12; public void Print(final boolean x) { //这里局部变量x必须设置为final类型!      if(x){        class Inner {                  public void inPrint() {                      System.out.println(age);                  }              }        new Inner().inPrint();      }           } }  public class test1 {     public static void main(String[] args) {         Outter out = new Outter();         out.Print(true);     } }

运行结果: 12

3.静态嵌套类

又叫静态局部类、嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以 直接引用outer.inner ,即不需要创建外部类,也不需要创建内部类。

class Outter {   private static int age = 12;   static class Inner {         public void print() {             System.out.println(age);         }     } }  public class test1 {     public static void main(String[] args) {      Outter.Inner in = new Outter.Inner();         in.print();     } }

运行结果:

12

可以看到,如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性。

其次,因为内部类被静态化,因此Outter.Inner可以当做一个整体看,可以直接new 出内部类的对象( 通过类名访问static,生不生成外部类对象都没关系

4.匿名内部类

匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。下面这段代码是一段Android事件监听代码:

scan_bt.setOnClickListener(new OnClickListener() {             @Override             public void onClick(View v) {                 // TODO Auto-generated method stub              }         });          history_bt.setOnClickListener(new OnClickListener() {                   @Override             public void onClick(View v) {                 // TODO Auto-generated method stub              }         });

这段代码为两个按钮设置监听器,这里面就使用了匿名内部类。具体位置是这段:

new OnClickListener() {               @Override             public void onClick(View v) {                 // TODO Auto-generated method stub              }         }

代码中需要给按钮设置监听器对象,使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,但是前提是这个父类或者接口必须先存在才能这样使用。当然像下面这种写法也是可以的,跟上面使用匿名内部类达到效果相同:

private void setListener() {     scan_bt.setOnClickListener(new Listener1());           history_bt.setOnClickListener(new Listener2()); }  class Listener1 implements View.OnClickListener{     @Override     public void onClick(View v) {     // TODO Auto-generated method stub      } }  class Listener2 implements View.OnClickListener{     @Override     public void onClick(View v) {     // TODO Auto-generated method stub      } }

这种写法虽然能达到一样的效果,但是既冗长又难以维护,所以一般使用匿名内部类的方法来编写事件监听代码。同样的, 匿名内部类也是不能有访问修饰符和static修饰符的 。

匿名内部类是一种没有构造器的类 。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于 接口回调 。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

上述就是小编为大家分享的Java内部类都有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Java内部类都有哪些

本文链接: https://lsjlt.com/news/287254.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java内部类都有哪些
    这期内容当中小编将会给大家带来有关Java内部类都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类分为: 成员内部类、局部内部类...
    99+
    2023-06-17
  • java内部类有哪些
    java中的内部类有:1.常规内部类,没有使用static关键字修饰且定义在外部类中的类体;2.局部内部类,在方法体或语句块内部定义的类体;3.静态内部类,使用static关键字修饰的类体;4.匿名内部类,类的定义与创建同时完成的类体;ja...
    99+
    2024-04-02
  • java中内部类的类型有哪些
    java中内部类的类型有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式...
    99+
    2023-06-14
  • java内部类面试题有哪些
    这篇文章给大家分享的是有关java内部类面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MV...
    99+
    2023-06-14
  • java内部类的作用有哪些
    Java内部类是定义在其他类内部的类。它的作用有以下几个:1. 封装:内部类可以访问外部类的私有变量和方法,实现了封装的概念,可以将...
    99+
    2023-09-26
    Java
  • Java内部类的特性有哪些
    Java内部类的特性有以下几点:1. 内部类可以访问外部类的成员变量和方法,包括私有成员。2. 外部类可以访问内部类的私有成员。3....
    99+
    2023-09-26
    Java
  • java 中内部类的作用有哪些
    本篇文章为大家展示了java 中内部类的作用有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 java 内部类的详解及实例内部类的存在意义:每个内部类都能独立地继承自一个(接口的)实现...
    99+
    2023-05-31
    java 内部类
  • java中内部类有哪些访问规则
    本篇文章为大家展示了java中内部类有哪些访问规则,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式...
    99+
    2023-06-14
  • java匿名内部类的特点有哪些
    Java匿名内部类的特点包括以下几点:1. 匿名内部类没有显式的类名,它是一个直接在代码中定义的类。2. 匿名内部类通常是作为接口的...
    99+
    2023-10-07
    java
  • java内部类的使用场景有哪些
    Java内部类的使用场景有以下几种:1. 封装性:内部类可以访问外部类的私有成员,可以用于实现一些封装的功能。2. 实现多继承:内部...
    99+
    2023-08-09
    java
  • C#中有哪些内部类
    这期内容当中小编将会给大家带来有关C#中有哪些内部类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C#内部类,包括介绍instance方法和private方法...
    99+
    2023-06-17
  • java内部类中的使用易错点有哪些
    小编给大家分享一下java内部类中的使用易错点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适...
    99+
    2023-06-14
  • java成员内部类的注意事项有哪些
    1. 成员内部类不能有静态成员(静态字段、静态方法),除非静态成员是final和static的常量。2. 成员内部类可以访问外部类的...
    99+
    2023-09-26
    java
  • java单例静态内部类的优点有哪些
    Java单例静态内部类的优点包括:1. 延迟加载:通过静态内部类的方式创建单例对象,只有当第一次使用时才会加载内部类。这样可以在多线...
    99+
    2023-10-11
    java
  • java中操作字符串都有哪些类
    在java 中操作字符串有:1.String;2.StringBuffer;3.StringBuilder在java中操作字符串有:String、StringBuffer、StringBuilder,其中String声明的是不可变的对象,每...
    99+
    2024-04-02
  • java都有哪些容器
    本篇内容主要讲解“java都有哪些容器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java都有哪些容器”吧!java容器有:ArrayList、LinkedList、Vector、HashSe...
    99+
    2023-06-20
  • Java中String类的常用方法都有哪些
    Java中String类的常用方法:indexOf():返回指定字符的索引。charAt():返回指定索引处的字符。replace():字符串替换。trim():去除字符串两端空白。split():分割字符串,返回一个分割后的字符...
    99+
    2024-04-02
  • java静态内部类实现单例的好处有哪些
    Java静态内部类实现单例的好处包括:1. 懒加载:静态内部类只有在使用时才会被加载,因此能够实现延迟加载的效果。这种方式不会在单例...
    99+
    2023-10-12
    java
  • Python内置函数都有哪些
    本篇文章为大家展示了Python内置函数都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python 内置函数最全汇总1 abs()绝对值或复数的模In [1]: abs(...
    99+
    2023-06-02
  • Java内部类与匿名内部类
    目录一、内部类什么是内部类成员内部类访问特点二、匿名内部类前提格式使用方式一、内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。 成员...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作