package p1;
為離石等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及離石網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、離石網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
import java.util.Arrays;
import java.util.LinkedList;
public class Guy
{
public static void recursionSub ( LinkedListint[] list, int count, int[] array, int ind, int start, int... indexs )
{
start++;
if (start count - 1)
{
return;
}
if (start == 0)
{
indexs = new int[array.length];
}
for ( indexs = ind; indexs array.length; indexs++ )
{
recursionSub (list, count, array, indexs + 1, start, indexs);
if (start == count - 1)
{
int[] temp = new int[count];
for ( int i = count - 1; i = 0; i-- )
{
temp[start - i] = array[indexs[start - i]];
}
list.add (temp);
}
}
}
public static void main ( String[] args )
{
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
LinkedListint[] list = new LinkedListint[] ();
recursionSub (list, 3, array, 0, -1);
for ( int[] strings : list )
{
System.out.println (Arrays.toString (strings));
}
}
}
使用Java8,Nashorn大大提高了JavaScript 引擎引入,以取代現(xiàn)有的Nashorn Java腳本引擎。Nashorn提供2至10倍更好的性能,因?yàn)樗苯泳幾g代碼在存儲器,并傳遞到字節(jié)碼JVM.Nashorn使用invokedynamics函數(shù),在Java7引入以提高性能。
jjs
對于Nashorn引擎,JAVA8引入了一個新的命令行工具,JJS到控制臺執(zhí)行Java腳本代碼。
解讀js文件
創(chuàng)建并保存sample.js在 C: JAVA 文件夾。
sample.jsprint('Hello World!');
打開控制臺并使用下面的命令。
C:\JAVAjjs sample.js
看到結(jié)果
Hello World!
JJS在交互模式
打開控制臺并使用下面的命令
C:\JAVAjjs
jjs print("Hello, World!")
Hello, World!
jjs quit()
傳遞參數(shù)
打開控制臺并使用下面的命令。
C:\JAVA jjs -- a b c
jjs print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs
在JAVA調(diào)用JavaScript
使用ScriptEngineManager,JavaScript代碼用Java編寫可以被調(diào)用。
示例
選擇使用任何編輯器創(chuàng)建以下java程序在 C:/ JAVA
Java8Tester.javaimport javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Java8Tester {
public static void main(String args[]){
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Mahesh";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("10 + 2");
}catch(ScriptException e){
System.out.println("Error executing script: "+ e.getMessage());
}
System.out.println(result.toString());
}
}
驗(yàn)證結(jié)果
使用javac編譯器編譯如下類
C:\JAVAjavac Java8Tester.java
現(xiàn)在運(yùn)行Java8Tester看到的結(jié)果
C:\JAVAjava Java8Tester
看到結(jié)果
Mahesh
12
從JavaScript調(diào)用Java
下面的例子將展示如何導(dǎo)入和使用Java類的Java腳本。
創(chuàng)建并保存 sample.js 在 c: JAVA 文件夾.
sample.jsvar BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);
打開控制臺并使用下面的命令。
C:\JAVAjjs sample.js
看到結(jié)果
78952000000000000003.20
js與java是不同語言,運(yùn)行在不同環(huán)境下,因此無法直接獲得對方數(shù)據(jù)。
java運(yùn)行在服務(wù)器端,在同一個jsp文件中,java先運(yùn)行,js后運(yùn)行,java可以生成一段js代碼,保證js運(yùn)行得到相應(yīng)的結(jié)果,因此可以用java定義js變量的方式來傳遞數(shù)據(jù),例如:
script
var url="%=url%";
alert(username);
/script
上面例子,%%中的內(nèi)容會在服務(wù)器端運(yùn)行,在“”中間輸出網(wǎng)址,瀏覽器就會加載下面的結(jié)果:
script
var url="gif8點(diǎn)吸煙 ";
alert(url);
/script
這部分就是標(biāo)準(zhǔn)的js代碼了。
1.取得腳本解釋器的管理器Manager
2.從管理器中取得js的解釋器實(shí)例ScriptEngine
3.取得存儲javascript變量的Bindings實(shí)例
4.把一個java.io.Reader流及Bindings傳遞給ScriptEngine的eval方法返回腳本運(yùn)行結(jié)果,如果執(zhí)行中發(fā)生錯誤,會拋出ScriptException異常。
例:運(yùn)行javascript腳本的一個java程序
throwsIOException{ScriptEngineManagerscriptManager=newScriptEngineManager;//從管理器中獲取js的解釋器//定義我們要運(yùn)行的腳本文件Stringfilename=null;//通過解釋器來獲得存儲javascript變量的Bindings的實(shí)例,使它們提供給腳本。Bindingsbindings=js.createBindings;//在map中獲取和設(shè)置值的方法publicObjectget;//使用我們的name/value對(即javascript變量)Bindingsbindings=newSimpleBindings(defaults);//創(chuàng)建一個變量,用于存放腳本執(zhí)行的內(nèi)容ScriptContextcontext=newSimpleScriptContext();//設(shè)置那些Bindings在Context中,使它們可讀。但這樣的變量定義的腳本不要放入我們的Map中context.setBindings(bindings,ScriptContext.GLOBAL_SCOPE);BufferedReaderin=newBufferedReader(newFileReader(filename));Stringline;while((line=in.readLine())!=null){line=line.trim();if(line.length()==0)continue;//跳過空行if(line.charAt(0)==‘#‘)continue;//跳過命令intpos=line.indexOf(":");if(pos==-1){thrownewIllegalArgumentException("syntax:"+line);}Stringname=line.substring(0,pos).trim();Stringvalue=line.substring(pos+1).trim();charfirstchar=value.charAt(0);intlen=value.length();charlastchar=value.charAt(len-1);if(firstchar==‘"‘lastchar==‘"‘){//雙引號引用的值為字符串defaults.put(name,value.substring(1,len-1));}elseif(Character.isDigit(firstchar)){//如果開始是一個數(shù)字try{doubled=Double.parseDouble(value);defaults.put(name,value);}catch(NumberFormatExceptione){//沒有數(shù)字,是一個stringdefaults.put(name,value);}}elseif("true".equals(value)){//處理布爾值defaults.put(name,Boolean.TRUE);}elseif("false".equals(value)){defaults.put(name,Boolean.FALSE);}elseif("null".equals(value)){//處理null值defaults.put(name,null);}elseif(firstchar==‘{‘lastchar==‘}‘){//如果值是在一對大括號之內(nèi),則執(zhí)行javascript代碼Stringscript=value.substring(1,len-1);Objectresult=engine.eval(script,context);defaults.put(name,result);}else{//其它情況,剛好是一個字符串defaults.put(name,value);}}}//一個簡單的類的測試程序publicstaticvoidmain(String[]args)throwsIOException,ScriptException{Configurationdefaults=newConfiguration();defaults.load(args[0]);Set