本文目錄一覽:
如何清除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) } );
原創文章,作者:XDNH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144773.html