山那边是海 发表于 2015-1-18 11:42:48

JAVA网页设计在java中使用静态编译完成eval

专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。编译|静态我们晓得,在良多剧本言语中都有eval涵数,它能够把字符串转换为亮相式并实行.如在javaScript中

varstr=aid.value+".style.top=10;"

把一个id为"aid"的把持的值掏出来加兼并成一个字符串,假如aid的值是"axman",则
str="axman.style.top=10"
如今我们要让把持axman挪动到顶部为10的地位:

eval(str);

如许这个字符串就酿成了表达式或语句入手下手实行.如许的功效关于静态机关变量是有十分主要的
意义.

那末在java中,假如完成这个功效呢?实在我们能够用静态编译来完成:

假定有一组办法完成分歧的功效,如今要依据传出去的办法名挪用响应的办法,假设没有eval功效,我们
只能这么做:



MyClassmc=newMyClass();
if(str.equals("m1"))
mc.m1();
elseif(str.equals("m1"))
mc.m2();
elseif(str.equals("m3"))
mc.m3();
elseif(.........)
.........();

假如有一百种情形呢?

假如我们用eval办法就能够间接如许:

Stringstr=...........;
eval("mc"+str+"();");

是否是十分便利?关头是怎样完成eval()?

我们把要转换的字符串机关一个完全的类:假如办法是有前往值的.则:

publicObjecteval(Stringstr){
//天生java文件
Strings="classTemp{";
s+="Objectrt(){"
s+="MyClassmc=newMyClass();"
s+="returnmc."+str+"();";
s+="}"
s+="}";
Filef=newFile("Temp.java");
PrintWriterpw=newPrintWriter(newFileWriter(f));
pw.println(s);
pw.close();
//静态编译
com.sun.tools.javac.Mainjavac=newcom.sun.tools.javac.Main();
String[]cpargs=newString[]{"-d","地点目次","Temp.java"};
intstatus=javac.compile(cpargs);
if(status!=0){
System.out.println("没有乐成编译源文件!");
returnnull;
}
//挪用Temp的rt办法前往了局:
MyClassLoadermc=newMyClassLoader();
Classclasz=mc.loadClass("Test.class",true);
Methodrt=clasz.getMethod("rt",newClass[]{String[].class});
returnrt.invoke(null,newObject[]{newString});
//假如办法没有前往就间接挪用
}

我们能够先写很多多少个重载的eval,有前往值和没有前往值的.和能够传送参数的.

如许我们就能够用字符串转换为java的语句来实行.

本文只是一个例子,申明了一个静态编译的头脑,更好的完成请列位伴侣本人来完成.


前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。

愤怒的大鸟 发表于 2015-1-21 13:03:46

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

简单生活 发表于 2015-1-25 22:57:42

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

透明 发表于 2015-2-4 07:17:19

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

不帅 发表于 2015-2-6 01:38:31

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

谁可相欹 发表于 2015-2-9 03:15:04

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

灵魂腐蚀 发表于 2015-2-11 08:06:53

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

第二个灵魂 发表于 2015-2-21 18:44:48

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

深爱那片海 发表于 2015-3-6 20:55:24

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

若相依 发表于 2015-3-9 00:32:20

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

仓酷云 发表于 2015-3-10 13:54:14

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

再见西城 发表于 2015-3-11 04:07:56

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

海妖 发表于 2015-3-17 20:09:30

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

小女巫 发表于 2015-3-17 20:09:33

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

金色的骷髅 发表于 2015-3-23 03:11:07

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

蒙在股里 发表于 2015-4-2 10:55:12

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

柔情似水 发表于 2015-4-17 07:20:16

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

分手快乐 发表于 2015-4-25 02:25:47

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

山那边是海 发表于 2015-5-5 17:36:47

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

乐观 发表于 2015-6-6 08:54:57

是一种为 Internet发展的计算机语言
页: [1]
查看完整版本: JAVA网页设计在java中使用静态编译完成eval