Java 1.7的新特性

Java 1.7的新特性
Java 1.7的新特性

内容如下:

下面是Java 1.7里新出现的功能的一些用法例子:

对集合的支持

创建List / Set / Map 时写法更简单了。

1.Listlist = ["item"];

2.String item = list[0];

3.Setset = {"item"};

4.Mapmap = {"key" : 1};

5.int value = map["key"];

对资源的自动回收管理

下面的代码看起来有点麻烦… 不是吗

1.BufferedReader br = new BufferedReader(new FileReader(p

ath));

2.try {

3. return br.readLine();

4.} finally {

5. br.close();

6.}

相信你一定会喜欢下面这种写法

1.try (BufferedReader br = new BufferedReader(new FileRea

der(path)) {

2. return br.readLine();

3.}

泛型实例创建过程中类型引用的简化当声明你的对象的接口是,你肯定是不想重复指明泛型类型

看看下面的这种写法多好呀…

1.

2.Maphello = new Map<>();

在数字中使用下划线

1.int billion = 1_000_000_000;

我不知道这个能有多少用处

对字符串进行switch case

1.String availability = "available";

2.switch(availability) {

3. case "available":

4. //code

5. break;

6.

7. case "unavailable":

8. //code

9. break;

10.

11. case "merged":

12. //code

13.

14. default:

15. //code

16. break;

17.}

注意:在把字符串传进Switch case之前,别忘了检查字符串是否为Null。

二进制符号

你可用作二进制字符前加上0b 来创建一个二进制类型。

1.int binary = 0b1001_1001;

一个catch里捕捉多个异常类型

1.try {

2.Here comes your code....

3.}

4.catch(IOException | NullPointerException | ..........)

{

5.}

如果有人能说出更多的新特征,那就更好了。我相信里面有更多的很酷的新东西。

Java 8新特性探究(4)-类型注解 复杂还是便捷

Java 8新特性探究(4):类型注解复杂还是便捷 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? AD: 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? 什么是类型注解 在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;java 8里面,注解可以应用在任何地方,比如: 创建类实例 new @Interned MyObject(); 类型映射 myString = (@NonNull String) str; implements 语句中 class UnmodifiableList T implements @Readonly List @Readonly T { ... } throw exception声明 void monitorTemperature() throws @Critical TemperatureException { ... } 需要注意的是,类型注解只是语法而不是语义,并不会影响java的编译时间,加载时间,以及运行时间,也就是说,编译成class文件的时候并不包含类型注解。 类型注解的作用 先看看下面代码 Collections.emptyList().add( One );inti=Integer.parseInt( hello );System.console ().readLine(); 上面的代码编译是通过的,但运行是会分别报UnsupportedOperationException;NumberFormatException;NullPointerException异常,这些都是runtime error; 类型注解被用来支持在Java的程序中做强类型检查。配合插件式的check framework,可以在编译的时候检测出runtime error,以提高代码质量。这就是类型注解的作用了。 check framework check framework是第三方工具,配合Java的类型注解效果就是1+1 2。它可以嵌入到javac 编译器里面,可以配合ant和maven使用,也可以作为eclipse插件。地址是checker-framework。 check framework可以找到类型注解出现的地方并检查,举个简单的例子: importcheckers.nullness.quals.*;publicclassGetStarted{voidsample(){@NonNullObjec tref=newObject();}} 使用javac编译上面的类 javac-processorcheckers.nullness.NullnessCheckerGetStarted.java 编译是通过,但如果修改成 @NonNullObjectref=null; 再次编译,则出现 GetStarted.java:5:incompatibletypes.found:@Nullable nulltype

Java 1.7的新特性

内容如下: 下面是Java 1.7里新出现的功能的一些用法例子: 对集合的支持 创建List / Set / Map 时写法更简单了。 1.Listlist = ["item"]; 2.String item = list[0]; 3.Setset = {"item"}; 4.Mapmap = {"key" : 1}; 5.int value = map["key"]; 对资源的自动回收管理 下面的代码看起来有点麻烦… 不是吗 1.BufferedReader br = new BufferedReader(new FileReader(p ath)); 2.try { 3. return br.readLine(); 4.} finally { 5. br.close(); 6.} 相信你一定会喜欢下面这种写法 1.try (BufferedReader br = new BufferedReader(new FileRea der(path)) { 2. return br.readLine(); 3.} 泛型实例创建过程中类型引用的简化当声明你的对象的接口是,你肯定是不想重复指明泛型类型 看看下面的这种写法多好呀… 1. 2.Maphello = new Map<>(); 在数字中使用下划线

1.int billion = 1_000_000_000; 我不知道这个能有多少用处 对字符串进行switch case 1.String availability = "available"; 2.switch(availability) { 3. case "available": 4. //code 5. break; 6. 7. case "unavailable": 8. //code 9. break; 10. 11. case "merged": 12. //code 13. 14. default: 15. //code 16. break; 17.} 注意:在把字符串传进Switch case之前,别忘了检查字符串是否为Null。 二进制符号 你可用作二进制字符前加上0b 来创建一个二进制类型。 1.int binary = 0b1001_1001; 一个catch里捕捉多个异常类型 1.try { 2.Here comes your code.... 3.} 4.catch(IOException | NullPointerException | ..........) { 5.} 如果有人能说出更多的新特征,那就更好了。我相信里面有更多的很酷的新东西。

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

java特点、优劣势

优劣势 java优势,是适合团队开发,软件工程可以相对做到规范,这是一个很难比拟的优势。 java劣势,是j2ee的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。系统更新需要重启web服务,很难接受。 编辑本段基本概念 final类:为防止他人从你的类上派生新类,此类是不可扩展的。 多态类:在java中,对象变量是多态的。而java中不支持多重继承。 抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。 接口:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 Java中的每一个类都是从Object类扩展而来的。 object类中的equal和toString方法。 equal用于测试一个对象是否同另一个对象相等。 toString返回一个代表该对象的字符串,每一个类都会从Object类继承该方法,有些类重写了该方法,以便返回当前状态的正确表示。 (toString 方法是一个很重要的方法) 通用编程:任何类类型的所有值都可以同object类型的变量来代替。 封装:就是把数据和行为结合起在一个包中,并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。 重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载。编译器必须挑选出调用哪个方法。 重写:在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。 数组列表:ArrayList动态数组列表,是一个类库,定义在java.util 包中,可自动调节数组的大小。

JAVA8-新特性总结及案例

一 Lambda函数(箭头函数) Lambda 表达式,也可称为闭包,它是推动Java 8 发布の最重要新特性。Lambda 允许把函数作为一个方法の参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变の更加简洁紧凑。 (parameters) ->expression或(parameters) ->{ statement1; statement2; ...... } lambda表达式の重要特征: 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选の参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选の大括号:如果主体包含了一个语句,就不需要使用大括号。 可选の返回关键字:如果主体只有一个表达式返回值则编译器会自动返回,大括号需指定表达式返回数值。 本质上,Lambda函数是对匿名内部类对象の简写。 应用举例1(比较JAVA7与JAVA8):Lambda函数做类の属性 运行结果: 应用举例2(比较JAVA7与JAVA8):Lambda函数做main函数变量

应用举例3: 应用举例4:多线程启动时使用Lambda函数

应用举例5:在 1.7中,匿名内部类只能使用定义为finalの外部变量,1.8会自动为Lambda函数使用の外部变量加上final,因此final可以省略不写。

二方法引用(::方法名 ----》调用了方法对象)应用举例1:

应用举例2:

三函数式接口 函数式接口(Functional Interface)就是一个具有一个方法の普通接口。函数式接口可以被隐式转换为lambda表达式。 函数式接口可以现有の函数友好地支持 lambda。 JDK 1.8之前已有の函数式接口: https://www.360docs.net/doc/014211547.html,ng.Runnable java.util.concurrent.Callable java.security.PrivilegedAction https://www.360docs.net/doc/014211547.html,parator

Java高级特性 总结

一、集合框架和泛型 1.集合框架 (1)定义:java中的集合是指一系列存储数据的接口和类,这些类和接口都位于java.util包 中 (2)原因(为什么使用集合框架):a、数组的大小是固定的;b、数组保存数据类型是单一的; c、数组操作数据比较复杂 (3)分类:主要有Collection、Map两个接口组成。 Collection接口是集合中最大的接口(与Map接口是等级并列关系)

Collection接口的常用方法,所有的List Set都有这些方法 <1>Collection 接口存储一组不唯一、无序的对象. <2>List 接口存储一组不唯一、有序的对象. <3>Set 接口存储一组唯一、无序的对象. <4>Map 接口存储一组键值对象, 提供key-value(k-v)的映射. <5>Iterator:迭代器. <6>Collections:工具类.(提供了对集合进行排序、遍历等多种算法实现) 2、List 接口. List 接口的实现类: <1>ArrayList:实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素效率高. *常用方法:

<2>LinkedList:采用了链表存储方式,插入、删除元素是效率较高. *常用方法: 3、Set接口 <1>存储唯一、无序的对象. <2>Set 里面存放的是对象的引用. <3>采用equals()方法比较两个对象是否为同一对象. <4>Set是接口,没法new,不存在get()方法(因为set无序)

set接口中的数据不能通过下标去访问 遍历集合:转换成数组增强型for 迭代器 Set 接口的实现类: HashSet HashSet集合的特点:集合内的元素是无序排列的 HashSet类是非线性安全的 允许集合元素值为null 4、Iterator接口 <1>增强型for <2>迭代器Iterator *获取Iterator:Collection 接口的iterate()方法. *Iterator 的方法: *boolean hasNext(): 判断是否存在另一个可访问的元素. *Object next(): 返回要访问的下一个元素. 5、Map 接口. Map 接口存储一组成对的键key 值value Key:唯一无序value:不唯一无序 (1) 以键值对形式存储数据(2)不允许出现重复键(3) 元素存储顺序无序Map 接口实现类: <1>HashMap. *常用方法:

JAVA8十大新特性详解

JAVA8 十大新特性详解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API “Java is still not dead—and people are starting to figure that out.” 本教程将用带注释的简单代码来描述新特性,你将看不到大片吓人的文字。 一、接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: default double sqrt(int a) { return Math.sqrt(a); } } Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。 formula.calculate(100); // 100.0 formula.sqrt(16); // 4.0 文中的formula被实现为一个匿名类的实例,该代码非常容易理解,6行代码实现了计算sqrt(a * 100)。在下一节中,我们将会看到实现单方法接口的更简单的做法。

译者注:在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承,允许一个子类同时具有多个父类的接口与功能,在其他语言中,让一个类同时具有其他的可复用代码的方法叫做mixin。新的Java 8 的这个特新在编译器实现的角度上来说更加接近Scala的trait。在C#中也有名为扩展方法的概念,允许给已存在的类型扩展方法,和Java 8的这个在语义上有差别。 二、Lambda 表达式 首先看看在老版本的Java中是如何排列字符串的: Collections.sort(names, new Comparator() { @Override public int compare(String a, String b) { return https://www.360docs.net/doc/014211547.html,pareTo(a); } }); 只需要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常做法都是创建一个匿名的比较器对象然后将其传递给sort方法。 在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式: 看到了吧,代码变得更段且更具有可读性,但是实际上还可以写得更短: 对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字,但是你还可以写得更短点:

JAVA7 新特性介绍(官方公布)中文版

Java7 新特性集合(中文版) Java 7平台标准版文档 甲骨文有两个产品实现Java平台标准版(Java SE)7:Java SE的开发工具包(JDK),7和Java SE的运行环境(JRE)7。 JDK 7中的JRE 7的一个超集,并包含在JRE 7的一切,再加上开发applets 和应用程序所必需的编译器和调试器等工具。 JRE7提供了类库,Java虚拟机(JVM),和其他运行使用Java编程语言编写的applets和应用程序所需的组件。 下面的概念图说明了Java组件技术:

文档之“新” 文档定期更新,以提供在Java平台上的新功能的深入了解信息的开发。一些最近的更新包括: 1.Swing 包括以下主题: JLayerClass Swing包中的新组件,可支持自定义绘制 NimbusLook & Feel Swing包中最新的U组件,可支持自定义皮肤 Heavyweightand Lightweight Components Swing包中的最新属性,可实现透明和半透明窗体 Shapedand Translucent Windows Swing包中的最新组件,可实现自定义形状窗体Hue-Saturation-Luminance(HSL) Color Selection in JColorChooser Class色彩选择器,可支持色彩饱和度和亮度

Image 2 TranslucentWindow Image 3 GradientWindow Image 4 ShapedWindow 2. Java SE 7的网络增强 URLClassLoader.close方法已被添加。这种方法有效地消除了如何支持从一个特定的代码库,特别是在JAR文件中加载的类和资源更新的实现的问题。有关更多信息,请参阅合为URLClassLoader。

Java8新特性之JavaFX 8

Java8新特性之JavaFX 8 JavaFX主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,animation,3D等,同时采用现代化的css方式支持界面设计。同时又采用XUI方式以XML方式设计UI界面,达到显示与逻辑的分离。与android这方面确实有点相似性。 JavaFX历史 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。JavaFX 2.0 包含非常丰富的UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外2.0 版本允许使用FXML 进行UI 定义,这是一个脚本化基于XML 的标识语言。从JDK 7u6开始,JavaFx 就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX 将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 JavaFx8的新特性 全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start()方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。

Java新手必学的21个技术点

Java新手必学的21个技术点 以下为大家盘点作为Java新手必学的21个技术点,希望能够对想要学习编程,学习JAVA的人有些帮助! JNI Java Native Interface,可以允许Java中调用本地接口方法,一般用于C/C++代码的调用。需要注意的是在java中加载so/dll文件的路径问题,本身调用接口并不复杂,但是经常在是否加载了所需的本地接口库中花费较多时间 RMI RemoteMethodInvocation ,java语言特有的远程调用接口,使用还是比较简单方便。不过需要跨语言的情况下,就需要使用 webservice 等其他方式来支持。一般来说,程序都不需要使用RMI,不过可以在特定的情况下使用,我就在一个项目中,使用RMI来进行程序远程启动停止的控制。 标注 也是jdk5 之后引入的。Spring是个优秀的框架,最开始就以xml作为标准的配置文件。不过到了Spring3 之后,尤其是 spring-boot 兴起之后,越来越推崇使用标注来简化xml配置文件了,对于开发者来说,可以节省不少xml配置的时间。但是劣势是在于标注散落在各个类中,不像xml,可以对所有配置有个全局性的理解和管理,所以还没有办法说完全就取代所有的xml。对于一般开发者,会使用标注即可,一些公共组建的开发者可能会需要了解标注的定义和实现,可以在具体需要的时候再细看。 泛型

这是JDK5开始引入的新概念,其实是个语法糖,在编写java代码时会有些许便利,一般的应用或者是业务的开发,只需要简单使用,不一定会用到定义泛型这样的操作,但是开发一些基础公共组件会使用到,可以在需要的时候再细看这个部分,一般情况下只要会简单使用即可。 Maven的使用 Maven 也不是Java里面的内容,但是maven是革命性的,给java开发带来了巨大的便利。从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。可以说,maven已经成为java开发者的标配了。所以我把maven也作为一个java开发者对于基础必备的知识点。以后会再放上一些我的一些对于maven使用的经验和技巧等,这里就不再细说了 XML解析/ JSON解析 其实这两块内容都不是J2SE里面的内容,但是在日常开发中,和其他程序交互,和配置文件交互,越来越离不开这两种格式的解析。 不过对于一个开发者来说,能够了解一些XML/JSON具体解析的原理和方法,有助于你在各个具体的场景中更好的选择合适你的方式来使得你的程序更有效率和更加健壮。 XML:需要了解 DOM解析和 SAX解析的基本原理和各自的适用场景JSON:需要了解一些常用JSON框架的用法, 如 Jackson, FastJson, Gson 等。 时间日期处理

java 8 新特性

1 Stream操作: 1.Map与distinct 方法 Listresult=ocrResultService .getOcrByArtificialScoring(startTime, endTime, letterTypes); ListpeerIds=result.stream().map(TJcArtScore::getPeerLetterId ).distinct().collect(Collectors.toList()); 其中map 方法可以调用list泛型对象中的方法获得返回值(必须有返回); distinct 方法可以将map 或者循环的泛型去重,如果泛型对象是对象类型去重需要重写equals 方法和hashCode 方法; 将过滤后的值转换成list 需要用到collect(Collectors.toList())方法,set 则是Collectors.to Set()方法! 2.Collectors.groupingBy 分组方法 Map>groupPeerId=result.stream() .collect(Collectors.groupingBy(TJcArtScore::getPeerLetterId)); 方法:Collectors.groupingBy 可以把 result 这个list 按照 peerLetterid 进行分组; 3.循环Map方法 Map>gropPeerIds 改对象可以用gropPeerIds.forEach((k, v) -> {}) 方法进行循环map 其中k 是键,v是value 4.使用filter 和flatMap方法筛选和数组降维 样例1: List desPaths = v.stream() .filter(path->StringUtils.isNotBlank(path.getPdfPath())) .flatMap(path->(JSON.parseArray(path.getPdfPath(),String.clas s)).stream()).collect(Collectors.toList()); 这段代码中 filter 方法可以在循环 v 这个list 时通过filter 条件过滤掉某些 无用对象,flatMap 方法可以将v list中子集对象 path 中的某个是集合的属性, 或者可以转换成集合的属性进行降维,把2维数组换成一维数组; 样例2: List splitHotWord = groupHotWord.stream().flatMap(group -> Stream.of(group.split(","))).collect(Collectors.toList());

JAVA介绍及其特性

JAVA介绍及其特性 一、前言 『Java』从1995年的暑假开始在计算机业界就受到了高度注意,特别是在Internet和多媒体(Multimedia)相关产品类方面。Java为何有如此这么大的魅力?人作如此的比喻: Java在全球资讯网(World Wide Web, WWW)地位就如同电子表格(Spreadsheet)与个人计算机(PC)的关系。那Java究竟有那些特色呢? Java是一种软件技术 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言是一种为 Internet发展的计算机语言 是一种使网页(Web Page)产生生动活泼画面的语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种语言,用以产生「小应用程序(Applet(s))」 是一种简化的C++语言是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种将安全性(Security)列为第一优先考虑的语言 是一种使用者不需花费很多时间学习的语言 是一种突破用户端机器环境和CPU结构的语言 是一种「写一次,即可在任何机器上执行(Write OnceRun Anywhere)」的语言是有史以来,第一套允使用者将应用程序(Applications)通过Internet 从远端的服务器(Remote Server)传输到本地端的机器上(LocalMachine)并执行 是一种应用程序提供者不需要知道使用者的计算机硬件(如:Sun, Intel, 或MAC等)与软件(如:SW- UNIX, MAC O/S, Windows, 或NT等)环境的语言(Kestenbaum, 1995)。 下面将依序地介绍Java,首先是Java的发展历史与Java语言介绍,其次依序是Java Applet和HotJava的简单介绍。 二、Java FAQ 下面以问答的方式来说明Java的发展历史与其背景(下列内容整理自Java FAQ list and Tutorial和The Java Language: A White Paper,读者若欲深入了解,请自行参阅原文):

Java各版本特性一览-从Java1.0到Java12

Java各版本特性一览-从Java1.0到Java12 JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢。 JDK Version 1.1 1997-02-19 – JDBC(Java DataBase Connectivity); –支持内部类; – RMI(Remote Method Invocation) ; –反射; – Java Bean; JDK Version 1.2 1998-12-08 Playground(操场) –集合框架; – JIT(Just In Time)编译器; –对打包的Java文件进行数字签名; – JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D类库; – Java插件; – JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型; – Applet中添加声音支持 JDK Version 1.3 2000-05-08 Kestrel(红隼) – Java Sound API; – jar文件索引; –对Java的各个方面都做了大量优化和增强; JDK Version 1.4 2004-02-06 Merlin(隼) – XML处理; – Java打印服务; – Logging API; – Java Web Start;

– JDBC 3.0 API; –断言; – Preferences API; –链式异常处理; –支持IPV6; –支持正则表达式; –引入Imgae I/O API JAVA 5 2004-09-30 Tiger(老虎) –泛型; –增强循环,可以使用迭代方式; –自动装箱与自动拆箱; –类型安全的枚举; –可变参数; –静态引入; –元数据(注解); – Instrumentation; JAVA 6 2006-12-11 Mustang(野马) –支持脚本语言; – JDBC 4.0API; – Java Compiler API; –可插拔注解; –增加对Native PKI(Public Key Infrastructure), Java GSS(Generic Security Service),Kerberos和LDAP(Lightweight Directory Access Protocol)支持; –继承Web Services; JAVA 7

PowerBI技巧之Java 10 新特性介绍

作为当今使用最广泛的编程语言之一的 Java 在 2018 年 3 月 21 日发布了第十个大版本。为了更快地迭代、更好地跟进社区反馈,Java 语言版本发布周期调整为每隔 6 个月发布一次。Java 10 是这一新规则之后,采用新发布周期的第一个大版本。Java 10 版本带来了很多新特性,其中最备受广大开发者关注的莫过于局部变量类型推断。除此之外,还有其他包括垃圾收集器改善、GC 改进、性能提升、线程管控等一批新特性。本文主要针对Java 10 中的新特性展开介绍,希望读者能从本文的介绍中快速了解 Java 10 带来的变化。 局部变量类型推断 局部变量类型推断是 Java 10 中最值得开发人员注意的新特性,这是 Java 语言开发人员为了简化 Java 应用程序的编写而进行的又一重要改进。 这一新功能将为 Java 增加一些新语法,允许开发人员省略通常不必要的局部变量类型初始化声明。新的语法将减少 Java 代码的冗长度,同时保持对静态类型安全性的承诺。局部变量类型推断主要是向 Java 语法中引入在其他语言(比如 C#、JavaScript)中很常见的保留类型名称var。但需要特别注意的是:var不是一个关键字,而是一个保留字。只要编译器可以推断此种类型,开发人员不再需要专门声明一个局部变量的类型,也就是可以随意定义变量而不必指定变量的类型。这种改进对于链式表达式来说,也会很方便。以下是一个简单的例子: 清单 1. 局部变量类型推断示例 1. var list = new ArrayList(); // ArrayList 2. var stream = list.stream(); // Stream 看着是不是有点 JS 的感觉?有没有感觉越来越像 JS 了?虽然变量类型的推断在 Java 中不是一个崭新的概念,但在局部变量中确是很大的一个改进。说到变量类型推断,从 Java 5 中引进泛型,到 Java 7 的<>操作符允许不绑定类型而初始化 List,再到 Java 8 中的 Lambda 表达式,再到现在 Java 10 中引入的局部变量类型推断,Java 类型推断正大刀阔斧地向前进步、发展。 而上面这段例子,在以前版本的 Java 语法中初始化列表的写法为: 清单 2. Java 类型初始化示例 List list = new ArrayList(); Stream stream = getStream(); 在运算符允许在没有绑定ArrayList <>的类型的情况下初始化列表的写法为: 清单 3. Java 7 之后版本类型初始化示例 List list = new LinkedList<>(); Stream stream = getStream(); 但这种 var 变量类型推断的使用也有局限性,仅局限于具有初始化器的局部变量、增强型 for 循环中的索引变量以及在传统 for 循环中声明的局部变量,而不能用于推断方法的参数类型,不能用于构造函数参数类型推断,不能用于推断方法返回类型,也不能用于字段类型推断,同时还不能用于捕获表达式(或任何其他类型的变量声明)。

jdk6新特性

JDK6.0(Mustang)

综述 ?2006 年底,Sun 公司发布了Java Standard Edition 6(Java SE 6)的最终正式版,代号Mustang(野马) ?跟Tiger(Java SE 5)相比,在性能方面有了不错 的提升,但在API 库方面的新特性略少 ?提供了许多实用和方便的功能:脚本,Web service,XML,编译器API,数据库,JMX,网络和Instrumentation 方面都有不错的新特性和功能加强 ?下面列举了一些主要的特性:

◆Web Services ◆Scripting ◆Database ◆More Desktop APIs ◆Monitoring and Management ◆Compiler Access ◆Pluggable Annotations ◆Network ◆Console

Web Services and XML Common Annotations JAXB2 StAX Web Services metadata

Common Annotations ?Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中 ?为其他相关的Java技术定义一套公共Annotation,避免重复建设,保证Java SE和Java EE 各种技术的一致性 随着Annotation元数据功能(JSR 175) 加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务), 如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设

JAVA介绍

java - 计算机编程语言免费编辑修改义项名 所属类别: 生活日用品|编程技术 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式 系统应用程序等。 基本信息 ? 外文名称 Java ? ? 现公司 Oracle ? 推出时间

折叠编辑本段发展历程 JAVA 价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。 由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为"字节码"的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。 由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。1992

2018最新Java面试题整理

1基础篇 1.1基本功 1.1.1面向对象特征 封装,继承,多态和抽象 1、封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法 来改变它内部的数据。在 Java 当中,有 3 种修饰符: public, private 和 protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访 问权限。下面列出了使用封装的一些好处: 1)通过隐藏对象的属性来保护对象内部的状态。 2)提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 3)禁止对象之间的不良交互提高模块化 2、继承 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在 不修改类的情况下给现存的类添加新特性。 3、多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上 的操作可以应用到其他类型的值上面。 4、抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细 节来创建类。 Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术 的主要目的是把类的行为和实现细节分离开。 1.1.2final, finally, finalize 的区别 1、final修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。 因此一个类不能既被声明为 abstract的,又被声明为final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量 必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方 法也同样只能使用,不能重载。 2、finally 在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配 的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 3、finalize 方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去 之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个 对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收 集器删除对象之前对这个对象调用的。

Java8新特性之泛型的目标类型推断

Java8新特性之泛型的目标类型推断 简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List box = new ArrayList(); box.add(new Apple());Apple apple =box.get(0); 上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样: Apple apple = (Apple)box.get(0); 泛型的尴尬 泛型的最大优点是提供了程序的类型安全同时可以向后兼容,但也有尴尬的地方,就是每次定义时都要写明泛型的类型,这样显示指定不仅感觉有些冗长,最主要是很多程序员不熟悉泛型,因此很多时候不能够给出正确的类型参数,现在通过编译器自动推断泛型的参数类型,能够减少这样的情况,并提高代码可读性。 java7的泛型类型推断改进 在以前的版本中使用泛型类型,需要在声明并赋值的时候,两侧都加上泛型类型。例如: Map myMap = new HashMap(); 你可能觉得:老子在声明变量的的时候已经指明了参数类型,为毛还要在初始化对象时再指定?幸好,在Java SE 7中,这种方式得以改进,现在你可以使用如下语句进行声明并赋值: Map myMap = new HashMap<>(); //注意后面的"<>" 在这条语句中,编译器会根据变量声明时的泛型类型自动推断出实例化HashMap时的泛型类型。再次提醒一定要注意new HashMap后面的“<>”,只有加上这个“<>”才表示是自动类型推断,否则就是非泛型类型的HashMap,并且在使用编译器编译源代码时会给出一个警告提示。 但是:Java SE 7在创建泛型实例时的类型推断是有限制的:只有构造器的参数化类型在上下文中被显著的声明了,才可以使用类型推断,否则不行。例如:下面的例子在java 7无法正确编译(但现在在java8里面可以编译,因为根据方法参数来自动推断泛型的类型): List list = new ArrayList<>(); list.add("A");// 由于addAll期望获得Collection类型的参数,因此下面的语句无法通过

相关文档
最新文档