標(biāo)簽(空格分隔): java 面試 特性(本文依照 小楠總的簡書進(jìn)行寫作)
Java 1.5新特性
- 靜態(tài)導(dǎo)入
- foreach
- 自動(dòng)拆箱裝箱
- 枚舉
- 泛型
- 元數(shù)據(jù)
- 線程池
- 注解
靜態(tài)導(dǎo)入
一般的導(dǎo)入是 import java.xxx.ClassName, 而靜態(tài)導(dǎo)入是 import static java.xxx.ClassName.*或import static java.xxx.ClassName.method鸭轮。
意思是導(dǎo)入一個(gè)類的所有靜態(tài)方法或其中一個(gè)靜態(tài)方法茬缩。
小楠總的簡書
//靜態(tài)導(dǎo)入某一個(gè)方法
import static java.lang.Math.abs;
//靜態(tài)導(dǎo)入一個(gè)類的所有靜態(tài)方法
import static java.lang.Math.*;
public static void main(String[] args) {
//方法可以直接使用
System.out.println(abs(-100));
}
//如果類里面原本就有同名的方法的話约素,就會(huì)覆蓋掉靜態(tài)導(dǎo)入的方法了
public static void abs() {
}
foreach
foreach被稱為增強(qiáng)型for循環(huán)
- 常見用法
import java.util.*;
import static java.lang.System.*;
public class Main {
public static void main(String[] args) {
//一維數(shù)組foreach遍歷
int[] array = {1, 3, 5, 7, 9};
for (int element : array) {
out.println(element);
}
//erweisuz二維數(shù)組遍歷
int[][] array2 = {{{1,1,1},{2,2,2},{3,3,3}};
for (int[] row :array2) {
for (int element2:row) {
out.println(element2);
}
}
}
}
2.缺點(diǎn)
當(dāng)遍歷集合或者數(shù)組時(shí),如果需要訪問集合或數(shù)組的下標(biāo),foreach會(huì)丟失下標(biāo)信息。即不能通過下標(biāo)信息來訪問元素。這時(shí)候遂唧,推薦用舊的for循環(huán)來訪問元素。
自動(dòng)裝箱和拆箱
1.定義
自動(dòng)裝箱:非人為地將原始類型值自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的對(duì)象吊奢。
e.g. 將int的變量轉(zhuǎn)換為Integer對(duì)象
自動(dòng)拆箱:非人為地將對(duì)象轉(zhuǎn)換為基本原始類型
e.g. 將Integer對(duì)象轉(zhuǎn)換為int的變量
<table>
<tr>
<th>原始類型</th>
<th>對(duì)應(yīng)的封裝類</th>
</tr>
<tr>
<td>byte</td>
<td>Byte</td>
</tr>
<tr>
<td>short</td>
<td>Short</td>
</tr>
<tr>
<td>char</td>
<td>Character</td>
</tr>
<tr>
<td>int</td>
<td>Integer</td>
</tr>
<tr>
<td>long</td>
<td>Long</td>
</tr>
<tr>
<td>float</td>
<td>Float</td>
</tr>
<tr>
<td>double</td>
<td>Double</td>
</tr>
<tr>
<td>boolean</td>
<td>Boolean</td>
</tr>
</table>
2.示例
//自動(dòng)裝箱示例盖彭,自動(dòng)將基本數(shù)據(jù)類型包裝成對(duì)象
Integer i1 = 1000;
Integer i2 = 1000;
//自動(dòng)拆箱示例,自動(dòng)將對(duì)象解包成基本數(shù)據(jù)類型
System.out.println(i1 + 10);
//如果數(shù)值在-128到127之前页滚,對(duì)象會(huì)復(fù)用(享元設(shè)計(jì)模式)
System.out.println(i1 == i2);
3.弊端
自動(dòng)裝箱的弊端
自動(dòng)裝箱有一個(gè)問題召边,那就是在一個(gè)循環(huán)中進(jìn)行自動(dòng)裝箱操作的情況,如下面的例子就會(huì)創(chuàng)建多余的對(duì)象逻谦,影響程序的性能掌实。
Integer sum = 0;
for(int i=1000; i<5000; i++){
sum+=i;
}
上面的代碼sum+=i
可以看成sum = sum + i
陪蜻,但是+
這個(gè)操作符不適用于Integer
對(duì)象邦马,首先sum
進(jìn)行自動(dòng)拆箱操作,進(jìn)行數(shù)值相加操作宴卖,最后發(fā)生自動(dòng)裝箱
操作轉(zhuǎn)換成Integer
對(duì)象滋将。其內(nèi)部變化如下
nt result = sum.intValue() + i;
Integer sum = new Integer(result);
由于我們這里聲明的sum為Integer類型,在上面的循環(huán)中會(huì)創(chuàng)建將近4000個(gè)無用的Integer對(duì)象症昏,在這樣龐大的循環(huán)中随闽,會(huì)降低程序的性能并且加重了垃圾回收的工作量。因此在我們編程時(shí)肝谭,需要注意到這一點(diǎn)掘宪,正確地聲明變量類型,避免因?yàn)樽詣?dòng)裝箱引起的性能問題攘烛。
枚舉類型
1.作用
保證變量的值只能取指定值中的某一個(gè)魏滚,通過在代碼編譯的時(shí)候就可以知道傳的值是否合法。
2.定義一個(gè)簡單的枚舉類
public enum Size{
SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");
private String abbreviation; //縮寫
private Size(String abbrviation){ this.abbreviation = abbreviation;}
public String getAbbriation{ return abbreviation; }
}
3.比較兩個(gè)枚舉類型不用equals
坟漱,直接用=
- 常用方法