Java之内部类*

将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类 

  1. 实例内部类:实力内部类所处的位置与外部类成员位置相同,因此也受public private等访问限定符的约束
  2. 静态内部类(static)
  3. 匿名内部类(接口)该类 实现了A接口并且重写了A接口中的方法
  4. 普通内部类(定义在方法里面)
import java.sql.SQLOutput;class OuterClass{//实例内部类class InnerClass {}static class InnerClass2{//静态内部类}
}
interface A{void testA();}
public class Four{public static void main(String[] args) {//以下代码可以认为:有一个类 实现了A接口并且重写了A接口中的方法new A(){@Overridepublic void testA() {System.out.println("哈哈!");}}.testA();//匿名内部类  这个类没有名字}
}

另一种调用写法

A a = new A(){public void testA(){System.out.println("哈哈");}
};
a.testA();

一个类一个字节码文件 

局部内部类的字节码文件命名格式为:外部类名字$数字内部类名字.class

 1.实例内部类

1.如何获取实例内部类对象?

OuterClass outerClass = new OuterClass();//实例化外部类对象

OuterClass.InnerClass  innerClass = outerClass.new InnerClass();//外部类.内部类来获取类型 

2.在实例内部类中,是否可以定义静态的成员变量?

public static int data7 = 7;//这样是不行的   这是不依赖于任何对象的,不能放在依赖于外部类对象创建的内部类中

public static final int data6 = 6;这样是可以的  final修饰的是常量 不需要类加载,编译的时候就知道是常量

(类加载的时候不会加载普通的成员变量,实例内部类中又存在static,而static是在类加载的时候创建的)

3.当外部类中的数据成员和内部类中的数据成员一样的时候,要想访问外部类的成员           OuterClass.this.

     在实例内部类当中,是包含外部类的this的(两个this)

import java.sql.SQLOutput;class OuterClass{private int data1 = 1;private int data2 = 2;public static int data3 = 3;//实例内部类/普通的成员内部类class InnerClass {public int data1 = 1111;public int data4 = 4;private int data5 = 5;//public static int data6 = 6;public static final int data6 = 6;public void test(){System.out.println(this.data1);//1111   加不加this都一样System.out.println(OuterClass.this.data1);System.out.println(data2);//外部类中的任何成员都可以在实例内部类方法中直接访问System.out.println(data4);System.out.println(data5);System.out.println("内部类的test方法");}}public void test(){System.out.println("外部类的test方法");InnerClass innerClass = new InnerClass();System.out.println(innerClass.data4);}
}
//如何获取实例化内部类对象
public class Four{public static void main(String[] args) {OuterClass outerClass = new OuterClass();OuterClass.InnerClass  innerClass = outerClass.new InnerClass();
//获取实例内部类对象的时候  依赖于外部类对象//OuterClass.InnerClass  innerClass = new OuterClass().new InnerClass();innerClass.test();}
}

2.静态内部类

1.如何获取静态内部类对象?创建静态内部类对象时,不需要创建外部类对象

OuterClass outerClass = new OuterClass();
OuterClass.InnerClass  innerClass = new OuterClass.InnerClass();

2.如何在静态内部类当中 访问外部类的非静态的数据成员?

OuterClass outerClass = new OuterClass();
System.out.println(outerClass.data1);
在静态内部类中只能访问外部类中的静态成员!!!!!
class OuterClass{private int data1 = 1;private int data2 = 2;public static int data3 = 3;static class InnerClass {public int data1 = 111;public int data4 = 4;private int data5 = 5;public static int data6 = 6;public void test(){OuterClass outerClass = new OuterClass();System.out.println(outerClass.data1);System.out.println(data3);System.out.println(data4);System.out.println(data5);System.out.println(data6);System.out.println("内部类的test方法");}}}public class Four{public static void main(String[] args) {OuterClass.InnerClass  innerClass = new OuterClass.InnerClass();innerClass.test();}
}

3.局部内部类:

定义在方法的内部,不能被访问限定符修饰

并且只能在该方法体内部使用,其他位置都不能用

public class Four{//局部内部类public void func(){class Inner{public int data1 = 1;}Inner inner = new Inner();System.out.println(inner.data1);}
}

4.匿名内部类 

interface A{void test();}
public class Four{public static void main(String[] args) {int val = 10;val = 100;//错的A a = new A(){@Overridepublic void test() {//默认在这里能够访问的是被final修饰的System.out.println("值:"+val);//会报错  在匿名内部类当中,能够访问的是没有被修改过的数据----》变量的捕获}};a.test();}
}

使用频率:静态   匿名  实例  局部!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马Java面试教程_P3_框架

系列博客目录 文章目录 系列博客目录前言1.Spring1.1 Spring框架中的单例bean是线程安全的吗?面试文稿 1.2 什么是AOP,你们项目中有没有使用到AOP?Spring中的事务是如何实现的?总结面试文稿 1.3 Spring中事务失效的场景有哪些总结面试文稿 1…

VK11\VK12保存增强

VK11\VK12保存增强 一、 VK11\VK12保存增强 事务码VK11、VK12创建和修改条件记录时,点击保存时修改其中的条件 二、增强步骤 通过查找,对应的BADI:SD_COND_SAVE_A 通过SE19创建BADI:ZSD_COND_SAVE_A修改函数CONDITION_SAVE_E…

使用pandas把数据库中的数据转成csv文件

使用pandas把数据库中的数据转成csv文件 1、效果图 2、流程 1、连接数据库,获取数据 2、把一些中文字符转成gbk,忽略掉无法转化的 3、把数据转成csv 3、代码 import pymysql import pandas as pddef get_database(databasename):

急需升级,D-Link 路由器漏洞被僵尸网络广泛用于 DDoS 攻击

僵尸网络活动增加 :新的“FICORA”和“CAPSAICIN”僵尸网络(Mirai 和 Kaiten 的变体)的活动激增。 被利用的漏洞 :攻击者利用已知的 D-Link 路由器漏洞(例如 CVE-2015-2051、CVE-2024-33112)来执行恶意命…

Linux SVN下载安装配置客户端

参考: linux下svn服务器搭建及使用(包含图解)_小乌龟svn新建用户名和密码-CSDN博客 1.ubuntu安装svn客户端 “subversion” sudo apt-get update sudo apt-get install subversion 查看安装的版本信息,同时看是否安装成功 s…

MM-2024 | 智能体遇山开路,遇水架桥! ObVLN:突破障碍,受阻环境中的视觉语言导航

作者:Haodong Hong, Sen Wang, Zi Huang 单位:昆士兰大学 论文链接:Navigating Beyond Instructions: Vision-and-Language Navigation in Obstructed Environments (https://dl.acm.org/doi/pdf/10.1145/3664647.3681640) 代码链接&#…

远程命令执行之基本介绍

一.远程命令执行漏洞 1.命令执行 命令执行是指计算机程序接受用户输入的命令,并按照命令的要求执行相应的操作。命令可以执行各种操作,例如读取文件、创建文件、修改文件、运行程序、删除文件等。 命令执行通常是通过一个命令行界面或终端窗口进行的。在…

ReactiveStreams、Reactor、SpringWebFlux

注意: 本文内容于 2024-12-28 21:22:12 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:ReactiveStreams、Reactor、SpringWebFlux。感谢您的关注与支持! ReactiveStreams是…

Android笔试面试题AI答之Android基础(8)

Android入门请看《Android应用开发项目式教程》,视频、源码、答疑,手把手教 文章目录 1.Android新建工程需要注意的地方有哪些?**1. 选择合适的项目模板****2. 配置项目基本信息****3. 选择最低 SDK 版本****4. 配置构建工具****5. 选择编程…

【阻塞队列】- ArrayBlockingQueue 的原理-迭代器

文章目录 1. 前言2. 迭代器3. Itrs3.1 参数3.2 迭代器 Itr3.2.1 参数3.2.2 构造器3.2.3 hasNext3.2.4 next3.2.5 remove3.2.6 shutdown3.2.7 removedAt3.2.8 takeIndexWrapped 3.3 doSomeSweeping(tryHandler)3.4 register3.5 takeIndexWrapped3.6 remov…

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中,其指令、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号,表示地址位置,有些指令前面可能会有标…

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言:**本节内容介绍使用C/C访问数据库, 包括对数据库的增删查改操作。 主要是学习一些接口的调用, 废话不多说, 开始我们的学习吧! ps:本节内容比较容易, 友友们放心观看哦! 目录 准备mysql…

华为配置 之 RIP

简介: RIP(路由信息协议)是一种广泛使用的内部网关协议,基于距离向量算法来决定路径。它通过向全网广播路由控制信息来动态交换网络拓扑信息,从而计算出最佳路由路径。RIP易于配置和理解,非常适用于小型网络…

1.GPU简介及英伟达开发环境配置

前言 This book shows how, by harnessing the power of your computer’s graphics process unit (GPU), you can write high-performance software for a wide rangeof applications.Although originally designed to render computer graphics ona monitor (and still used…

电脑cxcore100.dll丢失怎么办?

电脑运行时常见问题解析:应对DLL文件丢失、文件损坏与系统报错的实用指南 在数字时代,电脑已成为我们工作、学习和娱乐不可或缺的工具。然而,正如任何精密机械都可能遇到故障,电脑在运行过程中也难免会遇到各种问题,如…

【无线传感网】时间同步技术

文章目录 时间同步模型时钟模型1. 节点本地时钟模型2. 节点逻辑时钟模型 通信模型1. 单向报文传递2. 双向报文交换3. 广播参考报文4. 参数拟合技术 时钟同步的误差来源 时间同步协议时钟同步的类别1. 时钟速率同步与偏移同步2. 同步期限:长期同步与按需同步3. 同步范…

C# 实用工具分享(1)

大家好,今天分享一些在开发过程中比较实用的工具。 首先在软件开发的过程中不可避免的要使用截图这样的功能,以前这样的功能我自己也是选择开发出新功能。但是自己开发还是非常费时费力的,并且效果也不一定特别好。 于是我找到了一个现成的…

积分图(Integral Image)与均值滤波的快速实现

积分图(Integral Image)也称为求和图(Summed Area Table),是一种用于快速计算图像中任意矩形区域像素值总和的技术。 基本概念 积分图的每个位置(i, j)存储的是从图像左上角(1, 1)到当前位置(i, j)所有像素值的累积和…

curl+openssl 踩坑笔记

curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …

[AI] 深度学习的“黑箱”探索:从解释性到透明性

目录 1. 深度学习的“黑箱”问题:何为不可解释? 1.1 为什么“黑箱”问题存在? 2. 可解释性研究的现状 2.1 模型解释的方法 2.1.1 后置可解释性方法(Post-hoc Explanations) 2.1.2 内在可解释性方法(I…