java中的非静态内部类和静态内部类

java学习笔记32:内部类:静态和非静态内部类、匿名内部类、方法内部类 一、内部类 内部类(innerclasses):把一个类放在另一个类的内部定义      内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。 注意   内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Outer的外部类和其内部定义的名为In... 阅读详情

内部类:定义在一个类的成员位置,和成员变量以及成员方法所在的位置是一样的,在位置上它们时平行的。

Class Outer{
    //成员变量
    private int num=10;

    //成员方法
    public void method(){
        Inner i=new Inner();
        i.function();
    }    

    //内部类
    class Inner{
        public void function(){
            System.out.println(num);
        }
    }
}

非静态内部类:没有用static修饰的内部类

由于内部类定义在外部类的成员位置,当我们想使用内部类时,必须要有一个外部类的对象(调用成员方法和成员变量时也是如此)。而我们对类的使用最常见的就是实例化类的对象,所以实例化内部类对象的语法为:

//new Outer()是先实例化一个外部类的对象,当这个对象想使用内部类时,要加上".",
//然后再用new Inner()实例化内部类的对象
new Outer().new Inner();

 如同类中的方法能够访问类中所有的成员变量,内部类中可以直接访问外部类的成员,包括私有成员。

关键:内部类与外部类的方法处于平等的位置

 

静态内部类:用static修饰的内部类

静态内部类用了static修饰,所以静态内部类是属于外部类的,而不是属于外部类的对象,所以我们在创建静态内部类的对象时,不用先创建外部类的对象,而可以直接创建静态内部类的对象,语法为:

//这样写还是错误的,因为内部类是属于外部类的,所以内部类的全名应该是:外部类.内部类
//new Inner();
new Outer.Inner();   

由于静态内部类是属于外部类的而不是属于外部类的对象,所以在静态内部类中不能访问外部类的非静态成员,只能访问外部类的静态成员。

 

局部内部类:加了局部两个字,说明它是定义在方法体中的内部类。出了方法便不可见了

class Outer{
    public void function(){

        //Inner i=new Inner();    //在声明局部内部类之前是无法实例化局部内部类对象的

        //将类定义在方法体中,这个类就是局部内部类
        class Inner{
            public void method(){
                System.out.println("method");
            }
        }

        //只能在声明了局部内部类之后才能实例化其对象,并调用类中的方法
        Inner i=new Inner();
        i.method();
    }
}

 

匿名内部类:可以把匿名内部类看成是一个没有名字的局部内部类,所以匿名内部类也必须定义在方法体中。由于匿名内部类                           没有名字,我们无法在其定义之后实例化它的对象,所以必须在定义匿名内部类的时候就创建它的对象。

格式:
          new 类/接口(){
             如果是创建了继承这个类的子类对象,我们可以重写父类的方法
             如果是创建了实现这个接口的子类对象,我们必须实现这个接口的所有方法
         };

原理:创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象

//先创建一个接口
interface Inner{
    public void function();
}

class Outer{
    public void method(){
       
        /*
            由于匿名内部类没有名字,所以我们无法在创建完匿名内部类以后实例化其对象,
            只能在定义匿名内部类时就创建他的对象。
            但是这样的话我们只在定义这个类的时候调用他的方法,在后面再想调用其方法时就没办法了。
            好在java给我们提供了转型机制,我们可以用匿名内部类实现一个接口或者继承一个类,然后用
            这个类的引用去接收匿名内部类的对象。这样一来我们就可以在匿名内部类中重写父类的方法,
            或者是实现接口的所有方法。            

       new inner() {

			@Override
			public void function() {
				 System.out.println("function");
			   }
		    }.function();
        */

       Inner i=new Inner(){
            public void function(){
                System.out.println("function");
            }
        };   

        i.function();
        i.function();
    }
}

 

总结外部类与内部类(静态内部类,非静态内部类,匿名内部类,方法内部类) 算算学习Java也有两个多月了,但是对于Java中这个类那个类的着实有点分不清,平时写代码也不常用。主要还是脑子不太好使,对于网上铺天盖地的定义实在是理解不了,所以就自己整理了一下,每个都附上一段小例子助于理解。 首先要了解什么是内部类和外部类: 外部类 这是一个相对与内部类的概念,如果一个类中嵌套了另一个类,我们就叫他外部类 内部类 将一个类的定义写在另一个类的定义内部就叫内部类(Inner Class)也可以称为嵌套类(Nested Class)。 class Outer{//外部类 privat 阅读详情

相关推荐

java 四种内部类和内部接口

/** * 常规内部类:常规内部类没有用static修饰且定义在在外部类类体中。 * 1.常规内部类中的方法可以直接使用外部类的实例变量和实例方法。 * 2.在常规内部类中可以直接用内部类创建对象 */ publicclassMyOuter { privateintx =100; ...

1316

静态内部类和非静态内部类区别

fj_ding的专栏 333

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

Java基础面试总结

Java 基础面试题(基本知识,反射,异常,IO。。。)

zhhongying的博客 513

机械臂视觉抓取避坑指南:如何正确计算手眼标定矩阵(附Numpy代码)

本文详细解析了机械臂视觉抓取中手眼标定矩阵的计算方法,特别针对'眼在手上'配置下的常见错误提供了解决方案。通过Numpy代码示例和坐标转换原理,帮助开发者避免矩阵计算错误和坐标转换偏差,提升工业自动化系统的精度和效率。

weixin_29081703的博客 243

毕业设计——基于卷积神经网络的高速公路团雾智能识别系统设计与实现(数据集+源码+可视化+综述)

同时,也可以结合其他技术,如雷达、红外传感器等,实现多源信息的融合与协同处理,提高系统的可靠性和稳定性。实验结果表明,该系统能够实现对高速公路团雾的准确、快速识别,为高速公路的安全运行提供了有力保障。团雾作为一种常见的气象现象,具有突发性、局地性和消散迅速的特点,对高速公路的行车安全构成严重威胁。通过设计合适的网络结构,如增加卷积层、池化层等,实现对图像中团雾特征的自动学习和提取。预处理:对采集到的图像进行去噪、增强等预处理操作,以提高图像质量,降低后续处理的难度。读取数据,随机分为训练集和验证集。

abackcab的博客 665

非静态内部类

使用静态内部类 定义内部类非常简单,只要把一个类放在另一个类内部定义即可。此处的“类内部”包括类中的任何位置,甚至在方法中也可以定义内部类(方法里定义的内部类被称为局部内部类) public class Cow { private double weight; //外部类的两个重载构造器 public Cow(){ } public Cow(double weight){ t

xiao_chainiao的博客 1365

STK传感器配置全攻略:从光学到雷达的7种视场类型详解(附避坑指南)

本文详细解析了STK软件中传感器的7种视场类型,从基础的Simple Conic、Complex Conic到高级的SAR与EOIR,提供了完整的配置步骤与实战避坑指南。重点阐述了雷达、光学等不同物理设备的建模选择逻辑,并针对常见的“No Access”等报错问题给出了系统性的排查方案,帮助工程师高效完成卫星系统设计与任务分析。

weixin_29232507的博客 228

Java 静态内部类 与 内部类区别

静态内部类的作用:只是为了降低包的深度,方便类的使用,静态内部类适用于包含类当中,但又不依赖于外在的类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法一、非静态内部类:1、变量和方法不能声明为静态的。(类的编译顺序:外部类--静态方法或属性--内部类)2、实例化的时候需...

萌萌的雨 8530

Zabbix安装与部署 系统环境:centos7.0

Zabbix安装与部署 系统环境:centos7.0

weixin_42485027的博客 2600

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

Java中的静态内部类和非静态内部类

内部类是定义在另一个类的内部的类。Java允许将一个类嵌套在另一个类中,从而形成内部类。内部类主要用于逻辑分组和增强封装。内部类可以访问外部类的所有成员变量和方法,这为内部类提供了更大的灵活性。静态内部类(Static Nested Class)非静态内部类(Inner Class)局部内部类(Local Inner Class)匿名内部类(Anonymous Inner Class)本文主要讨论静态内部类和非静态内部类。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

YOLOv8改进 | 主干篇 | 利用MobileNetV1替换Backbone(轻量化网络结构)

本文给大家带来的改进机制是MobileNetV1,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其引入了两个简单的全局超参数,用于在延迟和准确性之间进行有效的权衡。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性,这个模型非常适合轻量化的读者来使用。适用检测目标:轻量化网络结构适合轻量化的读者。

Snu77的博客 3966

关于java中的静态内部类和非静态内部类

最近在做mapreduce的时候突然对内部类有了疑问,于是翻书做测试算是搞明白一些了,记录下来备以后查阅。 ------------------------------------------------------------------------------------------------------------------------------------------- 内部类是

coder_farmer_2015的专栏 2652

两万字硬核指南!Python爬虫requests库从入门到精通:新手也能搞定所有爬取场景(附实战案例+避坑大全)

请求头是客户端发送给服务器的额外信息,比如User-Agent(浏览器类型)、Referer(来源页面)、Cookie(登录凭证)、(编码方式)等。Cookie是服务器存储在客户端的小型文本文件,包含用户的登录凭证、偏好设置等信息。浏览器会在每次请求时自动携带Cookie,服务器通过Cookie识别用户身份。代理IP是一个中间服务器,你的请求先发送到代理IP,再由代理IP发送到目标网站,目标网站只能看到代理IP的地址,看不到你的真实IP。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1496

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java 类中的static_深入浅析Java中Static Class及静态内部类和非静态内部类的不同

java中的类可以是static吗?答案是可以。在java中我们可以有静态实例变量、静态方法、静态块。类也可以是静态的。java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来的类叫外部类。在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以为static。静态内部类和非静态内部类之间到底有什么不...

weixin_35523284的博客 180

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

详述静态内部类和非静态内部类

目录 一.静态内部类 1.在静态方法中 2.在非静态方法中 二.非静态内部类 1.在静态方法中 2.在非静态方法中 三.使用中的注意事项 1.静态内部类只能直接定义在外部类中 2.静态内部类访问成员变量 3.使用范围 4.内部类中使用static 在一个外部类中定义的类称为内部类,内部类可以分为静态和非静态 一.静态内部类 由static修饰的内部类就是静态内部类,以...

ANFO的博客 1204

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

内部类和静态内部类

在一次偶然工作中,发现对类中的内部类和静态内部类的相关知识点有些不明确,因此通过本文章对相关知识点进行一个学习,如果有存在问题,欢迎指出纠正。

Bananaaay的博客 1055

java 静态内部类初始化_Java中内部类的使用总结

1、非静态内部类定义内部类很简单,只要把一个类放在另一个类内部定义即可。public class OuterClass{//此处可以定义内部类}注意:同一个java源文件定义了多个类,它们之间是相互独立的,那种情况不是内部类。内部类做为其外部类的成员,因此可以使用任意访问控制符如private、protected和public修饰。外部类的上一级程序单元是包,所以它只有2个作用域:同一个包和任何位...

weixin_35724999的博客 1767

Java 中的静态成员与内部类

这样,非静态内部类就可以通过这个外部类引用访问外部类的成员,即使这些成员是私有的。这是编译器在背后自动处理的机制,使得非静态内部类能够方便地与外部类进行交互并访问其成员。这清晰地展示了在创建子类对象时,父类和子类的静态成员先加载,然后再进行子类对象的创建过程,包括父类和子类的非静态部分的初始化和构造函数调用。当非静态内部类访问外部类成员时,编译器会在非静态内部类的构造函数中自动添加一个外部类的引用参数。示例,编译器实际上会将。

weixin_69477306的博客 985

什么是静态内部类和非静态内部类呢

静态内部类是在外部类内部,但使用。

chengxuyuan66666的博客 909

【java提高】(18)---静态内部类和非静态内部类

java提高](18)—静态内部类和非静态内部类 定义 放在一个类的内部的类我们就叫内部类。 自己从开发到现在其实用到内部类主要在两个地方会考虑用内部类: 1、使用静态内部类的单例模式 2、将Json字符串转为Bean实体的时候,也考虑创建内部类 其它比如网上说的通过内部类实现多继承,我还没有用过。这篇博客主要将静态内部类和非静态内部类中的成员内部类,至于局部内部类和匿名内部类这边就...

a8892117的博客 312

Java静态内部类和非静态内部类

一、非静态内部类: 1、变量和方法不能声明为静态的。(类的编译顺序:外部类–静态方法或属性–内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解) 2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.B b = new A().new B(); 3、内部类可以引用外部类的静态或者非静态属性或者方法。 二、静态内部类: 1、属性和方法可以声明为静态的或者非静态的...

花江的博客 1838

JAVA学习心得——详述静态内部类与非静态内部类

非静态内部类:1、非静态有名内部类。2、非静态匿名内部类。 静态内部类:1、静态有名内部类。2、静态匿名内部类。 非静态内部类: public class Body{ class Heart { //非静态有名内部类, void work() { System.out.println("bulabula ..."); } } } 如何调用非静态有...

low1101的博客 241
上一篇: java常见的字符串操作
下一篇: java中使用迭代器是出现Exception in thread "main" java.util.ConcurrentModificationException异常
guyue_333
博客等级 码龄10年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值