java 结合内部类与外部类的静态(static)与非静态的用法

外部类,内部类以及静态内部类的加载关系深入探讨 前言:   在看单例模式的时候,在网上找帖子看见其中有一种(IoDH) 实现单例的方式,其中用到了静态内部类,文章中有写到当jvm加载外部类的时候,并没有加载静态内部内这和之前自己想的不一样,特意在网上找了一些帖子总结一下。 一、学习前千的疑问:   稍微了解Java虚拟机内的加载过程的步骤,都很清楚,一个类的静态资源、一些常量都是在类加载的时候就被加载金内存中分配空间了,所以我一开始理所当然的以为静态内部类中的静态变量同样属于静态资源,也应该在在内加载的时候被加载,然而实际情况却不是这样的,带着这个 阅读详情

        阅读提示:如果觉得不好理解,可以按照我的思路自己操作一遍。不同元素的名称区分的比较细,注意区分几个概念:非静态外部类、静态和非静态内部类、静态和非静态方法,静态和非静态属性等。

         java中的静态和非静态主要由static关键字区分,static关键字可修饰成员内部类、方法和变量(属性)三种内容。类可以分为两种,外部类和内部类,内部类是包含在外部类里面的,也就是说一个内部类一定对应一个的外部类,内部类又分为成员内部类、匿名内部类和局部内部类,本文仅涉及成员内部类。

1静态与非静态类构造

        用如下代码测试:Eclipse为非静态外部类,Button为非静态内部类,Window为静态内部类,Eclipse和Window包含静态变量、非静态变量、静态方法、非静态方法。Button包含非静态变量和方法。得出以下几点:

1.1 static只能修饰内部类(例Window),不能修饰外部类(例Eclipse)。所以外部类只有非静态外部类,内部类分为静态内部类和非静态内部类。

1.2 非静态外部类和静态内部类可包含静态变量和方法,非静态内部类不包含静态变量和方法。

1.3 无论是非静态外部类还是非静态内部类以及静态内部类,都可以包含非静态变量和方法。

class Eclipse{//外部类
	String name;
	static String icon;	
	void getname() {		
	}
	
	static void geticon() {		
	}
	
	class Button{//按钮内部类
		String name;
		static String icon;//报错,非静态类中不能声明静态变量和静态方法
		
		void getname() {			
		}
		
		static void geticon() {//报错	
		}
	}
	
	static class Window{//窗口内部类
		String name;
		static String icon;
	
		void getname() {			
		}
		
		static void geticon() {			
		}
	}
}

2静态与非静态类调用

        用如下代码进一步测试,得出以下几点:

2.1非静态外部类调用:

2.1.1 非静态外部类非静态方法中,可以调用所有非静态类和静态类的非静态、静态方法、变量。

2.1.2 非静态外部类静态方法中,不可以调用非静态外部类非静态变量、方法和非静态内部类的实例、方法、变量,可以调用静态内部类的实例、实例.方法、实例.变量。

2.2内部类调用:

2.2.1.非静态内部类只有非静态方法,与非静态外部类非静态方法一样,可以调用所有非静态类和静态类的非静态、静态方法、变量。

2.2.2.静态内部类的静态与非静态方法,不可调用所有非静态内部类的实例、方法、变量,可以调用所有非静态外部类的实例、实例.方法、实例.变量。

public class InnerClass {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		new Eclipse().getname();
//		new Eclipse().geticon();
//		new Eclipse().new Button().getname();
//		new Eclipse().new Window().geticon();//报错
		new Eclipse.Window().getname();
//		new Eclipse.Window().geticon();//与Eclipse.Window.geticon()等效
//		Eclipse.Window.geticon();

//              非静态内部类和静态内部类实例化的方法
//		Eclipse.Button btn=new Eclipse().new Button();
//		Eclipse.Window win=new Eclipse.Window();
	}


}


class Eclipse {// 外部类
	String name = "eclipsename";
	static String icon = "eclipseicon";


	void getname() {
		System.out.println(name);
//		new Button().getname();
//		new Window().getname();
//		new Window().geticon();
//		Window.geticon();
//		String btnname=new Button().name;
		
	}


	static void geticon() {
		System.out.println(icon);
//		getname();//报错
//		System.out.println(name);//报错
//		Button btn=new Button();//报错
//		new Button().getname();//报错
//		Window w=new Window();
//		new Window().getname();
//		new Window().geticon();	
//		Window.geticon();
	}


	 class Button {// 按钮内部类
		String name = "buttonname";
		// static String icon;


	    void getname() {
//			System.out.println(name);
//			new Eclipse().getname();
//			Eclipse.this.getname();//非静态内部类里也用非静态外部类名.this.方法实现调用实例方法的效果
//			new Eclipse().geticon();
//			Eclipse.geticon();			
//			new Window().getname();
//			new Window().geticon();
//			Window.geticon();
//			String ecname=new Eclipse().name;
//			String ecicon=new Eclipse().icon;
                        String s=Eclipse.this.name;//非静态内部类里也用非静态外部类名.this.变量实现调用实例变量的效果
		}


		// static void geticon() {
		// }
	}


	 static class Window {// 窗口内部类
		String name = "windowname";
		static String icon = "windowicon";


		void getname() {
			System.out.println(name);
			new Eclipse().getname();
			new Eclipse().geticon();
//			new Button().getname();//报错
			Eclipse.geticon();
			String ecname=new Eclipse().name;
			String ecicon=new Eclipse().icon;
		}


		static void geticon() {
  			System.out.println(icon);
//			new Eclipse().getname();
//			new Eclipse().geticon();
////		    new Button().getname();
//			Eclipse.geticon();
//			String ecname=new Eclipse().name;
//			String ecicon=new Eclipse().icon;
		}
	}
}


java调用外部文件 有关java怎样调用外部文件的,可以是exe,也可以是chm等 立即下载

相关推荐

OMNET++ INET框架学习教程(一)

在自组网学习的道路上摸石头过河,帮你快速入门OIMNET++平台下的INET框架。

NLDwangzhe的博客 6565

static定义内部类

static定义内部类 如果说现在在内部类上使用了static定义,那么这个内部类就是变成了"外部类",static定义的都是独立于类的结构,所以该类结构就相当于是一个独立的程序类了。需要注意的是,static不管定义是类还是方法只能够访问static成员,所以static定义的内部类只能够访问外部类中的static属性和方法。 范例:使用static定义内部类 class Outer { private static final String MSG = "这是一个信息"; static cl

weixin_46245201的博客 1097

LCL滤波器参数设计实战:从理论约束到工程选型指南

本文提供了LCL滤波器参数设计的实战指南,从理论约束到工程选型逐步拆解。核心在于平衡总电感量、电感比与电容值,确保谐振频率落在安全区间,以满足并网电流谐波标准并维持系统稳定。文章以10kW并网逆变器为例,给出了具体的参数计算流程与选型步骤,并强调了寄生参数、阻尼设计等工程实现细节。

c6d7e8f9g的博客 921

#静态内部类与外部类

外部类如何调用静态内部类中的属性和方法 1)外部类可以通过创建静态内部类实例的方法来调用静态内部类的非静态属性和方法 2)外部类可以直接通过“ 外部类.内部类.属性(方法)” 的方式直接调用静态内部类中的静态属性和方法 静态内部类如何调用外部类的属性和方法 静态内部类如果要访问外部的成员变量或者成员方法,那么必须是静态的 1)静态内部类可以直接调用外部类的静态属性和方法 2)静态内部类可以通过创建...

YLJ2570的博客 697

(6)NUC980 SPI Nand 启动

方式一:下载到SPI-NAND-Flash中,这种方式可以将程序固化到SPIflash中,可以掉电保存。第二种方式下载到DDR中程序掉电丢失,但是DDR调试方便,时候调试的时候使用。之前的设置都是基于SD卡启动,今天测试一下是用SPI flash启动。方式二: 下载到DDR中,①设置为USB启动②下载到DDR中③运行。1:烧写BootLoader。

卤煮小鱼的博客 1752

《数学建模与数学实验》第5版 线性规划 习题3.4

1. 某鸡场有1000只鸡,用动物饲料和谷物混合喂养. 2. 某工厂用A1,A2两台机床加工B1,B2,B3三种不同零件. 3. 某工厂利用两种原料甲、乙生产$A_1、A_2、A_3$三种产品. 4. 每班的护士在值班开始时向病房报到,连续工作8个小时. 5. 某工厂生产 A1 、A2 两种型号的产品 6. 有两个煤厂A,B 7. 某工厂制造三种产品,生产这三种产品需要三种资源 8. 已知某工厂计划生产1,2,3三种产品,各产品需要在ABC设备加工。...

hexiaosi_的博客 2万+

java: 内部类、外嵌类、匿名类

内部类与外嵌类 内部类: 定义:在一个类中定义另一个类,这样的类就称为内部类; // 外嵌类的声明 public class internalExa { class internal { // 内部类internal的声明 void speak() { System.out.println("\t内部类不能构建静态内部变量"); System.out.println("\t非static内部类可以操作外嵌类中的static变量和实例变量"); } } ...

belien 2151

GAMES101:MacOS作业环境搭建

查看gcc/clang的位置产看gcc/clang的版本1.1.2 安装cmake。

weixin_38844255的博客 715

java 静态外部类_为什么外部类在Java中不能静态的

java 静态外部类_为什么外部类在Java中不能静态的

lukaijie‘s BLOG 544

华为OD机试真题 新系统2026-04-01 Python&JS 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 847

【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法

1. 安装ROCm Docker支持 ■AMD GPU驱动 ■ROCM ■Docker 2. 配置Docker使用ROCm 3. 使用官方ROCm Docker镜像 4. 使用Docker CLI参数访问GPU

静谧、淡雅 684

C++静态成员

静态成员 静态数据成员 在类的多个对象之间实现数据共享,就可以使用静态数据成员。 静态数据成员是一种特殊的数据成员,它以关键字static开头。 静态数据成员的定义格式是: static 数据类型 数据成员名; 静态数据成员初始化与一般数据成员初始化不同,初始化实在类体外进行的,格式如下: 数据类型 类名::静态数据成员名=初始值; 静态数据成员不属于某个对象,可以通过类名加域作用...

qq_28298991的博客 587

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3809

java中static的用法

java中static关键字的用法和注意事项 1.static的作用范围及用法 2.static 的应用—单例模式 3.static注意事项总结

虽然但是 2万+

数学建模模型总结

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

内部类(成员内部类、静态内部类、方法内部类)

一:成员内部类:最常见的内部类就是成员内部类,也称作普通内部类;1、Inner类定义在Outer类的内部,相当于Outer类的成员变量的位置,Inner类可以使用任意访问修饰符,如:public、private、protected等。2、Inner类中定义的test()方法可以访问Outer类中的数据,不受访问控制符的影响。3、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去......

liu771626413的博客 4万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Java】static关键字,内部类

static关键字刨析,内部类的分类和介绍

trong_ 的烂笔头 2368

WINCC7.3破解文件

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

总结:Java各种内部类与外部类的关系

一个个普通独立类就是外部类,外部类只能使用两种权限修饰符(缺省、public),以及final修饰符,不能使用static修饰示例代码://外部类// 创建静态内部类实例// 静态内部类定义// 公共方法用于显示消息静态内部类里面可以存在静态、非静态成员静态内部类与外部类的联系:3.1 如果是静态内部类的静态成员,外部类可以直接通过“外部类名.内部类名.静态成员”来访问。//调用内部类静态成员示例:OuterClass.StaticNestedClass.静态成员。

weixin_48033662的博客 1798

Java内部类:静态与非静态内部类

依赖关系成员内部类必须绑定到外部类实例(静态内部类独立存在(直接访问权限成员内部类可以访问外部类的所有成员(包括private实例字段/方法)。静态内部类只能访问外部类的static成员。静态成员支持成员内部类不能有static方法/字段(除非是常量)。静态内部类可以自由定义static成员。内存管理成员内部类隐式持有外部类引用(可能导致内存泄漏)。静态内部类不持有外部类引用,更安全。

SoulruiA的博客 1934

Java基础-私有静态内部类(private static class)

目录前言1.杜绝被别的外部类调度或实例化2.只为其依附的外部类服务 前言 在jdk源码中我们发现很多常用到的类里面都带有一个私有静态内部类,神秘的内部类一直都是让我头疼的东西,那这个“私有静态内部类”又是一个什么鬼呢? 解释前,我先给出一个熟识度高的使用案列—“IntegerCache”,这只是冰山一角,但他却是我们实际用的比较多的,但是被我们忽略的。jdk1.8中他是一个定义在Integer下的私有静态内部类: private static class IntegerCache { s

weixin_44228952的博客 1万+

Java中的静态内部类

和成员内部类一样,都是放在外部类的成员位置,但是!静态内部类有static修饰。(那不就是被static修饰的成员内部类吗...一旦被static修饰了,就叫做静态内部类)

SakuraMG的博客 5909

静态内部类(public static class)和普通内部类(public class)的区别

public static class和public class的区别 新学的java知识,静态类,使用static关键字修饰的类(public static class) 今天在看别人源码的时候看到了一个新知识。使用static关键字修饰的类。 java中普通的顶级类是不能使用static关键字修饰的。 只有内部类可以使用static修饰,或者不使用s...

我是guyue,guyue就是我O(∩_∩)O 1万+

非静态内部类为什么可以访问外部类的静态成员

非静态内部类对象寄生于外部类对象,inn调用test()方法时,知道自己调用的是它寄生的对象所属类的类成员; 在阶段一:类加载的时候没有创建外部类对象,但是方法是知道要调用的是外部类的类成员,已经确定了 在第二阶段:创建非静态内部类对象,该对象必须寄生于外部类对象,它知道要调用自己寄生的这个对象所属的类的类方法,也是确定的 public class TestOutInn { pub

jing_bufferfly的博客 3582

Java中Static关键字的五种用法详解

直接一点,static关键字就是把属性和方法变为类相关,而不是实例相关。

一个编程爱好者的博客 5044

java中静态内部类的加载时机?

1.问题: 静态内部类的加载时机?他和外部类的加载有没有什么关系? 静态内部类的加载是在程序中调用静态内部类的时候加载的,和外部类的加载没有必然关系, 但是在加载静态内部类的时候 发现外部类还没有加载,那么就会先加载外部类, 加载完外部类之后,再加载静态内部类(初始化静态变量和静态代码块etc) 如果在程序中单纯的使用 外部类,并不会触发静态内部类的加载 扩展: ①一个类内部有静态内部类和非静态内部类 , 静态内部类和非静态内部类一样,都是在被调用时才会被加载 不过在加载静态内部类的过程中.

qq_38807606的博客 7097

Java在静态(static)和非静态内部类条件下创建对象的区别

1.在非静态内部类条件下不能逐步创建对象,要先创建一个外部类对象,再创建内部类对象。 个人理解:因为类还没加载即还没分配内存,内部所有非静态成员都没分配内存,不可能直接创建一个非静态内部类对象。 2.在静态内部类条件下,static已经分配好内存了即使类没加载,所以可以通过外部类路径可直接创建一个内部类对象。 class A { class B1 //非静态内部类B1 { void pri...

盛夏~冰糖的博客 3823

Java静态内部类(static class)

在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的。 一、静态内部类的使用目的。 在定义内部类的时候,在其前面加上一个权限修饰符static。这个内部类就变为了静态内部类。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。而且最主要的是这段主...

OceanSky的专栏 4万+
下一篇: WPF的DataGrid使用DataTable作为数据源时出现列重复现象的解决办法。
交通模型师
博客等级 码龄1天 30粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值