- 浏览: 526349 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (740)
- css (4)
- jquery (8)
- javascript (23)
- html (0)
- uml (0)
- 设计模式 (1)
- 开发工具 (14)
- json (4)
- struts 1.x (3)
- spring (3)
- hibernate (6)
- struts 2.x (17)
- JFreechart (0)
- j2se (48)
- jsp (9)
- flex (22)
- 找工作 (1)
- 技术杂谈 (18)
- 网络编程 (5)
- io流 (1)
- ORACLE (15)
- 报表 (3)
- extjs (11)
- jpbm (2)
- swing (5)
- jspereports (3)
- sql (1)
- linux (15)
- ps (1)
- storm (4)
- hbase (8)
- li (0)
- python (1)
- hive (3)
- 机器学习 (1)
- hdfs (1)
- elasticsearch (1)
- hadoop 2.2 (5)
- hadoop (1)
最新评论
-
Tristan_S:
这个有点意思
ASM -
starryskydog:
程序修改detail band部分的样式 如内容字体大小 ...
使用jasperReport实现动态表头 -
samwong:
Good, so usefule
使用YUI Compressor压缩CSS/JS -
gc715409742:
能够告诉我怎么在web项目中使用YUI Compressor? ...
使用YUI Compressor压缩CSS/JS -
JsonTeye:
您好! 我看你的代码,我现在也在做动态报表,实现功能由用户自己 ...
使用jasperreport动态生成pdf,excel,html
. 电梯直达 楼主
发表于 2012-1-28 13:02:26 |只看该作者 |倒序浏览 Code 属性用于 method_info 结构中。
4. Exceptions : attribute_info 被替代为 :
Exceptions_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
u2 exception_index_table[number_of_exceptions];
}
5. InnerClasses : attribute_info 被替代为 :
InnerClasses_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_classes;
{ u2 inner_class_info_index;
u2 outer_class_info_index;
u2 inner_name_index;
u2 inner_class_access_flags;
} classes[number_of_classes];
}
6. Synthetic : attribute_info 被替代为 :
Synthetic_attribute {
u2 attribute_name_index; // 不用废话了吧 ?
u4 attribute_length; // 必须为 0
}
Synthetic 用在 field_info 、 method_info 中,
一个没有出现在源程序中的变量必须使用 Synthetic 标记。
7. LineNumberTable : attribute_info 被替代为 :
LineNumberTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 line_number_table_length;
{ u2 start_pc; // 代码数组中的开始处
u2 line_number; // 源文件中的行号 ( 对于每一非空行都有这么一项 )
} line_number_table[line_number_table_length];
}
LineNumberTable 用于 Code 属性中,通常用于调试。
8. LocalVariableTable : attribute_info 被替代为 :
LocalVariableTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_table_length;
{ u2 start_pc;
u2 length; // 当解释到代码数组的 [start_pc,start_pc+length]
// 时变量必须被赋值 ??
u2 name_index;
u2 descriptor_index;
u2 index; // 到本地变量数组的一个索引
} local_variable_table[local_variable_table_length];
}
9. Deprecated : attribute_info 被替代为 :
Deprecated_attribute {
u2 attribute_name_index;
u4 attribute_length; // 必须为 0
}
当然也可以定义自己的属性,但要你自己的编译器和虚拟机实现。 JVM 将忽略自己不认可的属性。
以上是关于 Javaclass 文件的一个基本结构的分析。主要是对书上关于这一章的总结,同时参考了 : http://hi.baidu.com/52dege/blog/item/f33a3cf4092491dbf3d3854f.html 等网上资料。
看一个 java classfile 有助于我们理解的实际例子:
代码 1 :
[java] view plaincopyprint?
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "aaabbb";
String b = "aaabbb";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
public class StringTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String a = "aaabbb"; String b = "aaabbb"; System.out.println(a == b); System.out.println(a.equals(b)); } }
运行结果为 :true true
代码 2 :
[java] view plaincopyprint?
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "aaabbb";
String b = "aaa";
b += "bbb";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
public class StringTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String a = "aaabbb"; String b = "aaa"; b += "bbb"; System.out.println(a == b); System.out.println(a.equals(b)); } }
运行结果为 :false true
关于代码 1 和代码 2 的解释:
Java 编译器在生成 class 文件的时候对代码里面定义的字符串都会作为一个字符串常量存放在常量池中。
对于代码 1 中的 String a = "aaabbb"; 和 String b = "aaabbb"; 预处理在编译处理后, a 和 b 都指向了常量池里的 ”aaabbb” ,所以 a==b 是 true.
对于代码 2 中的 String b = "aaa"; b += "bbb"; 编译处理后会在常量池里面生成 ”aaa” 和 ”bbb”, 同时, b += "bbb"; 语句会导致 Jvm 去重新创建一个 string 对象,相当于 b=new String(“aaabbb”); 自然, aaa==bbb 是 false 。这也是为什么不推荐使用加号来拼接字符串了
发表于 2012-1-28 13:02:26 |只看该作者 |倒序浏览 Code 属性用于 method_info 结构中。
4. Exceptions : attribute_info 被替代为 :
Exceptions_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_exceptions;
u2 exception_index_table[number_of_exceptions];
}
5. InnerClasses : attribute_info 被替代为 :
InnerClasses_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 number_of_classes;
{ u2 inner_class_info_index;
u2 outer_class_info_index;
u2 inner_name_index;
u2 inner_class_access_flags;
} classes[number_of_classes];
}
6. Synthetic : attribute_info 被替代为 :
Synthetic_attribute {
u2 attribute_name_index; // 不用废话了吧 ?
u4 attribute_length; // 必须为 0
}
Synthetic 用在 field_info 、 method_info 中,
一个没有出现在源程序中的变量必须使用 Synthetic 标记。
7. LineNumberTable : attribute_info 被替代为 :
LineNumberTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 line_number_table_length;
{ u2 start_pc; // 代码数组中的开始处
u2 line_number; // 源文件中的行号 ( 对于每一非空行都有这么一项 )
} line_number_table[line_number_table_length];
}
LineNumberTable 用于 Code 属性中,通常用于调试。
8. LocalVariableTable : attribute_info 被替代为 :
LocalVariableTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_table_length;
{ u2 start_pc;
u2 length; // 当解释到代码数组的 [start_pc,start_pc+length]
// 时变量必须被赋值 ??
u2 name_index;
u2 descriptor_index;
u2 index; // 到本地变量数组的一个索引
} local_variable_table[local_variable_table_length];
}
9. Deprecated : attribute_info 被替代为 :
Deprecated_attribute {
u2 attribute_name_index;
u4 attribute_length; // 必须为 0
}
当然也可以定义自己的属性,但要你自己的编译器和虚拟机实现。 JVM 将忽略自己不认可的属性。
以上是关于 Javaclass 文件的一个基本结构的分析。主要是对书上关于这一章的总结,同时参考了 : http://hi.baidu.com/52dege/blog/item/f33a3cf4092491dbf3d3854f.html 等网上资料。
看一个 java classfile 有助于我们理解的实际例子:
代码 1 :
[java] view plaincopyprint?
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "aaabbb";
String b = "aaabbb";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
public class StringTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String a = "aaabbb"; String b = "aaabbb"; System.out.println(a == b); System.out.println(a.equals(b)); } }
运行结果为 :true true
代码 2 :
[java] view plaincopyprint?
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "aaabbb";
String b = "aaa";
b += "bbb";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
public class StringTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String a = "aaabbb"; String b = "aaa"; b += "bbb"; System.out.println(a == b); System.out.println(a.equals(b)); } }
运行结果为 :false true
关于代码 1 和代码 2 的解释:
Java 编译器在生成 class 文件的时候对代码里面定义的字符串都会作为一个字符串常量存放在常量池中。
对于代码 1 中的 String a = "aaabbb"; 和 String b = "aaabbb"; 预处理在编译处理后, a 和 b 都指向了常量池里的 ”aaabbb” ,所以 a==b 是 true.
对于代码 2 中的 String b = "aaa"; b += "bbb"; 编译处理后会在常量池里面生成 ”aaa” 和 ”bbb”, 同时, b += "bbb"; 语句会导致 Jvm 去重新创建一个 string 对象,相当于 b=new String(“aaabbb”); 自然, aaa==bbb 是 false 。这也是为什么不推荐使用加号来拼接字符串了
发表评论
-
使用Java调用谷歌搜索
2013-10-19 12:50 869转自:http://yangshangchuan.iteye ... -
走出类加载器迷宫
2013-10-16 14:22 658这是前几天在看类加载器机制时搜到的一篇旧文,网上搜了搜 ... -
Log4j使用
2012-12-05 11:34 739... -
Java的JDBC数据库连接池实现方法
2012-09-14 10:20 707虽然J2EE程序员一般都有现成的应用服务器所带的JDBC数据库 ... -
什么是线程安全和线程不安全
2012-08-23 14:49 769什么是线程安全和线程 ... -
线程运行栈信息的获取
2012-08-23 14:49 806线程运行栈信息的获取 ... -
log4j 获取行号
2012-08-23 14:50 1125log4jjava 今天看log4j的日志,突然注意到log ... -
javassist【动态改字节码】学习三
2012-08-23 14:50 2613这里举个简单的例子,来记录下如何用CtClass创建一个类,并 ... -
javassist【动态改字节码】学习二
2012-08-22 11:53 801写了个例子。 有一个类: Java代码 package ... -
javassist[动态改字节码]学习一
2012-08-22 11:52 853前段时间为了公司里的 ... -
JVM启动参数
2012-08-22 11:51 908一、标准参数 1.-server -client 虚拟机服务器 ... -
使用javassist动态注入代码
2012-08-22 11:33 756关于java字节码的处理,目前有很多工具,如bcel,asm。 ... -
利用javaassist修改Class文件
2012-08-22 11:22 1463我们在开发中有时候会遇到这样的问题,就是使用的某个第三方包中的 ... -
JavaMail
2012-08-16 20:03 920在Java EE应用程序中,经常需要发送E-mail。Java ... -
让java变成脚本语言
2012-08-15 12:42 0今天在弄游戏的GM模块,大部分gm命令很简单,只是单纯改 ... -
JavaAgent
2012-08-13 23:43 1239-javaagent 这个JVM参数是JDK 5引进的. j ... -
在Eclipse RCP中实现控制反转(IoC)
2012-08-13 23:13 932摘要:这篇文章描述了 ... -
aop的几种实现方式
2012-08-05 21:14 9151 AOP各种的实现 AOP就是面向切面编程,我们可以从 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-07-28 21:36 571http://www.iteye.com/magazines/ ... -
使用 HttpClient 和 HtmlParser 实现简易爬
2012-05-01 17:57 1067使用 HttpClient 和 HtmlParse ...
相关推荐
11.java基础拾遗--匿名内部类语法详解.mp4
09.java基础拾遗--类的加载和对象的构造过程.mp4
10.java基础拾遗--匿名内部类的应用--实现scala中的集合map方法.mp4
java知识拾遗--三大框架的技术起源.pdfjava知识拾遗--三大框架的技术起源.pdf
java知识拾遗--三大框架的技术起源.docxjava知识拾遗--三大框架的技术起源.docx
Struts、Hibernate和Spring是我们Java开发中的常用的框架,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
NULL 博文链接:https://langyu.iteye.com/blog/1167581
Java语言拾遗 │ │ └─util 工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:https://github.com/GitJavaProgramming/springboot_mybatis 参考...
17. 拾遗物品登记表.pdf
拾遗·椰雕.css
Java学习笔记 入门准备 接触物件 物件向导 资源管理 物件容器 输入输出 執行緒 反射 metadata 资料库 拾遗补缺 视窗程式 参考资料
小学语文教学点滴拾遗
拾遗物品的处理.doc
初中语文文摘社会西游拾遗
常见iphone面试题及答案拾遗,对于面试ios的你肯定会有帮助的。
你必须知道的.net(博客园整理) 作者anytao(王涛) 共22回!很深刻
奥数拾遗201812171