本文目录一览:
如何清除jJS/TrojanDownloader.SWFlash.NBF 特洛伊木马?
在安全模式下用 F-Secure Client Security 8.01 中文版杀毒软件试试。
可以有效阻止并清除木马、病毒。
或者
在安全模式下用 大蜘蛛 dr.web_green 试试(解压后即可使用)。
jdk的配置
JDK 安装
Java实际上分为三个版本:
J2ME:Java 2 Micro Edition,适用于移动端的微型版本,曾广泛应用于机顶盒、车载系统、移动数字电话、个人数字助理(PDA)以及一系列嵌入式设备中,和大家接触最多的便是前几年的手机上搭载的J2SE环境,它几乎支撑了智能手机游戏的半边天。
J2SE:Java 2 Standrad Edition,Java标准版本,只包含基础的Java类库,适用于在桌面端构建Java程序。它是J2ME和J2EE的基础。
J2EE:Java 2 Enterprise Edition,Java企业版本,包含很多企业级特性,适用于简化企业开发的版本,包含一系列特性,如EJB、JAXB、JDBC API、CORBA、Servlet、JSP等等,实际上我们今天使用的JDK名义上是J2SE,但实际上他已经混入了J2EE的很多特性,算得上是J2EE版本了。
PS:Java在1.2版本之后统称为Java 2。当然,在当下“Java”这种叫法已经是熟路的叫法了。
我们在开发中一般安装的是J2SE,若需要J2EE的一些特性我们一般是通过Maven去关联支持类库的。
JRE和JDK的区别
JRE是Java运行环境,只包含了Java程序运行时所需要的一系列类库(Binary),他可以被精简至更小。JDK则是Java开发包,除了包含一整套JRE还包含有一些列为开发者提供的工具(命令行工具和GUI工具)用于管理Java程序(jjs、jmc、jps、jvisualvm、jstatck、jhat、jdoc等等一系列工具),还包含大部分内置类库的源码(包括Native方法的源码)。
开始安装
1、下载安装包
在Oracle官网找到你想要下载的安装包,由于2019年后java会开始收费,故我们只能使用java 8 固定版本。详细参见 00.关于Java开始收费的说明,因此我们只选择jdk1.8.0_181.rar之前的版本,并且只选择小版本号为奇数(如8u191)的安装包。
离线window x64的JDK压缩包
2、安装
linux和windows都可以下载安装版和压缩包,安装过程略过。个人推荐压缩包,下载后解压即可。
3、配置环境变量
Windows
在Windows上需要配置的环境变量为JAVA_HOME、Path和Classpath(Classpath在Java1.5之后可以不设置)
JAVA_HOME: 全路径,指向你的JDK目录,注意,一定是jdkXXX这种目录
Path: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\bin; (不要忘了前面的小点)
Linux
在Linux下配置环境变量需要注意,你需要根据你的实际情况选择是配置全局的环境变量还是该用户下的环境变量。全局环境变量请修改/etc/propfile,用户环境变量请修改~/.bash_profile
在上述文件末尾加入:
export JAVA_HOME=/usr/opt/java/jdkXXX
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存后执行source 你刚刚修改的文件
至此,配置完毕,请打开控制台输入javac命令验证。若出现响应则说明配置成功,若出现“不能识别的指令”则说明配置失败,请按照上文修改。
java nashorm怎么用
从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino。该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调用Java。此外,它还提供了使用jrunscript从命令行运行JavaScript的能力。如果不需要非常好的性能,并且可以接受ECMAScript 3有限的功能集的话,那它相当不错了。
从JDK 8开始,Nashorn取代Rhino成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR 292的新语言特性,其中包含在JDK 7中引入的invokedynamic,将JavaScript编译成Java字节码。
与先前的Rhino实现相比,这带来了2到10倍的性能提升,虽然它仍然比Chrome和Node.js中的V8引擎要差一些。如果你对实现细节感兴趣,那么可以看看这些来自2013 JVM语言峰会的幻灯片。
相关厂商内容
滴滴出行iOS客户端架构演进之路!
微信客户端如何应对弱网络!
函数式编程中的Swift与Swift中的函数式编程!
AWS Webinar 5月24日在线课堂|利用AWS Lambda创建应用
国际范 最前沿 不容错过的容器技术盛会
相关赞助商
GMTC全球移动技术大会2016年6月24日-25日,北京,点击了解详情!
由于Nashorn随JDK 8而来,它还增加了简洁的函数式接口支持。接下来,我们很快就会看到更多细节。
让我们从一个小例子开始。首先,你可能需要安装JDK 8和NetBeans、IntelliJ IDEA或者Eclipse。对于集成JavaScript开发,它们都至少提供了基本的支持。让我们创建一个简单的Java项目,其中包含下面两个示例文件,并运行它:
(点击图片可以查看大图)
在第12行,我们使用引擎的“eval”方法对任意JavaScript代码求值。在本示例中,我们只是加载了上面的JavaScript文件并对其求值。你可能会发现那个“print”并不熟悉。它不是JavaScript的内建函数,而是Nashorn提供的,它还提供了其它方便的、在脚本环境中大有用武之地的函数。你也可以将 “hello world”的打印代码直接嵌入到传递给“eval”方法的字符串,但将JavaScript放在它自己的文件中为其开启了全新的工具世界。
Eclipse目前还没有对Nashorn提供专门的支持,不过,通过JavaScript开发工具(JSDT)项目,它已经支持JavaScript的基本工具和编辑。
(点击图片可以查看大图)
IntelliJ IDEA 13.1(社区版和旗舰版)提供了出色的JavaScript和Nashorn支持。它有一个全功能的调试器,甚至允许在Java和JavaScript之间保持重构同步,因此举例来说,如果你重命名一个被JavaScript引用的Java类,或者重命名一个用于Java源代码中的JavaScript文件,那么该IDE将跨语言修改相应的引用。
下面是一个例子,展示如何调试从Java调用的JavaScript(请注意,NetBeans也提供了JavaScript调试器,如下截图所示):
(点击图片可以查看大图)
你可能会说,工具看上去不错,而且新实现修复了性能以及一致性问题,但我为什么应该用它呢?一个原因是一般的脚本编写。有时候,能够直接插入任何类型的字符串,并任由它被解释,会很方便。有时候,没有碍事的编译器,或者不用为静态类型担心,可能也是不错的。或者,你可能对Node.js编程模型感兴趣,它也可以和Java一起使用,在本文的末尾我们会看到。另外,还有个情况不得不提一下,与Java相比,使用JavaScript进行JavaFX开发会快很多。
Shell脚本
Nashorn引擎可以使用jjs命令从命令行调用。你可以不带任何参数调用它,这会将你带入一个交互模式,或者你可以传递一个希望执行的JavaScript文件名,或者你可以用它作为shell脚本的替代,像这样:
#!/usr/bin/env jjs
var name = $ARG[0];
print(name ? "Hello, ${name}!" : "Hello, world!");
向jjs传递程序参数,需要加“—”前缀。因此举例来说,你可以这样调用:
./hello-script.js – Joe
如果没有“—”前缀,参数会被解释为文件名。
向Java传递数据或者从Java传出数据
正如上文所说的那样,你可以从Java代码直接调用JavaScript;只需获取一个引擎对象并调用它的“eval”方法。你可以将数据作为字符串显式传递……
ScriptEngineManager scriptEngineManager =
new ScriptEngineManager();
ScriptEngine nashorn =
scriptEngineManager.getEngineByName("nashorn");
String name = "Olli";
nashorn.eval("print('" + name + "')");
……或者你可以在Java中传递绑定,它们是可以从JavaScript引擎内部访问的全局变量:
int valueIn = 10;
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("globalValue", valueIn);
nashorn.eval("print (globalValue)", simpleBindings);
JavaScript eval的求值结果将会从引擎的“eval”方法返回:
Integer result = (Integer) nashorn.eval("1 + 2");
assert(result == 3);
在Nashorn中使用Java类
前面已经提到,Nashorn最强大的功能之一源于在JavaScript中调用Java类。你不仅能够访问类并创建实例,你还可以继承他们,调用他们的静态方法,几乎可以做任何你能在Java中做的事。
作为一个例子,让我们看下来龙去脉。JavaScript没有任何语言特性是面向并发的,所有常见的运行时环境都是单线程的,或者至少没有任何共享状态。有趣的是,在Nashorn环境中,JavaScript确实可以并发运行,并且有共享状态,就像在Java中一样:
// 访问Java类Thread
var Thread = Java.type("java.lang.Thread");
// 带有run方法的子类
var MyThread = Java.extend(Thread, {
run: function() {
print("Run in separate thread");
}
});
var th = new MyThread();
th.start();
th.join();
请注意,从Nashorn访问类的规范做法是使用Java.type,并且可以使用Java.extend扩展一个类。
令人高兴的函数式
从各方面来说,随着JDK 8的发布,Java——至少在某种程度上——已经变成一种函数式语言。开发人员可以在集合上使用高阶函数,比如,遍历所有的元素。高阶函数是把另一个函数当作参数的函数,它可以用这个函数参数做些有意义的事情。请看下面Java中高阶函数的示例:
ListInteger list = Arrays.asList(3, 4, 1, 2);
list.forEach(new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o);
}
});
对于这个例子,我们的传统实现方式是使用一个“外部”循环遍历元素,但现在,我们没有那样做,而是将一个“Consumer”函数传递给了“forEach”操作,一个高阶的“内部循环”操作会将集合中的每个元素一个一个地传递给Consumer的“accept”方法并执行它。
如上所述,对于这样的高阶函数,函数式语言的做法是接收一个函数参数,而不是一个对象。虽然在传统上讲,传递函数引用本身超出了Java的范围,但现在,JDK 8有一些语法糖,使它可以使用Lambda表达式(又称为“闭包”)来实现那种表示方式。例如:
ListInteger list = Arrays.asList(3, 4, 1, 2);
list.forEach(el - System.out.println(el));
在这种情况下,“forEach”的参数是这样一个函数引用的形式。这是可行的,因为Customer是一个函数式接口(有时称为“单一抽象方法(Single Abstract Method)”类型或“SAM”)。
那么,我们为什么要在讨论Nashorn时谈论Lambda表达式呢?因为在JavaScript中,开发人员也可以这样编写代码,而在这种情况下,Nashorn可以特别好地缩小Java和JavaScript之间的差距。尤其是,它甚至允许开发人员将纯JavaScript函数作为函数式接口(SAM类型)的实现来传递。
让我们来看一些纯JavaScript代码,它们与上述Java代码实现一样的功能。注意,在JavaScript中没有内置的列表类型,只有数组;不过这些数组的大小是动态分配的,而且有与Java列表类似的方法。因此,在这个例子中,我们调用一个JavaScript数组的“for Each”方法:
var jsArray = [4,1,3,2];
jsArray.forEach(function(el) { print(el) } );