java面向对象24 内部类(InnerClass)的使用

C++作用域解析符::详解:从基础语法到高级应用 作用域解析是编程语言中管理标识符可见性的核心机制,它通过明确的命名空间划分避免命名冲突,提升代码组织性。在C++中,作用域解析符::是实现这一机制的关键语法,它允许开发者精确访问全局、命名空间、类等不同作用域下的成员。理解::的用法不仅能解决常见的名字遮蔽问题,更是掌握静态成员访问、嵌套类型定义以及模板元编程中类型萃取等技术的基础。在工程实践中,合理使用::能显著提升代码的可读性和可维护性,特别是在大型项目或使用第三方库(如STL、Qt)时,它能帮助开发者清晰地区分不同来源的组件,避免因命名冲突导致的编译错 阅读详情

/*

  • 类成员结构之内部类的使用
  • 1,Java中可以在一个类A中定义一个类B,类A为外部类,类B为内部类,
  • 注意内部类B的类名不能与外部类A重名
  • 成员内部类编译以后生成 外部类名$内部类名.class字节码文件
  • 局部内部类编译以后生成 外部类名$ 数字 内部类名.class字节码文件(加数字为了防止重名)
  • 2,内部类按照声明的位置分为:
  • 成员内部类(静态的与非静态的)
  • 1,作为外部类的成员
  • 可以调用外部类的结构

  • 不同于外部类不能被static修饰,内部类可以声明为static的。

  • 不同于外部类只能用public或缺省权限,内部类可以使用private和protected修饰

  • 2,作为一个类
  • 类内可以有属性,方法,构造器,代码块,内部类

  • 类可以被继承,也可以用final修饰,声明不能被继承

  • 内部类可以是抽象类,可以被abstract修饰

  • 3,成员内部类的使用:
  • 3.1创建成员内部类的变量
  • 静态内部类对象:外部类名.内部类名 变量名 = new 外部类名.内部类名();
  • 非静态内部类对象:需要使用外部类的实例化对象调用创建 外部类名.内部类名 变量名 = 外部实例对象名.new 内部类名();
  • 3.2成员内部类调用外部类结构
  • 调用同名同参方法:

  • 外部类名.this.方法名();
  • this.方法名();
  • 没有同名方法时直接使用 方法名();的方式就可以自动识别
  • 调用同名属性:

  • 外部类名.this.属性名();
  • this.属性名();
  • 没有同名方法时直接使用 属性名 的方式就可以自动识别。
  • 3.3成员内部类使用注意
  • 非static的成员内部类中的成员不能声明为static的,只有在外部类或static的成员内部类中才可声明static成员。(从成员生命周期角度考虑,需要一致)

  • 外部类访问成员内部类的成员,需要“内部类.成员”(静态内部类)或“内部类对象.成员”(非静态内部类)的方式

  • 成员内部类可以直接使用外部类的所有成员,包括私有的数据

  • 当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的(内部类作为外部类的一个结构,与属性方法类似,需要是静态的才能被外部类的静态方法调用)

  • 总结:成员内部类相比外部类可以使用的权限修饰符多了两个,可以声明为静态的,限制为静态内部类不能有非静态结构。
  • 4,局部内部类(定义在构造器,方法体,代码块中,先声明后使用。除此之外的任何地方都不能使用该类)
  • 4.1局部内部类的对象可以通过外部方法的返回值返回使用,返回值类型只能是局部内部类的父类或父接口类型
  • 4.2局部内部类可以使用外部类的成员,包括私有的。
  • 4.3局部内部类和局部变量地位类似,不能使用public,protected,缺省,private
  • 4.4局部内部类不能使用static修饰,因此也不能包含静态成员
  • 4.5局部内部类可以使用外部方法的局部变量,但是必须是final的。由局部内部类和局部变量的生命周期不同所致。
  • 4.6局部内部类可以声明为final和abstract的
  • 总结:局部内部类很少用,限制比成员内部类多。通常用在实现一个接口上。内部只需要重写接口的抽象方法。
  • 5,匿名内部类
  • 5.1匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
  • 5.2匿名内部类必须继承父类或实现接口
  • 5.3匿名内部类只能有一个对象,对象只能使用多态形式引用
  • 5.4匿名内部类的使用格式与父类类和接口的匿名类的使用方法相同。

*/

package object_chapter2;

public class Object_InnerClass {
	static int number = 10;
	int arguments = 20;
	

	public static void main(String[] args) {
		//创建静态成员内部类对象
		Vehicle.Engine e = new Vehicle.Engine();
		System.out.println("发动机有" + e.cylinderNumber + "个汽缸");
		new Vehicle.Engine().work();
		//创建非静态成员内部类对象
		Vehicle v = new Vehicle();
		Vehicle.Room r = v.new Room();//或者v.new Vehicle.Room()
		System.out.println("车里有" + r.chair + "个座位");
		r.reName("车名:五菱之光");
		new Vehicle().new Room().set();	
		v.getInstance().compare(v);
		
	}
		
	public static void method() {
		
		int num = 11;
		//方法体内的局部内部类
		 class InnerClass{
			void show() {
//				num = 12;
				System.out.println(num);//局部内部类的方法中可以调用内部类所在方法的局部变量。不能修改
				//在JDK1.7及以前,局部变量想要被局部内部类调用必须显式的被声明为final类型的,JDK1.8后会自动识别为final的。
				//由于局部内部李生成的字节码文件是独立的,外部类中的变量想要被内部类使用只能是常量,内部类使用的是外部类变量的副本
				//只能使用,无法修改。
			}
			
		}
//		 num++;//final的变量不能修改,否则局部内部类调用时会报错。
	}
	
    public Object_InnerClass() {
    	//构造器中定义的局部内部类
		 class InnerClass{
			
		}		
	}
    
    {
    	//代码块中定义的局部内部类
    	 class InnerClass{
    		
    	}
    }
    
	//静态内部类
	private static final class InnerClass1{
		void method() {
		number = 110;
//		Object_InnerClass.this.arguments = 20;//静态内部类中无法调用非静态结构
	 }
	}
	
	//非静态内部类
	protected class InnerClass2{
		void method() {
			Object_InnerClass.number = 110;
			Object_InnerClass.this.arguments = 20;//非静态内部类中可以调用非静态结构
			}
	}
	
	class InternalClass{
		//内部类中也可以嵌套一个内部类
		class InnerInternalClass{			
		
	    }
	}		
}

class Vehicle{
	static int wheelNumber = 4;
	String name = "号称秋名山之神";
	
	void run() {
		System.out.println("可以在各种路况上跑");
	}
	//静态成员内部类
	static class Engine{
		int cylinderNumber = 4;
		void work() {
			System.out.println("输出200匹马力的动力");
		}
				
	}
	//非静态成员内部类
	class Room{
		//static int chair = 4;//非静态内部类不允许使用静态结构
		int chair = 7;
		String name = "内部空间极大";
		void set() {
			Vehicle.this.run();//内部类可以调取外部类的结构
			carry();//不重名的情况下可以省略前面的部分
			System.out.println("可以坐很多个人");
		}
		
		void reName(String name) {
			System.out.println(name);//调用方法形参
			System.out.println(this.name);//调用内部类属性
			System.out.println(Vehicle.this.name);//调用外部类同名属性
		}
	}
	
	   void carry() {
		System.out.println("能拉人能载货");
		
	}
	//局部内部类的常见场景,方法返回值是一个接口或者抽象类
	 Comparable getInstance() {
		 //创建一个内部类为借口的实现类
		class MyCompareable implements Comparable{

			@Override
			public void compare(Vehicle v) {
				System.out.println("不管什么车都挡不住五菱的光辉!!");				
			}
			
		}
		//返回内部类的实例
//		return new MyCompareable();	
		//方式二,使用匿名内部类
		return new Comparable() {
			
			@Override
			public void compare(Vehicle v) {
				System.out.println("天下无敌");				
			}
		};						
	}				 
}

interface Comparable{
	 void compare(Vehicle v);
}
代码语义检索:基于语义锚点的自然语言代码搜索架构 代码语义检索是一种将自然语言查询精准映射到源码逻辑的技术,其核心在于超越关键词匹配,理解方法意图、业务约束与跨文件依赖关系。它依托AST静态分析提取结构化语义锚点(如能力、约束、依赖、演化四类标签),结合轻量NER识别开发者意图,并动态注入上下文至大模型。相比传统RAG,该方案显著提升跨模块召回准确率与响应实时性,适用于微服务治理、遗留系统理解与自动化Code Review等工程场景。本文详解如何构建可落地的语义锚点+GPT-4.1精排工作流。 阅读详情

相关推荐

Kimi K2.5、GLM 5、M2.7编程模型选型指南:按工程卡点匹配技术底座

大模型在代码生成场景中并非单纯比拼参数量或基准分数,而是围绕长上下文理解、中文工程语义对齐、确定性工具调用三大核心技术维度构建差异化能力。其底层原理分别涉及AST感知分块与动态NTK插值、本地化API映射与中文commit message指令微调、JSON-RPC签名式函数调用与编译器级根因分析。这些能力直接决定模型在金融系统重构、国产中间件适配、等保三级审计等高要求生产环境中的可用性与可维护性。本文聚焦真实研发卡点——如跨文件符号解析失效、方言SQL迁移错误、审计日志不可追溯等典型故障,结合压测数据与上线

dianning8393的博客 421

Kotlin - 内部类、嵌套类、局部类 class

对SAM(单抽接口)一般使用 Lambda 更便捷,当需要重写多个抽象方法时,只能选择匿名对象了。访问外部函数中的局部变量不用加 final(

HugMua的博客 2891

JAVA常见知识

@[TOP] 一,关于main方法的问题 1,main方法传参形式? String 数组,且不能改变 2,mian方法为啥是静态的? main方法一定要是静态的,如果不是jvm就要先实例化它的类。如果是非静态的,就只能作为普通方法使用,虽然可以编译成功,但是运行会失败。 3,main方法可以重载吗? 可以, 4,main方法可以被覆盖吗? 因为其实静态的,所以在jvm编译时静态方法会编译在一起,为...

小爷欣欣 440

Java内部类(Inner Class)详解

简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。1          Static member class(静态成员类)类声明中包含“static”关键字的内部类。如以下示例代码,Inner1/Inner2/Inne

FTK's Blog 1232

Gemini国内合规接入指南:API身份链构建与镜像站选型

生成式AI服务接入本质是服务可用性工程,而非单纯网络连通问题。理解大模型API调用原理,关键在于掌握身份认证、权限控制与数据流向三大技术要素。Gemini作为主流多模态模型,其国内可用路径已从‘模拟访问’转向‘能力映射’——聚焦文本生成等核心能力的稳定调用。通过构建七步Google Cloud身份链(含+86实名、国际信用卡核验、Service Account最小权限配置),可实现99.2%高成功率的合规API接入;而教育型、企业型、开发者型三类镜像站则提供差异化过渡方案,均需满足端到端加密、境内CDN托管

weixin_29046035的博客 432

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

内部类可以访问外部类的属性

内部类可以访问外部类的属性 package Inner; public class TestInnerClassAccessOutClass { private int count = 5; private class InnerClass{ public int returnCount(){ return count;//内部类可以访问外部类的变量,自然内部类的构造必须在外部类

poijm 2444

从零开始:MTK ISP调试中的ImagiqSimulator实战指南

本文详细介绍了MTK ISP调试中ImagiqSimulator的实战应用,从环境准备、参数加载到核心模块调整,提供全面的调试流程指南。重点讲解了DM模块参数优化技巧和常见问题解决方案,帮助工程师高效完成ISP调试工作,提升图像处理质量。

weixin_29168813的博客 480

java高级之内部类(InnerClass)

将一个类A定义在另一个类B里面,里面的那个类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。如果成员内部类中不使用外部类的非静态成员,那么通常将内部类声明为静态内部类,否则声明为非静态内部类。[修饰符] class 外部类{[其他修饰符] [static] class 内部类{成员内部类作为类的成员的角色和外部类不同,Inner class还可以声明为private或protected;可以调用外部类的结构。(注意:在静态内部类中不能使用外部类的非静态成员)

m0_73370205的博客 408

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

window部署open claw(使用wsl-Ubuntu-docker部署)

本文详细介绍了在Windows 11系统下通过WSL2+Docker部署OpenClaw的完整流程。首先需要满足硬件配置要求并开启虚拟化功能,然后依次完成WSL2安装配置、Docker Desktop安装、OpenClaw镜像拉取等步骤。重点说明了端口映射、socat转发配置及openclaw.json文件修改方法。最后通过验证WSL2内网IP和端口访问服务。该方案具有最佳兼容性,能有效避免Windows环境下的依赖冲突问题。

Kmoyic的博客 2763

初识Java内部类

初识Java内部类原创:morgan83   <!--.unnamed1 { padding-top: 6px; padding-right: 6px; padding-bottom: 6px; padding-left: 6px}-->提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C

山哥's 专栏 3109

vue3 - 详细实现内网使用离线高德地图功能,在vue3中无需网络离线使用高德地图相关功能,高德地图如何离线加载详细教程(内网部署及使用),提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制)

vue3,高德地图,离线使用高德地图,高德地图瓦片官方下载,内网使用高德地图离线无网络,断网情况下使用高德地图,vue离线高德地图教程,内网部署高德地图,无需联网离线使用,vue3+ts实现离线高德地图 内网离线高德地图,如何在高德地图Vue3项目中下载离线地图,地图加载不出来,不显示怎么办,内网使用离线高德地图加载失败问题,vue3实现离线地图+高德瓦片,vue3高德离线地图,如何使用离线高德地图和自定义地图样式,高德离线地图的下载,怎么下载高德地图瓦片,一键把所有瓦片都下载下来,离线加载,内网部署,离线

✅ 精选推荐文章 1万+

Java内部类详解:从原理到实战应用

内部类是Java语言中实现封装与代码组织的重要机制,通过在类内部定义另一个类来实现逻辑分组和访问控制。其核心原理在于编译器生成的隐式引用机制,使得内部类可以访问外部类成员。从技术价值看,内部类既能增强封装性,又能实现多重继承的效果,在Android事件处理、集合框架迭代器等场景有广泛应用。特别是在内存敏感场景下,静态内部类相比普通内部类能减少内存开销,而匿名内部类在Java 8后可通过Lambda表达式简化。理解内部类的实现机制对优化内存使用和提升代码可维护性至关重要,也是Java开发者面试中的高频考点。

weixin_30321709的博客 435

RGB渐变颜色转换公式及例程

设Step=51,将RGB(255,0,0)颜色渐变为RGB(0,255,0),即RGB(255,0,0)经过51次颜色渐变转为RGB(0,255,0);设Step=51,将RGB(0,255,0)颜色渐变为RGB(0,0,255),即RGB(0,255,0)经过51次颜色渐变转为RGB(0,0,255);设Step=51,将RGB(0,0,255)颜色渐变为RGB(255,0,0),即RGB(0,0,255)经过51次颜色渐变转为RGB(255,0,0);分步骤的方式,使其渐变色循环整个颜色值;

1万+

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

子网掩码: 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址如下图。

快乐江湖的博客 1343

Java基础篇08:面向对象高级(代码块、内部类、函数式编程、常用API、GUI编程)

位置:类中,方法外 → 实例代码块位置:类中,方法外,static修饰 → 静态代码块位置:方法内 → 局部代码块(不论方法是static还是非static)不可变性:String对象不可变,所有修改操作都返回新对象常量池:字面量存储在常量池中,可复用节省内存性能:大量字符串操作时使用StringBuilder/StringBuffer安全:使用"常量".equals(变量)避免空指针新特性:Java 11+ 新增了isBlank()lines()repeat()等方法编码。

qq_40489522的博客 628

pscad IEEE标准系统搭建说明

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

Java嵌套类

嵌套类 Java支持如下几种嵌套类: nested class,定义在类型内部的类型。 static nested class,使用 static 声明的 nested class,static nested class 可以访问所有外部类的静态成员。 inner class,没有使用 static 声明的 nested class,inner class 可以访问所有外部类的实例成员,inner class 不能定义静态成员。 代码示例 ​ 1 public class Prog

Limingmingaa的博客 930

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

直面底层之字节码看匿名内部类和lamda(2)

NoNameInnerClass$1() { }public void run() { } } //NoNameInnerClass.class public class NoNameInnerClass { public NoNameInnerClass() { }public static void main(String[] var0) { Runnable var1 = new Runnable() { public void run() { } }; var1.run(); } }直观上看 虽然多

2401_83641314的博客 763

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

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

java基础面试2

java基础面试2

qq_44597856的博客 129

java面试题及答案(二)

16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。17、abstract class...

justJavaC的专栏 145

自定义实现迭代器——高淇JAVA300讲笔记之迭代器

这段代码分别以不同的方式实现了iterator()方法,实现了add()方法在末尾添加元素。自定义的Iterator对象具有hasNext()、next()、remove()方法。数组的拷贝用到了Arrays.copyOf方法,这个方法传回的数组是一个新的数组对象。 1 package com.bjsxt.iter; 2 3 import java.util...

weixin_30335353的博客 94

java实验报告答案_《JAVA程序设计》实验报告24.doc

【填空题】设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_______; ______; (4.0分)【单选题】非空的循环单链表head的尾结点p满足()。 (4.0分)【填空题】带头结点的双循环链表L中只有一个元素结点的条件是:________ (2.0...

weixin_32920055的博客 456

Java Google Json (Gson) Serializing Inner classes

Serializing inner classes Gson can serialize inner classes and static nested classes. The detailed example below demonstrates the following things. Serializing class containing static nested cla

happyrabbit456的专栏 692

逆向--Android DEX 文件格式与 Smali 语言

偏移大小字段说明0x004class_idx类 type_id 索引0x044访问标志0x084父类 type_id 索引0x0C4接口列表偏移0x104源文件名(string_id 索引)0x144注解数据偏移0x184类数据偏移0x1C4静态字段初始值偏移标志值说明ACC_PUBLIC0x1public0x2private0x4protectedACC_STATIC0x8staticACC_FINAL0x10final0x20。

qq_40669895的博客 509

Java接口(“完全抽象”的类——只规定功能,不负责实现)

1. 从抽象类到接口2. 接口(interface)3. 默认(default)方法

Ju的博客 726
上一篇: java面向对象23 JDK8中关于接口的新特性
下一篇: java前期补遗--基本数据类型与自动类型提升
wisdomcodeinside
博客等级 码龄7年 29粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值