可變參數,functionName(type… x)
1、如下
public class hello{
public static void main(String args[]){
fun(1);
fun(3,6);
}
static void fun(int... args){
for(int i=0; i<args.length; i++){
System.out.println(args[i]);
}
}
}
面向對象特性
1、 繼承、封裝、多态,繼承實作了重用、封裝保證了安全、多态提供了靈活性
2、 GC,garbage collection,垃圾回收器,會自動掃描缺少指針指向的對象(堆記憶體空間),并将其及時釋放出來
3、 匿名對象,直接用new而沒有指針引用的對象,使用完後将直接被銷毀,new person().say(),此處的new person()就是匿名對象
特殊類型String
1、 String是類,不是基本資料類型,基本資料類型可以使用==,!=等來對值進行比較,而類類型比較的是引用位址
2、 String x=”abc”; String y=”abc”; 編譯時abc将存儲在常量池,x、y都引用常量池對象,是以x==y為true
3、 String x=”abc”; String y=new String(“abc”); 此時x的abc存儲在常量池,y的abc存儲在堆存儲區,是以x==y為false
4、 String x=new String(“abc”); String y=new String(“abc”); 此時x、y分别存儲在堆空間的兩個位置,是以x==y為false
5、 String x=”a”; String y=”b”;String z = x+y; 此時z==”ab”為false,因為z的值在編譯時是不知道的,它在運作時才知道,此時它要通過new String(“ab”)來建立對象,而”ab”是存儲在常量池中,是以為false
6、 String x=”a”; String y=”b”;String z = “a”+”b”; 此時z==”ab”為ture,因為編譯時,z的值就确定了,z指向的是常量存儲區的”ab”,是以為ture
7、 要比較類類型中的值與基本資料類型的值,必須使用String.equals(“xxx”)
8、 String内容一旦聲明不可修改,如果要修改則使用StringBuffer
9、 是以能否比較主要看,編譯時是否确定存儲空間,編譯時确定的為常量,使用相同的空間,運作時确定的為堆空間,使用堆中不同的空間
static靜态聲明靜态代碼塊
1、 static聲明代碼塊優先于主方法執行,如下
public class hello{
public static void main(String args[]){
System.out.println("main coderunning");
}
static{
System.out.println("static coderunning");
}
}
class person{
privateperson(){}
}
publicclass hello{
public static void main(String args[]){
person p = new person();
}
}