javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)
?
形式參數和返回值類型、包、內部類、匿名內部類
形式參數:值傳遞
基本類型:將實參的值復制一份傳給形參
引用類型:將實參的引用傳遞給形參,將導致形參和實參都指向同一個實例對象。
返回值類型
基本類型:返回的是一個基本數據類型的值;
引用類型:返回的是一個對象的引用。
鏈式編程
當一個方法的返回值是引用類型的時候,它返回的是一個對象的引用,那么就可以直接在此基礎上訪問這個對象的方法,當被調用的方法的返回值依然是一個引用 的話,還可繼續再調用所返回對象的方法。
當形參為抽象類時:返回的是該抽象類的實現子類的對象;
形參為接口,返回的是該接口實現類的對象;
類名作為返回值,返回的是該類的實例對象。
包 package
為了避免同名類過多而產生混亂,在類前加上額外的限定;
作用:可對類進行分類管理,格式通常是公司域名倒寫,在后面加上項目名等。
-cp 指明所依賴的包及運行的類的目錄(即類路徑,包所在路徑),彼此之間用“;”分開;
-d表明生成帶包類的層次目錄,會在指定目錄下,自動創建出和包結構相對應的目錄,并將生成的.class類文件放入到最里面的文件夾中。
在使用帶包的類時,必須使用完整類名(包名+類名)來訪問。
定義格式
package 包名: 包名只要是有效的標識符即可,通常使用小寫字母,多級包用“.”分開即可,一個圓點代表一個文件夾。
注意事項
1、package語句必須是程序的第一條可執行代碼,前面有注釋沒有影響。
2、pacekage語句在一個java文件中只能有一個;
3、一旦定義了包。則類的使用的時候就用包名.類名的方式。
4、執行順序:package-->import -->class
package只能有一個,并且必須是文件的第一條可執行語句; import:在類之前,并且可以有多個;
類成員權限
類及成員所用修飾符:
類:
1、四種權限中可以使用兩種(默認的,public),final,abstract
2、我們自己定義:public居多
成員變量:
1、四種權限修飾符均可,final,static
2、我們自己定義:private居多
構造方法:
1、四種權限修飾符均可,其他(final,static)不可
2、我們自己定義:public 居多
成員方法:
1、四種權限修飾符均可,fianl,static,abstract
2、我們自己定義:public居多
內部類
把類定義在其他類的內部,這個在其他類里面的類就是內部類。
內部類的訪問特點
1、內部類可以直接訪問外部類的成員,包括私有;
2、外部類要訪問內部類的成員,必須通過創建內部類對象來完成。
內部類位置
兩種格式: 成員位置(成員內部類);局部位置(局部內部類);
成員內部類分為兩種:
1、private修飾的私有成員內部類:只能通過在外部類中定義公有方法對私有內部類進行訪問,否則不能直接訪問私有的成員內部類。
2、static靜態成員內部類:直接通過外部類名.內部類名來訪問。
1 int num = 10; 2 static int num2 = 20; 3 public static class Heart { 4 // int a = num; //外部類的非靜態成員不能訪問 5 int b = num2; //OK,只能訪問外部類的靜態成員 6 }?
被靜態修飾的成員內部類只能訪問外部類的靜態成員;不能訪問外部類的非靜態成員;但可以有靜態非靜態方法,都只能訪問外部類的靜態成員;
1、外界訪問靜態內部類的方法:
1 Outer.Inner ii = new Outer.Inner(); 2 3 ii.func1();?
不能用 Outer.Inner oi = new Outter().new Inner();
2、非靜態成員內部類(如用public修飾的): 只能定義非靜態方法、非靜態變量,但可以訪問外部類的靜態和非靜態成員;
1 class Outer{ 2 int num1 = 1; 3 static int num2 = 10; 4 public class Inner{ 5 //static int age = 18;//error非靜態成員內部類不能定義靜態成員變量 6 public Inner(){} 7 /*void func1(){ 8 System.out.println(num1); 9 System.out.println(num2); 10 }*/ //OK,非靜態成員內部類只能定義非靜態方法 11 /* 12 static void func1(){ 13 System.out.println(num1); 14 System.out.println(num2); 15 } 16 */ //error,非靜態成員內部類不能定義靜態方法 17 } 18 }?
局部內部類
可以直接訪問外部類的成員;
可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能。
1 class Outer { 2 private int num = 10; 3 4 public void method() { 5 //int num2 = 20; 6 //final int num2 = 20; 7 class Inner { 8 public void show() { 9 System.out.println(num); 10 System.out.println(num2); 11 } 12 } 13 //System.out.println(num2); 14 Inner i = new Inner(); 15 i.show(); //?這樣寫有點麻煩,有沒有簡便寫法? 16 } 17 } 18 19 class InnerClassDemo5 { 20 public static void main(String[] args) { 21 Outer o = new Outer(); 22 o.method(); 23 } 24 }?
匿名內部類
前提,存在一個類或者接口
格式 :new 類名或者接口名(){重寫(實現)方法;}
本質:是一個繼承了類或者實現了接口的子類匿名對象。
?
1 interface Person{ 2 public abstract void show(); 3 } 4 //非匿名方式 5 class Student implements Person{ 6 public void show(){ 7 System.out.println("students show"); 8 } 9 } 10 class PersonDemo{ 11 public Person test(Person p){ 12 p.show(); 13 return p; 14 } 15 } 16 class InterDemo{ 17 public static void main(String[]args){ 18 PersonDemo pd=new PersonDemo(); 19 Student s=new Student(); 20 // pd.test(s); 21 pd.test(new Person(){ 22 public void show(){ 23 System.out.println("ni ming"); 24 } 25 });//匿名內部類 26 } 27 }?
?
?
轉載于:https://www.cnblogs.com/yihaifutai/p/6628687.html
總結
以上是生活随笔為你收集整理的javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis单机配置多实例,实现主从同步
- 下一篇: 长连接与短连接