- 浏览: 185253 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
louis0911:
发布项目的时候就报错。不知道什么原因。。。自己搭的也报错,把您 ...
Tomcat下发布webservice1 -
Mr_caochong:
非常好的博文,例子实用但是如何输出package信息呢
asm操作Java(二) -
wenjinglian:
up up
Js中escape(),encodeURI()和encodeURIComponent()使用和比较 -
makemyownlife:
看来还得补补知识
tomcat与apache区别 -
tinguo002:
非常的棒!谢谢楼主
对于[0] 和[1] 终于理解了咯,按照上 ...
iterator的用法
1.类:
a)数组:
i.创建:
等价于:
ii.取值:
等价于:
int b = a[1];
iii.赋值:
等价于:
b)构造函数:
i. <init>:
1.创建:
说明:构造函数<init>在执行时,需要首先执行父类的构造函数或者类内部其他构造
函数。
2.调用:
等价于:
说明:在初始化一般对象时,我们需要先调用NEW指令,来创建该对象实例。而由于
后续的INVOKESPECIAL指令是调用类的构造函数,而该指令执行完以后,对对象的引
用将从栈中弹出,所以在NEW指令执行完以后,INVOKESPECIAL指令执行以前,我们
需要调用DUP指令,来增加对象引用的副本。
ii. <clinit>:
1.创建:
等价于:
2. 调用:<clinit>在类被加载时自动调用。
c)字段:
i.一般字段:
1.创建:
等价于:
2.读取:读取类当中名字为a,类型为int的字段的值。
3.设置:
等价于:
ii.静态字段:
1.创建:
等价于:
2.读取:
3.设置:
等价于:
d)方法:
i. 接口方法:
1.定义:
2.调用:
等价于:
ii.一般方法:
1.定义:
等价于:
2.调用:
等价于:
iii.静态方法:
1.定义:
等价于:
2.调用:
等价于:
iv.说明:一般方法比静态方法在声明和调用时均要多传入一个this引用作为参数。另外,当使用INVOKESPECIAL来调用方法时,虚拟机将直接根据指令当中所指明的类类型来调用方法;而当使用INVOKEVIRTUAL来调用方法时,虚拟机将根据实例的实际类型来调用方法。
e)异常处理:
i.声明:
等价于:
说明:在visitTryCatchBlock()当中,第一,二,三个参数均是Label实例,其中一,二表示try块的范围,三则是catch块的开始位置。而第四个参数则是异常类型。而当异常发生时,JVM将会将异常实例置于运行栈的栈顶。
a)数组:
i.创建:
mv.visitInsn(ICONST_3); mv.visitIntInsn(NEWARRAY, T_INT); mv.visitVarInsn(ASTORE, 1); // 将数组引用存到局部变量栈1号的位置
等价于:
int[] a = new int[3];
ii.取值:
mv.visitVarInsn(ALOAD, 1); // 数组引用在局部变量栈1号的位置 mv.visitInsn(ICONST_1); mv.visitInsn(IALOAD); mv.visitVarInsn(ISTORE, 2);
等价于:
int b = a[1];
iii.赋值:
mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_1); mv.visitInsn(ICONST_2); mv.visitInsn(IASTORE);
等价于:
a[1] = 2;
b)构造函数:
i. <init>:
1.创建:
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", ()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd();
说明:构造函数<init>在执行时,需要首先执行父类的构造函数或者类内部其他构造
函数。
2.调用:
mv.visitTypeInsn(NEW, "asm/A"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "asm/A", "<init>", "()V"); mv.visitVarInsn(ASTORE, 1);
等价于:
A a = new A();
说明:在初始化一般对象时,我们需要先调用NEW指令,来创建该对象实例。而由于
后续的INVOKESPECIAL指令是调用类的构造函数,而该指令执行完以后,对对象的引
用将从栈中弹出,所以在NEW指令执行完以后,INVOKESPECIAL指令执行以前,我们
需要调用DUP指令,来增加对象引用的副本。
ii. <clinit>:
1.创建:
MethodVisitor mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("hello world"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); mv.visitInsn(RETURN); mv.visitMaxs(2, 0); mv.visitEnd();
等价于:
static { System.out.println("hello world"); }
2. 调用:<clinit>在类被加载时自动调用。
c)字段:
i.一般字段:
1.创建:
FieldVisitor fv = cw.visitField(ACC_PRIVATE, "a", "I", null, null); fv.visitEnd();
等价于:
private int a;
2.读取:读取类当中名字为a,类型为int的字段的值。
mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, "asm/A", "a", "I");
3.设置:
mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_2); mv.visitFieldInsn(PUTFIELD, "asm/A", "a", "I");
等价于:
a = 2;
ii.静态字段:
1.创建:
FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "a", "I", null, null); fv.visitEnd();
等价于:
private static int a;
2.读取:
mv.visitFieldInsn(GETSTATIC, "asm/A", "a", "I");
3.设置:
mv.visitInsn(ICONST_2); mv.visitFieldInsn(PUTSTATIC, "asm/A", "a", "I");
等价于:
a = 2;
d)方法:
i. 接口方法:
1.定义:
mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "getA", "()V", null, null); mv.visitEnd();
2.调用:
mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEINTERFACE, "asm/IA", "getA", "()V");
等价于:
public interface IA{ public void geA(); } public class A implements IA{ public void geA(){…} } IA a = new A(); a.getA();
ii.一般方法:
1.定义:
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "getA", "()V", null, null); mv.visitCode(); mv.visitInsn(RETURN); mv.visitMaxs(0, 1); mv.visitEnd();
等价于:
public void getA() {}
2.调用:
mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "asm/A", "getA", "()V");
等价于:
A a = new A(): a.getA();
iii.静态方法:
1.定义:
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "getA", "()V", null, null); mv.visitCode(); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd();
等价于:
public static void getA() {}
2.调用:
mv.visitMethodInsn(INVOKESTATIC, "asm/A", "getB", "()V");
等价于:
A.getB();
iv.说明:一般方法比静态方法在声明和调用时均要多传入一个this引用作为参数。另外,当使用INVOKESPECIAL来调用方法时,虚拟机将直接根据指令当中所指明的类类型来调用方法;而当使用INVOKEVIRTUAL来调用方法时,虚拟机将根据实例的实际类型来调用方法。
e)异常处理:
i.声明:
mv.visitTryCatchBlock(l0, l1, l1, "java/lang/Exception"); mv.visitLabel(l0); mv.visitLabel(l1); …
等价于:
try { … } catch (Exception e) { … }
说明:在visitTryCatchBlock()当中,第一,二,三个参数均是Label实例,其中一,二表示try块的范围,三则是catch块的开始位置。而第四个参数则是异常类型。而当异常发生时,JVM将会将异常实例置于运行栈的栈顶。
发表评论
-
ThreadPoolExecutor使用介绍
2012-12-14 16:41 932private static ExecutorService ... -
基于Spring可扩展Schema
2012-12-14 15:58 912在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直 ... -
java调用dll或so文件注意事项
2011-11-15 10:05 5401Java的本地调用jni。调用c为例。在Windows下调 ... -
m2eclipse报错Unable to locate the Javac Compiler in:
2011-03-09 10:21 2445maven test时总报错: Unable to locat ... -
asm操作java(三)
2011-03-04 16:13 27801.Signature: a)说明:J2SE 5.0为了支持范 ... -
asm操作Java(一)
2011-03-04 16:08 25511.流程控制: a)说明:JVM提供了基本的流程控制结构,这些 ... -
JPA注解
2010-11-20 16:11 918JPA注解学习 -
HTTP的status状态值
2010-08-16 10:53 1085长整形标准http状态码,定义如下: Number Descr ... -
HttpClient的相关例子
2010-08-16 09:23 38001、HttpClient使用GET方式通过代理服务器读取页面的 ... -
ContentType 类型大全
2010-07-31 12:37 1206关键字: contenttype ".asf&q ... -
Jboss启动&&停止
2010-05-11 16:53 1364建两个shell脚本start.sh、stop.sh [ro ... -
jxl操作
2010-04-30 11:11 1557import java.io.File; import ja ... -
java对象数组排序
2010-03-24 16:35 1839import java.util.ArrayList; im ... -
文件下载的几种方式
2010-03-19 16:00 812public HttpServletResponse dow ... -
JXL操作Excel
2010-03-02 09:18 978jxl是一个韩国人写的java操作excel的工具, 在开源世 ... -
万能解码器EncodingFilter
2009-12-17 23:24 0/** * $Id: EncodingFilter.jav ... -
java类获取天气预报信息
2009-10-23 18:18 2407网上有很多通过iframe的形式来显示其他网站上的天气预报,这 ... -
图片压缩
2009-09-17 15:19 1129/** * 图片压缩。 * @para ... -
JDOM解析XML
2009-09-16 23:51 1529package com.yujie.xml; impor ... -
DOM解析XML
2009-09-16 19:39 921public class Test_DOM { pub ...
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统