java 内部类(匿名类,匿名对象,静态内部类)详解及实例

 更新时间:2016年12月25日 14:41:38   投稿:lqh  
这篇文章主要介绍了java 内部类详解及实例代码的相关资料,需要的朋友可以参考下

内部类的介绍

定义在另外一个类中的类,叫内部类

成员内部类

1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象

2..this 可以通过外部类的类名.this去访问外部类的所有属性和方法。

public class Test1 {

  String name = "asnd";

  public static void main(String[] args) {

    Test1 test1 = new Test1();
    Inner mInner = test1.new Inner();
    mInner.print();
  }

  void show() {
    System.out.println("show");
  }

  public class Inner {

    String name = "123";
    private void print(){
      show();
      System.out.println(name);//打印的是123
      System.out.println(Test1.this.name);//打印的是asnd
    }
  }
}

匿名内部类

没有名字的类,创建类的同时,也会创建一个对象。

只需要用到一次的类,就可以使用匿名内部类

  File file = new File("D:/cc.txt") {

      @Override
      public boolean delete() {
        System.out.println("是否删除y/n");
        Scanner input = new Scanner(System.in);
        String str = input.next();
        if (str.equals("y")) {
          return super.delete();
        }
        System.out.println("删除失败");
        return false;
      }
    };
    file.delete();

  }

匿名对象

该对象只需要访问一次.

new Thread() {

      @Override
      public void run() {
        System.out.println("线程开始!");
        try {
          Thread.sleep(2000);
          System.out.println("线程结束!");
        } catch (Exception e) {
          e.printStackTrace();
        }
        super.run();
      }

    }.start();

静态内部类

1.静态内部类只能访问外部类静态的方法和变量,不能访问非静态。

2.静态内部类可以不需要创建外部类的引用,而直接创建。

匿名内部类访问局部变量

内部类访问局部变量必须final,如果没有加,jdk1.8默认加上去了
当所使用的变量是在变的时候可以用下面的方法,也可以把下面的i在开始的时候定为静态的

for (int i = 0; i < 5; i++) {
      final int finali = i;
      new Thread() {
        public void run() {
          System.out.println(finali);
        };
      }.start();

    }

下面介绍一下内部类的实现技巧

public static void main(String[] args) {
    Lam mLam = new Lam();
    //第一种实现的方法
    mLam.to(new Ligh() {
      @Override
      public void shin() {
        System.out.println("on的第一种方法");
      }
    });
    //第二种实现方法
    class MyLam implements Ligh{

      @Override
      public void shin() {
        System.out.println("第二种");

      }}

    mLam.to(new MyLam());
  }
}

interface Ligh {
  void shin();
}

class Lam {
  public void to(Ligh ligh) {
    ligh.shin();
    System.out.println("on");
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java中的Semaphore信号量使用解析

    Java中的Semaphore信号量使用解析

    这篇文章主要介绍了Java中的Semaphore信号量使用解析,Semaphore 通常我们叫它信号量,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源,需要的朋友可以参考下
    2023-11-11
  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    如何把Spring Cloud Data Flow部署在Kubernetes上

    这篇文章主要介绍了把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Spring boot将配置属性注入到bean类中

    Spring boot将配置属性注入到bean类中

    本篇文章主要介绍了Spring boot将配置属性注入到bean类中,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 通过实例了解java spring使用构造器注入的原因

    通过实例了解java spring使用构造器注入的原因

    这篇文章主要介绍了通过实例了解spring使用构造器注入的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring为何要用三级缓存来解决循环依赖问题

    Spring为何要用三级缓存来解决循环依赖问题

    这篇文章主要给大家介绍了关于Spring为何要用三级缓存来解决循环依赖问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • java算法题解LeetCode30包含min函数的栈实例

    java算法题解LeetCode30包含min函数的栈实例

    这篇文章主要为大家介绍了java算法题解LeetCode30包含min函数的栈实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Java中简单实用Quartz概述

    Java中简单实用Quartz概述

    Quartz是一个开源的Java调度框架,可以用来实现在指定的时间或时间间隔触发任务执行的功能,这篇文章主要介绍了Java中简单实用Quartz,需要的朋友可以参考下
    2023-02-02
  • Windows10系统下JDK1.8的下载安装及环境变量配置的教程

    Windows10系统下JDK1.8的下载安装及环境变量配置的教程

    这篇文章主要介绍了Windows10系统下JDK1.8的下载安装及环境变量配置的教程,本文图文并茂给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot3实战教程之实现接口签名验证功能

    SpringBoot3实战教程之实现接口签名验证功能

    接口签名是一种重要的安全机制,用于确保 API 请求的真实性、数据的完整性以及防止重放攻击,这篇文章主要介绍了SpringBoot3实战教程之实现接口签名验证功能,需要的朋友可以参考下
    2025-04-04
  • Java 添加、更新和移除PDF超链接的实现方法

    Java 添加、更新和移除PDF超链接的实现方法

    PDF超链接用一个简单的链接包含了大量的信息,满足了人们在不占用太多空间的情况下渲染外部信息的需求。这篇文章主要介绍了Java 添加、更新和移除PDF超链接的实现方法,需要的朋友可以参考下
    2019-05-05

最新评论