通过内部类的一个例子展示java中的可访问特性

Windows命令总结 希望这份大全能对您有所帮助!type <文件名>more <文件名> 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 该篇文章涉及到了java可访问特性以及内部类的一些内容,向读者展示了一个内部类的特别的现象,通过这个例子,使开发者了解到一些他们以前可能没有注意到的细节,也许可以帮助开发者更透彻的了解java的可访问特性、内部类和虚拟机。并且通过对这些细节的分析,可能会对开发者思考、分析问题,以及适当的使用工具有所启迪。 java的访问修改符(access modifier)包括:Default-Access、public、private、protected四种。 并不是所有的情况都可以使用全部四种访问修改符,有的情况下使用某些访问修改符是没有意义的, 例如:如果一个类不是内部类,则不能使用private作为该类的访问修改符,编译下面的代码: private class test { ... } jdk编译器将给出“modifier private not allowed here”错误提示。 因为private特性只能由定义它的那个类使用,如果上面的代码通过编译,则不会有任何情况可以使用test 类,那么也就不会有任何意义。 如果一个类没有定义任何构造函数,则编译器将生成一个缺省的构造函数,该构造函数的访问修改符和类的 访问修改符相同,例如: class test将生成test()构造函数 public class test将生成public test()构造函数。 在使用内部类的情况,上述的特性将使编译器表现出一个特别现象。需要说明的是,下面的例子仅针对 Windows系统下jdk编译器,作者并没有尝试使用其他的编译器的情况。但由于java编译器生成的是class 文件这种中间形式的代码,所以下面的讨论应该适用于任何符合java标准的编译器。 编译下面的代码: public class Wrapper { private class InnerClass {} private void testInnerClass() { InnerClass inner = new InnerClass(); } public static void main(String[] args) { Wrapper wrapper = new Wrapper(); wrapper.testInnerClass(); } } 将产生三个class文件:Wrapper、Wrapper$InnerClass和Wrapper$1。 对于前两个文件,了解内部类的读者都会理解,但第三个类Wrapper$1的作用是什么呢? 使用java的反射机制,或者使用javap反汇编器,将发现Wrapper$1类没有任何成员变量和方法, 而Wrapper$InnerClass则除了有一个private Wrapper$InnerClass()构造方法外,还有一个 Wrapper$InnerClass(Wrapper$1)构造方法,使用javap,你将发现Wrapper$InnerClass(Wrapper$1) 并没有使用Wrapper$1类型的参数,而只是直接调用了private Wrapper$InnerClass()。 如果读者仔细思考一下创建一个新的类实例的过程,大概已经明白了产生上述现象的原因: 当程序试图创建一个Wrapper$InnerClass的类实例时,却不能使用其缺省的构造函数,因为 Wrapper$InnerClass()是private的,不能由外部使用。因此编译器不得不再生成一个可访问 的构造函数,由于这里只有Wrapper类的private void testInnerClass()方法使用了 new InnerClass(),所以编译器只(需)为这个新的构造函数生成了Default-Access的访问修改符。 同时,为了和已有的缺省构造函数有所区别,就加入了一个Wrapper$1类型的参数, 为此,编译器还要生成一个Wrapper$1类。 为了更简单,(也许)更清晰的看到编译器生成的class代码工作的原理,读者可以使用java反编译器,来 看看class反编译后生成的java源程序,下面是作者使用Jad反编译后生成的Wrapper类的代码: // Decompiled by Jad v1.5.7d. Copyright 2000 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html // Decompiler options: packimports(3) // Source File Name: Wrapper.java public class Wrapper { private class InnerClass { private InnerClass() { } InnerClass(_cls1 _pcls1) { this(); } } public Wrapper() { } private void testInnerClass() { InnerClass innerclass = new InnerClass(null); } public static void main(String args[]) { Wrapper wrapper = new Wrapper(); wrapper.testInnerClass(); } // Unreferenced inner classes: /* anonymous class */ class _cls1 { } } 显然,Wrapper$1类不会有任何实际的作用。那么为什么编译器一定要生成Wrapper$1类,而不使用随便一个 基本类型(例如byte)来作为占位符呢?我想,大概是因为使用Wrapper$1可以使用更少的内存吧,因为一个 空类是不会占用任何内存的(Wrapper$1类没有任何成员变量,也就不会需要任何指向它的指针变量,事实上, 即使删除Wrapper$1.class文件,也不会影响程序运行,jvm将不会给出任何错误提示。), 而任何一个可以有实际值的参数都会要求开辟一些内存来存放它。那么java的编译器不会做优化吗? 问题是java编译器最终产生的只是class代码,在class代码的层次,无法向虚拟机表达这样的优化。 而java虚拟机恐怕也不宜加入这种优化特性,所以sun就采用了现在的这种解决方法。需要说明的是, 这只是我的猜测,由于我没有详细的阅读过jvm的全部文档,所以不能确定。 关于java的可访问特性以及内部类的全部内容,请参考java的在线文档,或者《Core Java》《Thingking in java》 等书籍。 javap反汇编器的使用可以参考java的《Tool Docs》文档。 为了解更多java虚拟机的信息,可以参考sun的jvm的文档。
windows命令行下一些常用的命令 【1】NAT端口映射 【2】修改命令行字符 【3】route 路由 【4】cmd命令 【5】tracert路由跟踪 【1】NAT端口映射 #需在控制面板->管理工具->服务中打开IP Helper服务。 #安装,win7以上不用安装 netsh interface ipv6 install #显示端口转发 netsh interface portproxy show all netsh interface portproxy show v4tov4 #增加端口转发 netsh interfa 阅读详情

相关推荐

DCM4CHEE Archive Light 应用配置-存储配置

本文介绍了在DICOM归档系统中配置和管理存储的方法,包括通过用户界面和LDAP导入两种方式。主要内容包括: 存储配置概述:用户可根据需求配置单个或多个存储设备,支持在磁盘空间不足或多任务并行时使用。存储分为Archive设备级(序列元数据存储)和Application Entity级(对象存储/元数据存储)。 用户界面操作: 设备级存储配置:通过菜单导航添加/编辑存储描述符,设置Storage ID、URI等关键参数 应用级存储引用:在设备扩展和网络AE中分别配置元数据和对象存储引用 LDAP配置方法:

洪城叮当的博客 1417

子类及其对象,子类成员的可访问性java

子类定义: 子类定义实际上就是定义类的过程,只不过在父类的基础上定义,所以定义子类是需要指明父类。子类的定义形式是: class 子类名 extends 父类名 { //子类类体 } 用关键字extends说明父类(子类对父类的扩展)。子类类体中增加了子类中有,父类中无的域和方法,因为与父类不完全相同,增加新成员可以表现出子类相对于父类的特殊之处。 java语言只支持单重继承,也就是一个类最多只能...

LiAphrodite的博客 1097

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 297

Windows命令之ftp命令

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。windows终端默认安装ftp客户端,我们可以通过ftp命令执行文件的上传和下载。博文环境如下

月生的静心苑 1万+

3D Gaussian Splatting环境配置和运行

使用conda命令根据environment.yml文件创建虚拟环境时,安装的pytorch是使用conda install 命令来安装的,实际上并不能成功安装带有gpu的pytorch,而这两个模块的安装依赖于带gpu的pytorch。如果不注释掉这三行,直接安装会报错

m0_46360757的博客 3326

Origin科研绘图——桑基图

是一种用于展示“流动”(flow)关系的可视化图表,常用于呈现能量流、物质流、资金流、信息流等在不同节点之间的传递和分配情况。它最大的特点是用“宽度可变的流线”来直观表示数量大小——流线越宽,代表流量越大,因此特别适合理解复杂系统中资源从哪里来、到哪里去、以及不同路径所占比例。为该流程对应的数量。只需将各个流程逐项填写在 A、B、C 三列即可,流程的排列顺序并非关键,确保起点、终点及对应数值准确才是最重要的。与柱状图、饼图不同,桑基图不仅展示“多少”,还展示“从哪到哪”。至此,本期教程就结束啦。

weixin_41301530的博客 1394

Windows下bat命令

处理包括读取文件,将其分成一行行的文字,然后将每行 解析成零或更多的符号。用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。

堡哥的博客 2316

PyTorch深度学习实战(41)——循环神经网络与长短期记忆网络

循环神经网络 (Recurrent Neural Network, RNN) 通过将前一个时间步的隐藏状态作为当前时间步的输入,实现对序列数据的建模,由于循环连接的存在,RNN 能够捕获时间依赖关系,然而,RNN 在处理长期依赖性问题时会遇到困难。为了解决这个问题,提出了 LSTM,通过引入门控机制改进 RNN 来有效地处理长期依赖关系。在本节中,了解了 LSTM 和 RNN 的基本原理,并介绍了如何在 PyTorch 中实现 LSTM。

盼小辉丶的博客 1万+

Windows命令之netstat命令

netstat命令显示处于活动状态的 TCP 连接、计算机正在侦听的端口、以太网统计信息、IP 路由表、用于 IP、ICMP、TCP 和 UDP 协议的 IPv4 统计信息 () 和 ipv6 统计信息 (ipv6、ICMPv6、TCP over IPv6 和 UDP over IPv6 协议) 。 使用没有参数的情况下,此命令显示活动 TCP 连接。

月生的静心苑 1万+

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1302

【中项】案例分析 | 答题技巧 | 备考 

对偏差原因的分析和对项目未来趋势的理解。如果偏差是由一次性事件或特殊原因引起的,那么这种偏差是非典型的,意味着未来的绩效将回归到预期的绩效水平。例如,如果项目初期的CPI小于1,原因是意外的自然灾害导致成本增加,那么这种偏差被认为是非典型的,因为它不太可能在未来重复发生。例如,如果项目初期的CPI小于1,且原因是低效的团队协作,那么这种偏差被认为是典型的,因为它可能在整个项目生命周期中持续存在。在实际应用中,项目经理通常会结合CPI、SPI和偏差趋势图等工具,综合分析偏差的性质,以制定合理的项目控制策略。

静谧、淡雅 1246

Windows CMD命令大全

命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的DOS操作系统。

pigerr的博客 6703

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Windows 命令行:dir 命令

Windows 程序设计

2401_82825368的博客 1879

温度PID控制PLC程序

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

在windows上运行linux命令

启动方式: Windows通过CMD或PowerShell,Linux通过Terminal。命令格式: Windows的命令和参数用空格分隔,Linux也一样,但Linux支持更多的命令和管道操作。脚本执行: Windows使用批处理文件和PowerShell脚本,Linux使用Shell脚本,并且需要文件权限设置。

m0_73192692的博客 1646

pscad IEEE标准系统搭建说明

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

Windows 命令行:copy 命令

Windows 程序设计

2401_82825368的博客 1781

windows常见命令大全

通过向目标发送一系列的 IP 数据包,并记录每个数据包经过的路由器的响应时间和 IP 地址,从而绘制出数据包从源地址到目标地址所经过的路径。显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。名称位于底部 [] 中,它调用的组件位于顶部,

2301_80873677的博客 3269

Windows命令之tasklist命令

;tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表。命令结合筛选器一起使用,可以按照我们的需求进行过滤,查找我们需要了解的进程信息。tasklist 替换 tlist.exe 工具。

月生的静心苑 2万+

windows下tree命令的使用

问题场景: 我想查看一个gradle项目的目录结构,在windows git-bash下调用tree,提示无此命令,然后查了一下才知道,git-bash默认是无此命令的,而cmd下是有的,于是我转向cmd,才发现windows命令行的使用已经好生疏了,借此机会,重新练习一下 linux命令行使用习惯了,现在回到windows的系统自带的cmd下还有些转换不过来,以前总结过一些内容现在也不...

零零落落的博客 7336

Windows基础和命令

Windows学习(部分)

baiyian_sec的博客 791

Windows 命令行:move 命令

Windows 程序设计

2401_82825368的博客 1243

Windows NET命令

NET命令值得注意的几点:1、虽然Windows 98,Windows NT/2000都内置了NET命令,但Windows98的NET命令和Windows NT/2000的NET命令有所不同。而且Windows 98的NET命令中有一些参数不能在DOS-WIN中使用,只能在纯DOS环境(即:开机时按F8选择命令行方式,或者通过开始菜单>关闭系统>重新启动计算机并切换到MS-DOS方式)中使用。2、Windows98不提供NET命令在图形方式下的帮助,只能在命令行方式下输入NET /?

顺其自然~专栏 807

Windows基础命令详解

CMD命令是 Windows 操作系统中的命令行工具,通过输入命令来执行各种系统任务。以下是一些常见的 CMD 命令介绍

zakefine的博客 1393

【Windows】CMD命令学习—— 基本命令

CMD(命令提示符)是Windows操作系统中的一个命令行解释器,允许用户通过输入命令来执行各种系统操作。

一个写了10年bug的程序员日常笔记。 1018

windows 怎么使用git 命令

在上执行。

dlz0836的博客 3218
上一篇: 查找数据表的主键
下一篇: 中移动-摩托罗拉联合启动JAVA应用大赛
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值