仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 720|回复: 8
打印 上一主题 下一主题

[学习教程] 来看数组协变带来的静态范例毛病

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:05:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。
在方才一个通不外Java字节码校验的例子里,我们看到JVM会对其所加载的.class文件做校验,以包管范例平安。但Java里有这么一种情形,是编译器和JVM的字节码校验都没法检测到,而要到实践运转的时候才干发明的毛病——数组的协变招致的范例静态体系毛病。
仍是像前一帖一样,用ASM来天生字节码:
Java代码
  1. importjava.io.FileOutputStream;
  2. importorg.objectweb.asm.ClassWriter;
  3. importorg.objectweb.asm.MethodVisitor;
  4. importorg.objectweb.asm.Opcodes;
  5. publicclassTestASMimplementsOpcodes{
  6. publicstaticvoidmain(String[]args)throwsException{
  7. ClassWritercw=newClassWriter(0);
  8. cw.visit(
  9. V1_5,//classformatversion
  10. ACC_PUBLIC,//classmodifiers
  11. "TestVerification",//classnamefullyqualifiedname
  12. null,//genericsignature
  13. "java/lang/Object",//superclassfullyqualifiedname
  14. newString[]{}//implementedinterfaces
  15. );
  16. MethodVisitormv=cw.visitMethod(
  17. ACC_PUBLIC+ACC_STATIC,//accessmodifiers
  18. "main",//methodname
  19. "([Ljava/lang/String;)V",//methoddescription
  20. null,//genericsignature
  21. null//exceptions
  22. );
  23. mv.visitCode();
  24. mv.visitInsn(ICONST_1);
  25. mv.visitTypeInsn(ANEWARRAY,"java/lang/Float");
  26. mv.visitTypeInsn(CHECKCAST,"[Ljava/lang/Object;");
  27. mv.visitVarInsn(ASTORE,0);
  28. mv.visitVarInsn(ALOAD,0);
  29. mv.visitInsn(ICONST_0);
  30. mv.visitLdcInsn("astring");
  31. mv.visitInsn(AASTORE);
  32. mv.visitVarInsn(ALOAD,0);
  33. mv.visitInsn(ICONST_0);
  34. mv.visitInsn(AALOAD);
  35. mv.visitMethodInsn(INVOKEVIRTUAL,"java/lang/Object","toString","()V");
  36. mv.visitInsn(RETURN);
  37. mv.visitMaxs(3,1);
  38. mv.visitEnd();//endmethod
  39. cw.visitEnd();//endclass
  40. byte[]clz=cw.toByteArray();
  41. FileOutputStreamout=newFileOutputStream("TestVerification.class");
  42. out.write(clz);
  43. out.close();
  44. }
  45. }
复制代码
<p>
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。
海妖 该用户已被删除
沙发
发表于 2015-1-20 14:01:32 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-30 21:48:27 来自手机 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
山那边是海 该用户已被删除
地板
发表于 2015-2-2 17:23:19 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
5#
发表于 2015-2-8 02:34:40 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
小魔女 该用户已被删除
6#
发表于 2015-2-24 02:09:34 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-7 10:29:16 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
兰色精灵 该用户已被删除
8#
发表于 2015-3-14 22:49:01 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
乐观 该用户已被删除
9#
发表于 2015-3-21 14:50:30 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表