Java内部类

最新版Node.js下载安装及环境配置教程(非常详细) 选择对应你系统的Node.js版本。 阅读详情

Java内部类

本文将详细的解释内部类,希望和大家交流.

简单的内部类定义形如这样:

class A{

class B{}

}这样的类被称为内部类,又 被称为内隐类.

从简单到深入一步一步的分析内部类的特点.

 

 

class OuterClass

{   static class A //静态内部类

    {   public A( ) 

        { System.out.println("Test$A !"); }    }

    class B  //非静态内部类

    {    public B( )   

         { System.out.println("Test$B !"); }    }

   public void disp( )

    {      

        final int a=10;    int b;

         class C  //成员函数中的局部内部类

         {  public C( )

            {     System.out.println(“in class C a="+a);

                  //System.out.println(b);      

              }

         }

         C c=new C( );

}  

public class Test extends OuterClass

{

   public static void main(String args[])

  {     OuterClass.A a=new OuterClass.A( );

    //建立静态内部类对象

 

 

        B b=new OuterClass( ).new B( );

 

    //建立非静态内部类的对象

    //注意这个OuterClass().new B();相当于生成一个外部类的对象,然后在利用外部类对象生成内部类对象

 

 

        OuterClass t=new OuterClass( );

         t.disp( );

    //通过外部对象调用一个对象方法的形式,新建立了对象C.

  }

}

 

注意在上面的b在运行时会为0,因为是类属性.

 

class OuterClass

       { 

          static class A  {   } //静态内部类

               class B  {   } //非静态内部类

                 public void disp( )

                 {

                    class C{ } //局部内部类

                 }

        }

 

编译后的结果:

 

OuterClass.class

        OuterClass$A.class

        OutClass$B.class

       OuterClass$1$C.class

记住以下几句话:

 

1,一个内部类的对象能够访问创建它的外部类对象的所有属性及方法(包括私有部分)。

//可以闭上眼镜,把这个内部类等同于一个类的一个方法,当然就可以访问这个外部类的

//所有方法和属性,私有方法和属性是属于外部类的,当然也就等同于内部类的.

 

2,对于同一个包中的其它类来说,内部类能够隐藏起来。(将内部类用private修饰即可)

//只有在内部类中,才能定义一个为private类型的class,因为这时编译器已经把这个类看作这个类的成员了,但是在一般使用时,就是所谓的”顶级类时”,不能使用private,只能是public 或者是friendly.

如果要是想保证一个类不产生任何的对象,请在构造函数中,把构造函数声明成private.

3, 内部类可定义在方法中,称为局部内部类,但它只能使用方法中的final常量。

//定义在一个方法内的类,又被成为局部内部类,这个类只能使用在方法中的final常量,注意,这个常量是在一个方法中的,那么能否使用一个类中的常量呢?

当然是可以的,因为类中的常量在在一个方法中是可见的.

//

如果把一个类写在了一个if中,比如这样:

class A{

    int a = 10;

    if(a!=10){

        class B{

            B(){

                System.out.println(a);

            }

        }

    }

}

在编译后会有几个错误呢?

首先那个a没有被定义为final,你有一次上了圈套.

类B同样会被生成出来,只是离开了if域就失效了.

4,内部类可以被定义为抽象类

// abstract 类同样可以在内部类中

5, 非静态内部类不能声明本类的static成员

//只有一个静态的内部类,才可以声明一个static成员,

class A{

    static  class B{

 

       //如果这里不是一个static类,是不可以被声明这个gg方法的.

       static void gg(){

       int a = 100;

       System.out.println(a);

       }

    }

}

 

class aa{

    public static void main(String args[]){

      

    A.B hh = new A.B();

    hh.gg();

   

   

      

    }

}

使用内部类可以非常方便的编写事件驱动程序

这个在写事件驱动时,会有很好的解释.

匿名内部类

在某些情况下,我们只需要内部类的一个对象,那么我们就没有必要给内部类命名,没有名字的内部类我们称为匿名内部类

public class A extends Applet

{     public void init( )

      {  addMouseListener( new B( ) );

      }

      class B extends MouseAdapter

      {      public void mousePressed(MouseEvent me)

             {       showStatus("Mouse Pressed.");         }

       }

}

用匿名内隐类修改:

 

import java.applet.*;

import java.awt.event.*;

import java.awt.*;

public class AnonymousInnerClassDemo extends Applet

{   public void init( )

     {   addMouseListener( new MouseAdapter( )

         {   public void mousePressed(MouseEvent me)

       {  showStatus("Mouse Pressed");   }     }    );

    }

}

下面是一个think in java里的例子

public class Pr{

   

    public Concents cont(){

        return new Concents(){

           

            private int i= 11;

            public int value (){return i;}

        };//这里是有一个逗号

    }

}

这个Contents是通过默认的构造函数产生的,匿名类的产生也就是一个新类向上转型到父类的过程.

那么如果一个父类没有一个默认的构造函数,应该什么办呢?

那就只有调用一个super()了.

class noname{

   

         Warpping wrap(int x){

       

        return new Warpping(x){

           

            public int value(){

               

                return super.value()*47;

            }

        };

    }

    public static void main(String s[]){

       

        noname p = new noname();

        Warpping w = p.wrap(10);

    }

}

 

如果在匿名内部类中用到了外部对象

就必须保证这个外部对象是final的

public class PP{

   

    public DD dest(final String dest, final float price){

       

        return new DD(){

           

            private int cost;

            {

                cost = Math.round(price);

                if(cost>100)

                    System.out.println("Over budget");

            }

        };

    }

    publc static void main(String []arg){

       

        PP h = new PP();

        DD d = h.dest("haha",11.111);

       

    }

}

好了,先写到这,我的邮箱是

flyboy1234@163.com

希望各位java爱好者和我联系,多多交流!

---------------------------------------------------flyboy1234

QT 面试题汇总 一、讲述Qt信号槽机制与优势与不足 优点:①类型安全。需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。 ②松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是那个对象的那个信号槽接收它发出的信号,它只需在适当的时间发送适当的信号即可,而不需要关心是否被接受和那个对象接受了。Qt就保证了适当的槽得到了调用,即使关联的对象在运行时被删除。程序也不会奔溃。 ... 阅读详情

相关推荐

NVIDIA DGX Spark 开发环境深度配置与优化指南

定期系统维护每月执行一次完整的系统更新监控存储空间使用情况,及时清理临时文件定期检查硬件健康状况开发习惯优化使用tmux或screen管理长时间运行的任务配置自动化测试和代码质量检查建立完善的项目文档体系性能调优周期每月重新评估和调整系统参数根据工作负载特点优化容器配置持续监控和记录性能指标DGX Spark作为一个强大的AI开发平台,其真正的价值需要通过精细的环境配置和优化才能充分发挥。本文提供的配置方案和建议均基于实际生产环境经验,旨在帮助开发者构建稳定、高效、可维护的开发环境。

time_days的博客 3691

java内部类

1、局部内部类就是定义在外部类的局部位置上,比如方法内,并且有类名。class Outer {//外部类public void show() {//方法class Inter {//局部内部类} } }2、局部内部类可以访问外部类的所有成员,包括私有成员。class Outer {//外部类//私有变量private void method1() {}//私有方法public void show() {//方法class Inter {//局部内部类//调用外部类私有变量。

qq_65501197的博客 1430

AI 自动生成商业计划书:AIGC 如何助力创业者?

在创业的早期阶段,商业计划书(Business Plan)是至关重要的。它不仅用于吸引投资者、明确发展路径,还能帮助团队对业务模式、市场定位和财务预测有清晰认知。然而,撰写一份高质量的商业计划书往往需要投入大量时间和精力。如今,AIGC(AI Generated Content,人工智能生成内容)技术正在改变这一现状。借助 AIGC,创业者可以更快速、高效地创建商业计划书,并通过 AI 进行优化和数据分析。

2401_82808034的博客 3782

全面掌握 Java 内部类

一直以来以为自己对 java 基础甚是清楚,然而面试时却连内部类和静态内部类的区别都无法回答圆满,so~重新学习一遍,彻底掌握内部类。内部类是一种非常有用的特性,它可以把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,下文中内部类均指非静态内部类。内部类的学习分为以下10个知识点: 1.创建内部类与连接外部类 2.内部类与向上转型 3.局部内部类 4.匿名内部类

yhao的博客 3635

【深度学习】手把手教你在远程服务器上跑 YOLOv3 相关代码(含环境配置)

这篇文章主要记录了如何配置项目环境以及如何在远程服务器上跑 YOLOv3 模型。

作者正在煮茶中... 2384

【MDC开发者课程】MDC功能软件-归控算法介绍

规控算法

博客标题不能为空我也没办法 1844

java new 一个内部类_java内部类

java内部类的几种类型:成员内部类,静态内部类,方法内部类,匿名内部类。成员内部类:成员内部类是类内部的非静态类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。例子如下:运行结果为:访问外部类中的a:99,访问内部类中的b:2成员内部类的使用方法...

weixin_29798379的博客 5241

Android架构中UseCase的设计原则与实战解析

本文深入解析Android架构中UseCase的设计原则与实战应用,探讨其在Domain Layer中的核心作用。通过对比ViewModel的臃肿问题,详细阐述UseCase的无状态原则、单一职责边界等设计铁律,并提供多种实现方式的代码示例,帮助开发者构建更清晰、高效的Android应用架构。

weixin_28432777的博客 431

Java 内部类详解

在 Java 中,我们通常是把不同的类创建在不同的包里面,对于同一个包里的类来说,它们都是同一层次的。但其实还有另一种情况,有些类可以被定义在另一个类的内部,我们把在一个类里面定义的类称为内部类(InnerClass)或嵌套类,把外面定义的类称为外部类(OutClass)或宿主类。也就是说,在类的内部既可以定义成员变量和方法,也可以定义其他的类。public class Outer { // 外部类class Inner { // 内部类// 方法和属性。

流华追梦的专栏 1315

【实战指南】从零构建UNet多分类分割数据集:标注、转换与训练全流程

本文提供了一份从零构建UNet多分类分割数据集的完整实战指南。详细介绍了使用Labelme进行图像标注的核心技巧与规范,并通过Python脚本将标注结果转换为模型可用的VOC格式。最后,指导如何修改经典的PyTorch版UNet代码,以适配自定义数据集并进行训练与测试,帮助读者完成从数据准备到模型训练的全流程。

arduino9maker的博客 288

鸿蒙设备部署轻量级Web服务器NexServer实践

Web服务器作为互联网基础设施的核心组件,其轻量化部署在移动终端领域具有重要实践价值。本文以鸿蒙操作系统为技术载体,深入解析微内核架构如何通过资源隔离和分布式软总线实现服务高可用。重点探讨NexServer这一专为嵌入式场景设计的轻量级服务器,其ARM原生支持特性与15MB级内存占用,在HTTP/2协议处理与WebSocket通信中展现出独特优势。在智能家居控制面板、边缘计算节点等物联网典型场景中,鸿蒙设备结合NexServer的方案相比传统Nginx部署可降低60%资源消耗。通过实测数据对比,该组合在50

weixin_30411239的博客 482

Java内部类可以public吗,Java 内部类

Java 内部类什么是内部类?在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。主要用以下几种成员内部类局部内部类匿名内部类静态内部类Java 成员内部类示例访问权限private 访问权限protected 访问权限public 访问权限package 访问权限public class TestClass {public void a(){LogHelper....

weixin_30247915的博客 2379

Flow Match 原理 及应用

Flow Matching(流匹配)是生成模型的范式革命——用确定性ODE替代随机扩散过程,在自动驾驶轨迹预测中实现10倍采样加速和更高生成质量。更快的采样速度:通常只需 10-50 步就能生成高质量样本更稳定的训练:避免了传统扩散模型中复杂的噪声调度理论基础:基于连续正规化流(Continuous Normalizing Flows)核心思想:Flow Matching 通过学习一个 向量场(vector field) 来直接建模从噪声分布到目标分布的连续变换路径。

@bangbang的博客 102

Java 内部类

当静态内部类对象存在时,并不存在一个被它寄生的外部类对象,静态内部类对象只持有外部类的类引用,没有持有外部类对象的引用。在非静态内部类里可以直接访问外部类的私有成员,是因为在非静态内部类的对象里保存了一个它所寄生外部类对象的引用。当调用非静态内部类的实例方法时,必须有一个非静态内部类的实例,非静态内部类实例必须寄生在外部类实例里。如果把一个内部类放在方法里定义,那这个内部类就是一个局部内部类,局部内部类仅在方法里有效。把 A 类定义在 B 类的内部,A——内部类(嵌套类),B——外部类(宿主类)。

我的博客 1640

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java内部类是什么?Java实例内部类、Java静态内部类、Java局部内部类详解

在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外部类的所有元素的访问权限。内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点。

Itmastergo的博客 233

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java 内部类list_java详解内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。第一次见面内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。public class OuterClass {private String name ;private int age;public String...

weixin_39714835的博客 904

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java的内部类

Java的内部类

weixin_52385232的博客 702

java怎么判断内部类_java-内部类介绍

内部类(Nested Class) 嵌套类:(1)静态内部类(2)非静态内部类:普通内部类(成员内部类):在一个外部类中直接定义的内部类。匿名内部类:方法内部类:在一个方法(外部类中的方法)或代码块中定义的内部类。内部类仍然是一个独立的类,在编译之后内部类会被单独编译成独立的.class文件,但是前面冠以外部类的类名和$符号。内部类可以使用修饰符(public ,protected,default...

weixin_32715349的博客 1264

java声明内部类_java内部类

为什么在Java中需要内部类?总结一下主要有以下四点:1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整,2.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。3.方便编写事件驱动程序4.方便编写线程代码个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。◆Jav...

weixin_35964207的博客 1800

java内部类 子类_Java 内部类

public class TestInnerClass {public static int field = 1;protected int field1 = 2;int field2 = 3;private int field3 = 4;//静态代码块/*static {System.out.println(field);}*/public TestInnerClass(){NorInner n...

weixin_29139581的博客 347

java四种内部类

java四种内部类 成员内部类 静态内部类 局部内部类、 匿名内部类。 1.成员内部类 定义在一个类(外部类)的内部,而且与成员方法、属性平级的类叫成员内部类,…相当于外部类的非静态方法,如果被static修饰,就变成静态内部类了。 public class Person { private int age; private String name; public void run() { System.out.println("run......."); } class User{

罗罗的1024 869

java 内部类对象_JAVA基础——内部类详解

JAVA内部类详解在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用。我们知道内部类可分为以下几种:成员内部类静态内部类方法内部类匿名内部类这里我们先将以这个分类来详细了解各个内部类的情况。然后给内部类作出总结。一、成员内部类内部类中最常见的就是成员内部类,也称为普通内部类。我们来看如下代码:运行结果为:从上面的代码中我们可以看到,成员内...

weixin_35411480的博客 580

java 遍历所有内部类_JAVA-内部类

注意:非内部类(外部类或接口)不能被声明为private(私有的)或protected(受保护的),也不能被static修饰可以被final修饰。这是为何???对于外部类(顶级类)来说,只有两种修饰符:public和默认。因为外部类的上一单元就是包。所以外部内就只有这两种作用域同包(包控制权限)或其他任何地方(公开访问权限)。protected的不同包子类可以访问那是针对属性和方法的。类就两种访问...

weixin_36131782的博客 537

Java中常用的内部类

内部类

m0_74968164的博客 673
上一篇: 初识Java内部类
下一篇: ThreadLocal的相关资料
differ1
博客等级 码龄25年 0粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值