仓酷云

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

[学习教程] 发布一篇Java编程的静态性,第5部分: 静态转换类

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:12:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。
在经由一段工夫的歇息以后,DennisSosnoski又返来推出了他的Java编程的静态性系列的第5部分。您已在后面的文章中看到了怎样编写用于转换Java类文件以改动代码举动的程序。在本期中,Dennis将展现怎样利用Javassist框架,把转换与实践的类加载历程结合起来,用以举行天真的“立即”面向方面的特征处置。这类办法同意您决意想要在运转时改动的内容,并潜地在每次运转程序时做出分歧的修正。在全部过程当中,您还将更深切地了解向JVM中加载类的一样平常成绩。
在第4部分“用Javassist举行类转换”中,您进修了怎样利用Javassist框架来转换编译器天生的Java类文件,同时写回修正过的类文件。这类类文件转换步骤关于做出持久变动是很幻想的,可是假如想要在每次实行使用程序时做出分歧的变动,这类办法就纷歧定很便利。关于这类临时的变动,接纳在您实践启动使用程序时起感化的办法要好很多。
JVM系统布局为我们供应了如许做的便当路子DD经由过程利用classloader完成。经由过程使用classloader挂钩(hook),您能够拦阻将类加载到JVM中的历程,并在实践加载这些类之前转换它们。为了申明这个历程是怎样事情的,我将起首展现类加载历程的间接拦阻,然后展现Javassist怎样供应了一种可在您的使用程序中利用的便当捷径。在全部过程当中,我将使用取自本系列之前文章中的代码片段。
加载地区
运转Java使用程序的一般体例是作为参数向JVM指定主类。这关于尺度操纵没有甚么成绩,可是它没有供应实时拦阻类加载历程的任何路子,而这类拦阻对年夜多半程序来讲是很有效的。正如我在第1部分“类和类装进”中所会商的,很多类乃至在主类还没有入手下手执行之前就已加载了。要拦阻这些类的加载,您必要在程序的实行过程当中举行某种水平的重定向。
侥幸的是,摹拟JVM在运转使用程序的主类时所做的事情是相称简单的。您所需做的就是利用反射(这是在不得第2部分中先容的)来起首找到指定类中的静态main()办法,然后利用预期的命令行参数来挪用它。清单1供应了完成这个义务的示例代码(为复杂起见,我省略了导进和非常处置语句):
清单1.Java使用程序运转器
public class Run
{
  public static void main(String[] args) {
    if (args.length >= 1) {
      try {

        // load the target class to be run
        Class clas = Run.class.getClassLoader().
          loadClass(args[0]);

        // invoke "main" method of target class
        Class[] ptypes =
          new Class[] { args.getClass() };
        Method main =
          clas.getDeclaredMethod("main", ptypes);
        String[] pargs = new String[args.length-1];
        System.arraycopy(args, 1, pargs, 0, pargs.length);
        main.invoke(null, new Object[] { pargs });

      } catch ...
      }

    } else {
      System.out.println
        ("Usage: Run main-class args...");
    }
  }
}
要利用这个类来运转Java使用程序,只需将它指定为java命令的方针类,前面随着应用程序的主类和想要传送给使用程序的其他任何参数。换句话说,假如用于运转Java使用程序的命令为:
java test.Test arg1 arg2 arg3
您响应地要经由过程以下命令利用Run类来运转使用程序:
java Run test.Test arg1 arg2 arg3
<p>
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-20 16:56:05 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
海妖 该用户已被删除
板凳
发表于 2015-1-29 13:11:00 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
若天明 该用户已被删除
地板
发表于 2015-2-4 07:55:33 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-9 18:27:51 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
简单生活 该用户已被删除
6#
发表于 2015-2-27 15:44:12 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
再现理想 该用户已被删除
7#
发表于 2015-3-9 09:08:50 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
老尸 该用户已被删除
8#
发表于 2015-3-16 21:16:39 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
再见西城 该用户已被删除
9#
发表于 2015-3-23 02:12:06 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-16 09:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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