jdk1518的新特性.docx

上传人:b****2 文档编号:1699083 上传时间:2023-05-01 格式:DOCX 页数:45 大小:39.32KB
下载 相关 举报
jdk1518的新特性.docx_第1页
第1页 / 共45页
jdk1518的新特性.docx_第2页
第2页 / 共45页
jdk1518的新特性.docx_第3页
第3页 / 共45页
jdk1518的新特性.docx_第4页
第4页 / 共45页
jdk1518的新特性.docx_第5页
第5页 / 共45页
jdk1518的新特性.docx_第6页
第6页 / 共45页
jdk1518的新特性.docx_第7页
第7页 / 共45页
jdk1518的新特性.docx_第8页
第8页 / 共45页
jdk1518的新特性.docx_第9页
第9页 / 共45页
jdk1518的新特性.docx_第10页
第10页 / 共45页
jdk1518的新特性.docx_第11页
第11页 / 共45页
jdk1518的新特性.docx_第12页
第12页 / 共45页
jdk1518的新特性.docx_第13页
第13页 / 共45页
jdk1518的新特性.docx_第14页
第14页 / 共45页
jdk1518的新特性.docx_第15页
第15页 / 共45页
jdk1518的新特性.docx_第16页
第16页 / 共45页
jdk1518的新特性.docx_第17页
第17页 / 共45页
jdk1518的新特性.docx_第18页
第18页 / 共45页
jdk1518的新特性.docx_第19页
第19页 / 共45页
jdk1518的新特性.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

jdk1518的新特性.docx

《jdk1518的新特性.docx》由会员分享,可在线阅读,更多相关《jdk1518的新特性.docx(45页珍藏版)》请在冰点文库上搜索。

jdk1518的新特性.docx

jdk1518的新特性

jdk1.5---jdk1.8的新特性

JDK1.5新特性:

1.自动装箱与拆箱:

IntegeriObj=3;

System.out.println(iObj+12);

  Integeri1=137(-128--127范围时,为true);

  Integeri2=137(-128--127范围时,为true);

  System.out.println(i1==i2);//false,但是括号中时却返回ture,原因是Integer采用的是享元模式

  Integeri3=Integer.valueOf(213);

  Integeri4=Integer.valueOf(213);

  System.out.println(i3==i4);//同上,另一种包装形式

 

2.枚举(常用来设计单例模式)

publicclassEnumTest{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

  WeekDay1weekDay=WeekDay1.MON;

  System.out.println(weekDay.nextDay());

  WeekDayweekDay2=WeekDay.FRI;

  System.out.println(weekDay2);

  System.out.println(weekDay2.name());

  System.out.println(weekDay2.ordinal()); 

  System.out.println(WeekDay.valueOf("SUN").toString());

  System.out.println(WeekDay.values().length);

  newDate(300){};

}

publicenumWeekDay{

  SUN

(1),MON(),TUE,WED,THI,FRI,SAT;

  privateWeekDay(){System.out.println("first");}

  privateWeekDay(intday){System.out.println("second");}

}

publicenumTrafficLamp{

  RED(30){

   publicTrafficLampnextLamp(){

    returnGREEN;

   }

  },

  GREEN(45){

   publicTrafficLampnextLamp(){

    returnYELLOW;

   }   

  },

  YELLOW(5){

   publicTrafficLampnextLamp(){

    returnRED;

   }   

  };

  publicabstractTrafficLampnextLamp();

  privateinttime;

  privateTrafficLamp(inttime){this.time=time;}

}

}

3.静态导入

importstaticjava.lang.Math.*;

publicclassStaticImport{

publicstaticvoidmain(String[]args){

  intx=1;

  try{

   x++;

  }finally{

   System.out.println("template");

  }

  System.out.println(x);

  

  

  System.out.println(max(3,6));

  System.out.println(abs(3-6));

  

}

}

4.可变参数

publicclassVarableParameter{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

  System.out.println(add(2,3));

  System.out.println(add(2,3,5));  

}

publicstaticintadd(intx,int...args){

  intsum=x;

/*  for(inti=0;i

   sum+=args[i];

  }*/

  

  for(intarg:

args){

   sum+=arg;

  }

  returnsum;

}

}

5.内省

ReflectPointpt1=newReflectPoint(3,5);

BeanInfobeanInfo=Introspector.getBeanInfo(pt1.getClass());

  PropertyDescriptor[]pds=beanInfo.getPropertyDescriptors();

  ObjectretVal=null;

  for(PropertyDescriptorpd:

pds){

    MethodmethodGetX=pd.getReadMethod();

    retVal=methodGetX.invoke(pt1);

  }

jdk1.6新特性:

1.Web服务元数据

Java里的Web服务元数据跟微软的方案基本没有语义上的区别,自从JDK5添加了元数据功能(Annotation)之后,SUN几乎重构了整个J2EE体系,由于变化很大,干脆将名字也重构为JavaEE,JavaEE(当前版本为5.0)将元数据纳入很多规范当中,这其中就包括WebServices的相关规范,加入元数据之后的WebServices服务器端编程模型就跟上面看到的C#片断差不多了,这显然比以前的JAX-RPC编程模型简单(当然,Axis的编程模型也很简单).这里要谈的Web服务元数据(JSR181)只是JavaWeb服务规范中的一个,它跟CommonAnnotations,JAXB2,StAX,SAAJ和JAX-WS等共同构成JavaEE5的WebServices技术堆栈.

packageWebServices;

importjava.io.File;

importjava.io.IOException;

importjavax.jws.Oneway;

importjavax.jws.WebMethod;

importjavax.jws.WebParam;

importjavax.jws.WebResult;

importjavax.jws.WebService;

importjavax.xml.ws.Endpoint;

/**

*@authorchinajash

*/

@WebService(targetNamespace="

publicclassWSProvider{

    @WebResult(name="Greetings")//自定义该方法返回值在WSDL中相关的描述    

    @WebMethod

    publicStringsayHi(@WebParam(name="MyName")Stringname){

        return"Hi,"+name;//@WebParam是自定义参数name在WSDL中相关的描述

    }    

    @Oneway//表明该服务方法是单向的,既没有返回值,也不应该声明检查异常

    @WebMethod(action="printSystemTime",operationName="printSystemTime")//自定义该方法在WSDL中相关的描述

    publicvoidprintTime(){

        System.out.println(System.currentTimeMillis());

    }

    publicstaticvoidmain(String[]args){

        ThreadwsPublisher=newThread(newWSPublisher());

        wsPublisher.start();

    }    

    privatestaticclassWSPublisherimplementsRunnable{

        publicvoidrun(){

            //发布WSProvider到http:

//localhost:

8888/chinajash/WSProvider这个地址,之前必须调用wsgen命令

            //生成服务类WSProvider的支持类,命令如下:

            //wsgen-cp.WebServices.WSProvider

            Endpoint.publish("http:

//localhost:

8888/chinajash/WSProvider",newWSProvider());

        }        

    }

}

如果想看到WebServicesEngine生成的WSDL文件是否遵守上面的元数据,我们没有必要将上面的WSProvider部署到支持JSR-181的应用服务器或Servlet形式的WebServicesEngine,现在JDK6已经提供了一个很简单的机制可以用来测试和发布WebServices,下面讲讲如何在JDK6环境下发布WebServices和查看生成的WSDL

1.将/bin加入path环境变量

2.在命令行下切换当前目录到WSProvider的class文件所在的目录,运行下面命令

wsgen-cp.WebServices.WSProvider

在这个例子中会生成以下3个类的源代码文件及class文件

SayHi

SayHiResponse

PrintTime

3.执行如下代码发布WSProvider到http:

//localhost:

8888/chinajash/WSProvider,在这里可以执行WSProvider类的main方法就可以

Endpoint.publish("http:

//localhost:

8888/chinajash/WSProvider",newWSProvider());

4.在浏览器输入http:

//localhost:

8888/chinajash/WSProvider?

wsdl就可以看到生成的WSDL文件,为了节省篇幅,这里就不把生成的WSDL文件贴上了,大家可以自己动手试试.

2.脚本语言支持

JDK6增加了对脚本语言的支持(JSR223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode后再执行,所以比原来边解释边执行效率要高很多。

加入对脚本语言的支持后,对Java语言也提供了以下好处。

1、许多脚本语言都有动态特性,比如,你不需要用一个变量之前先声明它,你可以用一个变量存放完全不同类型的对象,你不需要做强制类型转换,因为转换都是自动的。

现在Java语言也可以通过对脚本语言的支持间接获得这种灵活性。

2、可以用脚本语言快速开发产品原型,因为现在可以Edit-Run,而无需Edit-Compile-Run,当然,因为Java有非常好的IDE支持,我们完全可以在IDE里面编辑源文件,然后点击运行(隐含编译),以此达到快速开发原型的目的,所以这点好处基本上可以忽略。

3、通过引入脚本语言可以轻松实现Java应用程序的扩展和自定义,我们可以把原来分布在在Java应用程序中的配置逻辑,数学表达式和业务规则提取出来,转用JavaScript来处理。

Sun的JDK6实现包含了一个基于MozillaRhino的脚本语言引擎,支持JavaScript,这并不是说明JDK6只支持JavaScript,任何第三方都可以自己实现一个JSR-223兼容的脚本引擎使得JDK6支持别的脚本语言,比如,你想让JDK6支持Ruby,那你可以自己按照JSR223的规范实现一个Ruby的脚本引擎类,具体一点,你需要实现javax.script.ScriptEngine(简单起见,可以继承javax.script.AbstractScriptEngine)和javax.script.ScriptEngineFactory两个接口。

当然,在你实现自己的脚本语言引擎之前,先到project这里看看是不是有人已经帮你做了工作,这样你就可以直接拿来用就行。

ScriptingAPI

---------------------------------------------------------------------

ScriptingAPI是用于在Java里面编写脚本语言程序的API,在Javax.script中可以找到ScriptingAPI,我们就是用这个API来编写JavaScript程序,这个包里面有一个ScriptEngineManager类,它是使用ScriptingAPI的入口,ScriptEngineManager可以通过jar服务发现(servicediscovery)机制寻找合适的脚本引擎类(ScriptEngine),使用ScriptingAPI的最简单方式只需下面三步

1、创建一个ScriptEngineManager对象

2、通过ScriptEngineManager获得ScriptEngine对象

3、用ScriptEngine的eval方法执行脚本

下面是一个HelloWorld程序

/***@authorchinajash*/

publicclassHelloScript{

publicstaticvoidmain(String[]args)throwsException{        

ScriptEngineManagerfactory=newScriptEngineManager();//step1        

ScriptEngineengine=factory.getEngineByName("JavaScript");//Step2            

engine.eval("print('Hello,Scripting')");//Step3    

}    

}

运行上面程序,控制台会输出Hello,Scripting上面这个简单的Scripting程序演示了如何在Java里面运行脚本语言,除此之外,我们还可以利用ScriptingAPI实现以下功能1、暴露Java对象为脚本语言的全局变量2、在Java中调用脚本语言的方法3、脚本语言可以实现Java的接口4、脚本语言可以像Java一样使用JDK平台下的类下面的类演示了以上4种功能

packageScripting;

importjava.io.File;

importjavax.script.Invocable;

importjavax.script.ScriptEngine;

importjavax.script.ScriptEngineManager;

importjavax.script.ScriptException;

/***@authorchinajash*/

publicclassScriptingAPITester{    

publicstaticvoidmain(String[]args)throwsException{        

ScriptEngineManagermanager=newScriptEngineManager();        

ScriptEngineengine=manager.getEngineByName("JavaScript");        

testScriptVariables(engine);//演示如何暴露Java对象为脚本语言的全局变量         

testInvokeScriptMethod(engine);//演示如何在Java中调用脚本语言的方法         

testScriptInterface(engine);//演示脚本语言如何实现Java的接口         

testUsingJDKClasses(engine);//演示脚本语言如何使用JDK平台下的类    

}        

publicstaticvoidtestScriptVariables(ScriptEngineengine)throwsScriptException{        

Filefile=newFile("test.txt");        

engine.put("f",file);        

engine.eval("println('TotalSpace:

'+f.getTotalSpace())");            

}        

publicstaticvoidtestInvokeScriptMethod(ScriptEngineengine)throwsException{        

Stringscript="functionhello(name){return'Hello,'+name;}";        

engine.eval(script);        

Invocableinv=(Invocable)engine;        

Stringres=(String)inv.invokeFunction("hello","Scripting");        

System.out.println("res:

"+res);    

}        

publicstaticvoidtestScriptInterface(ScriptEngineengine)throwsScriptException{        

Stringscript="varobj=newObject();obj.run=function(){println('runmethodcalled');}";        

engine.eval(script);        

Objectobj=engine.get("obj");        

Invocableinv=(Invocable)engine;        

Runnabler=inv.getInterface(obj,Runnable.class);        

Threadth=newThread(r);        

th.start();    

}        

publicstaticvoidtestUsingJDKClasses(ScriptEngineengine)throwsException{        

//Packages是脚本语言里的一个全局变量,专用于访问JDK的package        

Stringjs="functiondoSwing(t){

varf=newPackages.javax.swing.JFrame(t);f.setSize(400,300);

f.setVisible(true);}";        

engine.eval(js);        

Invocableinv=(Invocable)engine;        

inv.invokeFunction("doSwing","ScriptingSwing");    

}

}ScriptingTool

--------------------------------------------------------------------------------

SUN提供的JDK6中有一个命令行工具?

?

jrunscript,你可以在/bin下面找到这个工具,jrunscript是一个脚本语言的解释程序,它独立于脚本语言,但默认是用JavaScript,我们可以用jrunscript来测试自己写的脚本语言是否正确,下面是一个在命令行运行jrunscript的简单例子

jrunscript

js>println("Hello,JrunScript");

Hello,JrunScript

js>9*8

72.0

js>

3.JTable的排序和过滤

原来的JTable基本上是只能显示数据,在JDK6新增了对JTable的排序和过滤功能,下面代码演示了这两个功能

/**

*@authorchinajash

*/

publicclassJTableTester{

    staticStringdata[][]={

        {"China","Beijing","Chinese"},

        {"America","Washington","English"},

        {"Korea","Seoul","Korean"},

        {"Japan","Tokyo","Japanese"},

        {"France","Paris","French"},

        {"England","London","English"},

        {"Germany","Berlin","German"},};

staticStringtitles[]={"Country","Capital","Language"};

publicstaticvoidmain(String[]args){        

  DefaultTableModelm=newDefaultTableModel(data,titles);

   JTablet=newJTabl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2