1、Java语言和平台的区别
Java语言 Java语言是静态类型、面向对象的语言
Java平台 平台是提供运行时环境的软件。Java虚拟机(JVM)负责把类文件形式的代码链接起来并执行。JVM不能直接解释Java语言的源文件,要先把源文件转换成类文件
2、Java是编译型语言还是解释型语言?
大多数开发人员都知道Java源文件需要编译成.class文件才能在JVM中运行。.class中的字节码首先会被JVM解释,但在稍后即时编译(JIT)。JVM字节码是从一种人类可读的源码想机器码过渡的中间状态。字节码实际上是一种中间语言(IL)邢台,不是真正的字节码。Java体系中真正的编译器是JIT。所以有人说Java是动态编译的,就是因为JIT的即时编译。如果有人问及你“Java是编译型语言还是解释型语言”,你可以回答“都是”
3、Java7引入的新特性
Java7引入了6个新特性,它们分别是:switch语句中的string、数字常量的新形式、改进的异常处理、try-with-resources、钻石语法以及变参警告位置的修改
3.1、在Java6及以前,switch语句中的case语句只能是byte、char、short和int(也可以是对应的封装类型Byte、Character、Short和Integer)或者枚举常量。Java7中新增了String常量类型。
3.2、在Java6及以前,如果要处理二进制值,就要借助于基础转换,或者调用parseX方法。比如说你想让int x用位模式表示十进制102,你可以这样写
/*代码繁琐,影响效率*/
int x = Integer.parseInt("1100110",2);
/**现在好了,Java7中可以这样写*/
int x = 0b1110010;
当然也可以在数字中加入下划线例如404_555_0122。
3.3、改善后的异常处理。异常处理有两处改进--multicatch和final重抛。java7中允许在一个catch中抓取多个异常。先看下代码示例
try{
doSomethingWhichMightThrowIOException();
doSomethingElseWhichMightThrowSQLException
} catch(FileNotFoundException|ParseException|ConfigurationExcetion e){
...
}catch(final Exception e){
...
throw e;
}
关键字final表明实际抛出的异常就是运行时遇到的异常。这被称为final重抛,这样就不会抛出笼统的异常类型,从而避免在上层只能用笼统的catch捕获。
3.4、try-with-resources(TWR)。基本设想是把资源的作用域限定在代码块内,当程序离开这个代码块的时候,资源会自动关闭。先看下Java6和Java7资源管理语法的区别
/*Java6中的资源管理语法*/
InputStream is = null;
try{
is = url.openStream();
try{
byte[] buf = new byte[2048];
int len;
while((len = is.read(buf)) >= 0){
out.write(buf,0,len);
}
} catch(IOException ioe){
...
} finally{
try{
out.close();
} catch(IOException closeOute){
...
}
}
} catch(FileNotFoundException fnfx){
...
} finally{
try{
if(is != null) is.close();
} catch(IOException closeInx){
...
}
}
/**Java7中的try-with-resources语法大大减少了错误发生的可能性*/
try(OutputStream out = new FileOutputStream(file);
InputStream is = url.openStream() ){
byte[] buf = new byte[2048];
int len;
while((len = is.read(buf)) >= 0){
out.write(buf,0,len);
}
}
/*这是资源自动化管理代码的基本形式--把资源放在try的圆括号内。在这段代码中使用的资源会在处理完成后自动关闭*
3.5、钻石语法。针对创建泛型定义和实例太过繁琐的问题,Java7做了一项改进,
3.6、简化参数方法调用。去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。
转载于:https://blog.51cto.com/aku28907/1790508