A. java7,8的几个特性(自己的理解,大神们多指
JDK 1.7部分新特性
1)switch支持String类型 本质上是对int类型的匹配,
实现原理为:通过case后面的str对象调用hashcode()方法,得到一个int类型的hash值,然后用这个hash值来唯一标识这个case.当匹配时,首先调用这个字符串的hashcode()方法,获得一个hash值,用这个hash值与case匹配,若没有则不存在,若有则接着调用equals()方法进行匹配。String变量不能为null ,case后的字符串也不能为null ,否则会出现NullPointerException.
2)可以在catch中捕获多个异常
3)对数值字面量进行了改进
增加了二进制字面量的表示 0B001 0b001
在数字中可以添加分隔符 123_456 下划线只能用在数字中间 编译时被去掉
4)使用泛型的时候增加了类型推断机制
java7之前
Map<String,String> map = new HashMap<String,String>();
java7引进类型推断后
Map<String,String> map = new HashMap<>();
5)增加了 try-with-resources语句 (声明一个或多个资源的try语句)
资源指在使用完成后,必须关闭释放的对象,try-with-resources语句确保在该语句执行之后关闭每个资源
try(InputStreamfis=newFileInputStrean("input.txt");){while(fis.read()!=1){
System.out.println(fis.read());
}
}catch(Exceptione){
e.printStackTrace();
}
DK 1.8 部分新特性
1)增加了Lambda表达式的支持 Lambda表达式是一个匿名函数 允许把函数作为一个方法的参数
示例
Arrays.AsList(2,8,1).forEach(i->System.out.println(i));//1
Arrays.AsList(2,8,1).forEach((Integeri)->System.out.println(i));//2
在java8以前 对于列表的排序 如果有自定义的类 则需要制定自定义的排序方法
Person[]people={newPerson("Iack",22),newPerson("Tony",35)};
Arrays.sort(people,newComparator<Person>(){//自定义排序方法new一个Conparator重写compare方法
@Overridepublicintcompare(Persona,Personb){returna.getAge()-b.getAge();
}
});for(Personp:people){
System.out.println(p);
}
Lambda表达式
Arrays.sort(people,(Persona,Personb)->a.getAge()-b.getAge());
Arrays.sort(people,(a,b)->a.getAge()-b.getAge());
Lambda表达式是通过函数式接口实现的 (只有一个方法的普通接口)。函数式接口可以隐式的转换为Lambda表达式,为了与普通的接口区分开,增加了注解@FunctionalInterface
@FunctionalInterfaceinterface
fun{
voidf();
}
2)接口增加了方法的默认实现和静态方法 JDK1.8通过使用关键字 default可以给接口中的方法添加默认实现,此外,接口中还可以定义静态方法。
interfaceIn8{
voidf();
defaultvoidg(){
System.out.println("default");
}
staticvoidh(){
System.out.println("static");
}
}
引入接口默认方法实现 是为了实现接口升级 在原有的设计中,如果想要升级接口,例如给接口中添加一个新的方法,会导致所有实现这个接口的类都需要被修改。
3)方法引用 方法引用指的是可以直接使用java类或对象的方法
Arrays.sort(people,Comparator.comparing(Person::getAge));
方法引用共有下面四种方式
引用构造方法 ClassName::new
引用类静态方法 ClassName::methodName
引用特定类的任意对象方法 ClassName::methodName
引用某个对象的方法 instanceName::methodName
4)注解
JDK 1.5中引入了注解机制 但有限制 相同注解在同一位置只能声明一次 JDK 1.8中引入了重复注解机制后,相同的注解在同一个地方可以声明多次
扩展注解使用范围 可以给局部变量 泛型 和方法异常等提供注解
5)加强了类型推测机制
6)参数名字 在编译时增加 -parameters选项 以及增加反射API 与 Parameter.getName()方法实现了获取方法参数名的功能
7)新增optional类 处理空指针
8)新增Stream类 和函数式编程统一
9)日期新特性
10)增加了调用javaScript的引擎
11)Base64 字符编码格式 用来作为电子邮件 或webService附件的传输编码
12)并行数组
更多的特性,请J对比JAVA下7以及8的JDK的相关内容
B. Java7与Java8是同一软件吗
JAVA7和JAVA8是JAVA的不同版本,主要是JAVA的API不同,对用户的区别可能是有些类库的变化,不如新增加了一些类库,改变了一些类库的设计,也有可能废弃一些类库。
C. Java 7链変粈涔堟柊鐗规э纻
鍑犱箮鏂规柟闱㈤溃閮芥湁閲嶅ぇ镟存柊锛屼妇鍑犱釜璇娉曚笂镄勬柊鐗规э纴鍏朵粬鏂归溃寤鸿浣犲幓镆ユ垒鐩稿叧璧勬枡銆
1銆乻witch...case鏀鎸佸瓧绗︿覆銆
2銆佹暟瀛楀瓧闱㈤噺鏀硅繘锛屽姞鍏ヤ簩杩涘埗瀛楅溃閲忚〃绀猴细濡0b001001锛埚崄杩涘埗鏁板瓧9锛夋垨0B001001锛
鏁板瓧瀛楅溃閲忎腑鍙浠ヤ娇鐢ㄤ笅鍒掔嚎鍒嗗壊锛屼互浣块暱鏁板瓧渚夸簬阒呰伙纴濡100000鍙浠ュ啓鎴100_000锛屽氨濂芥瘆鐜板疄鐢熸椿涓鍐欐垚100,000渚夸簬阒呰讳竴镙枫
3銆佷紭鍖栧纾甯稿勭悊锛孴hroable绫诲炲姞addSuppressed鍜実etSuppressed鏂规硶锛岀敤𨱒ヨ板綍琚鍏朵粬寮傚父鎶戝埗钥屾棤娉曟e父鎶涘嚭镄勫纾甯革绂
涓涓猚atch瀛愬彞鍙浠ユ崟銮峰氢釜寮傚父锛屾疮涓寮傚父涔嬮棿浣跨敤钬渱钬濆垎鍓诧纴濡俢atch (ClassNotFoundException cnfe | IOException ioe)锛
杩樻湁鍏朵粬镄勪竴浜涗紭鍖栵纴濡傚纾甯哥被涓鍖呭惈镟村氢俊鎭锛岀簿纭寮傚父鎶涘嚭绛夌瓑銆
4銆丣ava 7涔嫔墠阃氩父鍦╰ry閲屽垱寤鸿祫婧愶纴finally閲屽硅祫婧愯繘琛屽叧闂绛夋搷浣滐纴Java 7涓鍙浠ヤ娇鐢╰ry-with-resources璇鍙ワ纴钥屼笉闇瑕佸叧蹇冭祫婧愮殑鍏抽棴锛屽傗斺
try (InputStream input = new FileInputStream("D:/test1.txt");
OutputStream output = new FileOutputStream("D:/test2.txt")) {
byte[] buffer = new byte[1024];
int len = -1;
while ((len = input.read(buffer) != -1 ) {
output.write(buffer, 0, len);
}
}
灏呜祫婧愮殑鍒涘缓鍐椤湪try钖庣殑𨰾鍙烽噷锛岃繖镙峰氨涓嶉渶瑕佷娇鐢╢inally璇鍙ユ潵淇濊瘉璧勬簮镄勬g‘鍏抽棴锛岀敱铏氭嫙链鸿嚜锷ㄥ畬鎴愶纴绋嫔簭锻桦彧闇瑕佸叧蹇冧笟锷¢昏緫鍗冲彲銆
5銆佸叧浜庡彉闀垮弬鏁扮殑浼桦寲锛屽炲姞浜咢SafeVarargs娉ㄨВ锛孞ava 7涔嫔墠鍦ㄤ娇鐢ㄥ彲鍙橀暱鍙傛暟镄勬柟娉曟椂锛屽傛灉鍙傛暟浼犻掔殑鏄涓嶅彲鍏蜂綋鍖栫殑绫诲瀷锛埚傛硾鍨嬬被鍨婰ist<String>锛変细浜х敓璀﹀憡淇℃伅锛屽傛灉甯屾湜杩涘埗璇ヨ﹀憡锛岄渶瑕佷娇鐢ˊSuppressWarnings("unchecked")娉ㄨВ杩涜屽0鏄庯纴Java 7涓锛屽傛灉寮鍙戜汉锻樼‘淇℃煇涓浣跨敤浜嗗彲鍙橀暱鍙傛暟镄勬柟娉曞湪涓庢硾鍨嬬被涓璧蜂娇鐢ㄦ椂涓崭细鍑虹幇绫诲瀷瀹夊叏闂棰桡纴灏卞彲浠ヤ娇鐢ˊSafeVarargs娉ㄨВ𨱒ュ0鏄庛傛敞镒忚ユ敞瑙e彧鑳界敤浜庡彲鍙橀暱鍙傛暟镄勬柟娉曟垨钥呮瀯阃犳柟娉曪纴骞朵笖鏂规硶蹇呴’澹版槑涓簊tatic鎴杅inal銆
D. java7和java8有什么区别
8增加了一些新特性,但之前做的项目用的是7,一般不会因为8出了新特性而更换JDK。一段时间内,8不会大规模取代7。
有些项目还停留在jdk1.4或者1.5,我接触的jdk1.6比较多,7也并不是使用优势多大
另外,我不知道题主这问题到底想做什么0.0