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…

自动化办公-将 Excel 的 Sheet 页拆分成单独的 Excel 文件

在日常的数据处理工作中,很多时候我们会遇到一个包含多个工作表(Sheet)的 Excel 文件,可能需要将每个工作表分别保存为独立的 Excel 文件。手动进行这种操作非常繁琐且易出错,但借助 Python 中的 pandas 库&#xff0c…

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

Scrapy和Selenium结合使用完整步骤

Scrapy和Selenium结合使用完整步骤 一、环境安装 1. 安装Scrapy 在命令行执行以下指令: pip install scrapy2. 安装Selenium pip install selenium3. 安装scrapy_selenium pip install scrapy_selenium4. 安装 chrome-headless-shell 和 chromedriver 打开ch…

webpack打包node后端项目

webpack打包后端项目 后端项目写好了,感觉也可以打包一下,然后就想到了用webpack试试 先要下载webpack和webpack-cli npm install webpack webpack-cli然后创建webpack配置文件webpack.config.js 核心配置为entry、output、target 但是因为咱们是后…

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…

《SwiftUI 实现点击按钮播放 MP3 音频》

功能介绍 点击按钮时,应用会播放名为 yinpin.mp3 的音频文件。使用 AVAudioPlayer 来加载和播放音频。 关键点: 按钮触发:点击按钮会调用 playAudio() 播放音频。音频加载:通过 Bundle.main.url(forResource:) 加载音频文件。播…

华为配置 之 RIP

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

每日一题 371. 两整数之和

371. 两整数之和 class Solution { public:int getSum(int a, int b) {int flag 0;int ans 0;for(int i0;i<32;i){int num1 a & 1;int num2 b & 1;int temp;if(num1 1 && num2 1 && flag 1){temp 1;flag 1 ;}else{if(num11 && nu…

Android 14.0 系统限制上网系列之iptables用IOemNetd实现app上网黑名单的实现

1.前言 在14.0的系统rom定制化开发中,对于系统限制网络的使用,在system中netd网络这块的产品需要中,会要求设置屏蔽某个app上网的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现app上网黑名单的的相关功能,就是在系统中只能不允许某个app上网,…

深入浅出:事件监听中的适配器模式

1. 为什么需要适配器模式&#xff1f; 在Java的事件监听器设计中&#xff0c;许多接口有多个抽象方法。例如&#xff0c;MouseListener 接口有 5 个方法&#xff0c;KeyListener 接口有 3 个方法。如果我们只关心其中的一个方法&#xff08;例如&#xff0c;鼠标点击事件&…