当前位置: 首页 > news >正文

java以class开头_JAVA基础:从.class文件中寻找类名

可以有多种方式判断类的名字:

假定所有的类都以com,org,或者net开头

搜索classpath来寻找名字为Hack的类

搜索classpath来寻找映射到这个文件的目录入口

直接查看类自身。对于所有的情况下,这是最直接的

Java规范规定了如何查看一个class文件。存储在class文件一开始的一个值就是以Java内部分割符“/”为格式的完整的类明。

下面的代码返回了文件C:\code\hacks\research\com\generationjava\Hack.class的内部类名com/generationjava/Hack,读者可以进一步编写代码将“/”转换成“.”:

static final public int MAGIC = 0xCAFEBABE;

// 传递C:\code\hacks\research\com\generationjava\Hack.class

// 假定存在这样一个类

public String getFullyQualifiedName(String filename) throws IOException {

String name = null;

try {

DataInputStream in = new

DataInputStream(new FileInputStream(filename));

if(in.readInt() != MAGIC) {

// 不是一个.class文件

thrownew IOException("Not a class file");

}

in.readUnsignedShort();// 次版本号

in.readUnsignedShort();// 主版本号

in.readUnsignedShort();// 长度

in.readByte();// CLASS=7

in.readUnsignedShort();// 忽略这个地方

in.readByte();// UTF8=1

name =in.readUTF();//类的名字!!!

in.close();

} catch(IOException ioe) {

ioe.printStackTrace();

}

return name;

}

当你直接从.class文件中获得类的信息的时候,就简化了开发。查找一个匿名.class类文件的完整的类名是任何基于.class文件工作的应用的重要部件。

相关文章:

  • Java 习题6 参考答案及解析_java期末复习题答案及解析
  • 猜字小游戏java方法体_java实现猜字小游戏
  • java游戏开发包_LWJGL
  • java的人patch方法_java – 如何在CXF中使用PATCH方法
  • java func_Java通过匿名类来实现回调函数实例总结
  • Java关系表达式x y_Java正则逻辑运算符[X|Y]匹配
  • java将五元换成1元5角_C,一个代码来获得一笔钱转换成四分之一,硬币,镍币,便士[关闭]...
  • java 对方 GBK 乱码_【转】Java编码与乱码---GBK与UTF-8之间的转换
  • mySQL表变量和临时表的区别_SQL Server表变量和临时表的区别
  • 将java类的包注册到map中_java hashmap对象当实参是出现”java:11: 错误: 无法将类 Role中的构造器 Role应用到给定类型;”?...
  • JAVA不是主方法怎么输出_java主方法如何调用非静态方法
  • php显示缩小的图片代码,php等比例缩放图片及剪切图片代码分享
  • php代码转换工具,推荐几款格式化工具以及代码转换工具
  • img标签 中的php图片大小,html中关于img标签以及改变图片尺寸的详解(图)
  • php csv 源码 下载,[PHP] 使用php生成下载csv文件
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【剑指offer】让抽象问题具体化
  • angular2开源库收集
  • ES6核心特性
  • Fabric架构演变之路
  • HomeBrew常规使用教程
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Linux各目录及每个目录的详细介绍
  • pdf文件如何在线转换为jpg图片
  • Vue2 SSR 的优化之旅
  • 搞机器学习要哪些技能
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用docker-compose进行多节点部署
  • 数据仓库的几种建模方法
  • 为什么要用IPython/Jupyter?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用 Swift 编写面向协议的视图
  • ​linux启动进程的方式
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​香农与信息论三大定律
  • # 数据结构
  • ###STL(标准模板库)
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (3)llvm ir转换过程
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (南京观海微电子)——I3C协议介绍
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Unity3DUnity3D在android下调试
  • ***通过什么方式***网吧
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET MVC 验证码
  • .NET MVC之AOP
  • .net Stream篇(六)
  • .net 受管制代码
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded