1. 程式人生 > >【JAVA300】51-55 筆記

【JAVA300】51-55 筆記

51_面向物件_24_內部類詳解.avi 類能在方法裡面定義
內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類 如同一個人是由大腦、肢體、器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟:它也有自己的屬性和行為(血液、跳動) 顯然,此處不能單方面用屬性或者方法表示一個心臟,而需要一個類 而心臟又在人體當中,正如同是內部類在外部內當中
例項1:內部類的基本結構 //外部類 class Out {     private int age = 12;
    //內部類     class In {         public void print() {             System.out.println(age);         }     } }
public class Demo {     public static void main(String[] args) {          Out.In in = new Out().new In();
        in.print();         //或者採用下種方式訪問         /*         Out out = new Out();         Out.In in = out.new In();
        in.print();         */     } } 執行結果: 12
從上面的例子不難看出,內部類其實嚴重破壞了良好的程式碼結構,但為什麼還要使用內部類呢? 因為 內部類可以隨意使用外部類的成員變數(包括私有)而不用生成外部類的物件 ,這也是內部類的唯一優點
如同心臟可以直接訪問身體的血液,而不是通過醫生來抽血   程式編譯過後會產生兩個.class檔案,分別是Out.class和Out$In.class 其中$代表了上面程式中Out.In中的那個 . Out.In in = new Out().new In()可以用來生成內部類的物件,這種方法存在兩個小知識點需要注意   1.開頭的Out是為了標明需要生成的內部類物件在哪個外部類當中   2.必須先有外部類的物件才能生成內部類的物件,因為內部類的作用就是為了訪問外部類中的成員變數
例項2:內部類中的變數訪問形式 class   Out {      private   int   age =  12 ;             class   In {          private   int   age =  13 ;          public   void   print() {              int   age =  14 ;             System.out.println( "區域性變數:"   + age);             System.out.println( "內部類變數:"   this .age);             System.out.println( "外部類變數:"   + Out. this .age);         }     } }   public   class   Demo {      public   static   void   main(String[] args) {         Out.In in =  new   Out(). new   In();         in.print();     } }
執行結果: 區域性變數:14 內部類變數:13 外部類變數:12
從例項1中可以發現,內部類在沒有同名成員變數和區域性變數的情況下,內部類會直接訪問外部類的成員變數, 而無需指定Out.this.屬性名,否則,內部類中的區域性變數會覆蓋外部類的成員變數 而訪問內部類本身的成員變數可用this.屬性名,訪問外部類的成員變數需要使用Out.this.屬性名
例項3:靜態內部類 class   Out {      private   static   int   age =  12 ;             static   class   In {          public   void   print() {             System.out.println(age);         }     } }   public   class   Demo {      public   static   void   main(String[] args) {         Out.In in =  new   Out.In();         in.print();     } }
執行結果: 12 可以看到,如果用static 將內部內靜態化,那麼內部類就只能訪問外部類的靜態成員變數,具有侷限性 其次,因為內部類被靜態化,因此Out.In可以當做一個整體看,可以直接new 出內部類的物件(通過類名訪問static,生不生成外部類物件都沒關係)
例項4:私有內部類 class   Out {      private   int   age =  12 ;             private   class   In {          public   void   print() {             System.out.println(age);         }     }      public   void   outPrint() {          new   In().print();     } }   public   class   Demo {      public   static   void   main(String[] args) {          //此方法無效          /*          Out.In in = new Out().new In();          in.print();          */          Out out =  new   Out();         out.outPrint();     } } 執行結果: 12 如果一個內部類只希望被外部類中的方法操作,那麼可以使用private宣告內部類 上面的程式碼中,我們必須在Out類裡面生成In類的物件進行操作,而無法再使用Out.In in = new Out().new In() 生成內部類的物件 也就是說, 此時的內部類只有外部類可控制 如同是,我的心臟只能由我的身體控制,其他人無法直接訪問它
例項5:方法內部類 class   Out {      private   int   age =  12 ;        public   void   Print( final   int   x) {          class   In {              public   void   inPrint() {                 System.out.println(x);                 System.out.println(age);             }         }           new   In().inPrint();     } }   public   class   Demo {      public   static   void   main(String[] args) {         Out out =  new   Out();         out.Print( 3 );     } } 執行結果: 3 12 在上面的程式碼中,我們將內部類移到了外部類的方法中, 然後在外部類的方法中再生成一個內部類物件去呼叫內部類方法 如果此時我們需要往外部類的方法中傳入引數,那麼外部類的方法形參必須使用final定義 至於final在這裡並沒有特殊含義,只是一種表示形式而已

52_陣列_陣列基本概念_記憶體分析.wmv 陣列是相同型別資料的有效集合。 陣列描述的是相同資料的若干個資料,按照一定的先後次序排列組合而成。 其中,每一個數據稱作一個數組元素,每個陣列元素可以通過一個下標來訪問它們。
陣列有三個特點: 1.其長度是確定的。陣列一旦被建立,它的大小就是 不可以改變的。private,final 2.其元素必須是相同型別,不允許出現混合型別。 3.陣列中的元素可以是任何資料型別,包括 基本型別和引用型別
陣列屬引用型別 -Members:length,elements of the array

53_陣列_陣列的三種初始化方式.wmv 一堆陣列宣告方式有兩種: type[] arr_name; type arr_name[];
一維陣列的宣告方式: type var[]; 或type[] var; 宣告陣列時不能指定其長度(陣列中元素的個數), Java中使用關鍵字new建立陣列物件,格式為: 陣列名 = new 陣列元素的型別 [陣列元素的個數] 例項: TestNew.java: 程式程式碼:
  1. public class TestNew  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int[] s ;  
  5.          int i ;  
  6.          s = new int[5] ;  
  7.          for(i = 0 ; i < 5 ; i++) {  
  8.              s[i] = i ;  
  9.          }  
  10.          for(i = 4 ; i >= 0 ; i--) {  
  11.              System.out.println("" + s[i]) ;  
  12.          }  
  13.      }   

初始化: 1.動態初始化:陣列定義與為陣列分配空間和賦值的操作分開進行; 2.靜態初始化:在定義數字的同時就為陣列元素分配空間並賦值; 3.預設初始化:陣列是引用型別,它的元素相當於類的成員變數,因此陣列分配空間後,每個元素也被按照成員變數的規則被隱士初始化。 例項:
TestD.java(動態): 程式程式碼:
  1. public class TestD  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int a[] ;  
  5.          a = new int[3] ;  
  6.          a[0] = 0 ;  
  7.          a[1] = 1 ;  
  8.          a[2] = 2 ;  
  9.          Date days[] ;  
  10.          days = new Date[3] ;  
  11.          days[0] = new Date(2008,4,5) ;  
  12.          days[1] = new Date(2008,2,31) ;  
  13.          days[2] = new Date(2008,4,4) ;  
  14.      }  
  15. }  
  16.  
  17. class Date  
  18. {  
  19.      int year,month,day ;  
  20.      Date(int year ,int month ,int day) {  
  21.          this.year = year ;  
  22.          this.month = month ;  
  23.          this.day = day ;  
  24.      }  
  25. }  
  26.  

TestS.java(靜態): 程式程式碼:
  1. public class TestS     
  2. {     
  3.      public static void main(String args[]) {     
  4.          int a[] = {0,1,2} ;     
  5.          Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;     
  6.      }     
  7. }     
  8.  
  9. class Time     
  10. {     
  11.      int hour,min,sec ;     
  12.      Time(int hour ,int min ,int sec) {     
  13.          this.hour = hour ;     
  14.          this.min = min ;     
  15.          this.sec = sec ;     
  16.      }     
  17. }    

TestDefault.java(預設): 程式程式碼:
  1. public class TestDefault     
  2. {     
  3.      public static void main(String args[]) {     
  4.          int a [] = new int [5] ;     
  5.          System.out.println("" + a[3]) ;     
  6.      }     
  7. }   
;     
package cn.bjsxt.array2;
/**  * 陣列的基本語法  * @author wolf_jvao  *  */
public class Test02 {     public static void main(String[] args){         //宣告         int[] a;         int b[];
        //建立陣列物件         a = new int[4];         b = new int[5];
        //初始化(對陣列元素的初始化)         //預設初始化;陣列元素相當於物件的成員變數,預設值跟成員變數的規章一樣。數字0,布林flase         //動態初始化;         a[0] = 23;         for(int i=0;i<a.length;i++){             a[i]= i*12;         }         //靜態初始化;         int c[] ={23,43,56,78};         Car[] cars = {new Car("賓士"),new Car("比亞迪"),new Car("寶馬")};         Car c2 =new Car("奔");
    }
}

54_陣列_String類的常用方法_JDK原始碼分析.wmv
java沒有內建的字串型別,而是在標準java類庫中提供了一個預定義類String, 每個用雙引號括起來的字串都是String類的一個例項
棧的a不可變,指向位置可變。 數值也不可變,值設定為私有的,沒有提供可變的方法。
public class TestString {     public static void main(String[] args){        //char[] c={'a'.'b'};        //Stirng str = new String();//給一個長度為零的陣列        //Stirng str = new String("abc");//傳一個值進去        //Stirng str = new String(c);//傳一個數組,構造器過載        //Stirng str2 = new String(c);//不是指向同一物件        //String str = "abcd";
        //Stirng str = new String("abcd");         //str.charAT(2);//輸出一個c
             //Stirng str = new String("abcd");        //Stirng str2 = new String("abcd");        //Stirng str3 = "def";        //Stirng str4 = "def";        //System.out.println(str3.equals(str4));  //輸出true        //System.out.println(str3==str4); //輸出true
        //System.out.println(str3. indexOf ('e'));//輸出1         //System.out.println(str3.indexOf('e'));//輸出-1         //String s =str3. substring (1);//從該位置擷取後面字串產生一個新的字串。0為完全擷取,異常會跳出         //System.out.println(s);輸出ef         //String str5 =str3. replace ('e','*');//取代e為*,異常跳出         //String str6 ="abcde,rrtt,cccee";         //String[] strArray = str6. split (",")//碰到逗號就切割         //for(int i = 0;i<strArray.length;i++){                 System.out.println(strArray[i]) }         //String str7 ="  aa  bb  ";         //String str77 =str7. trim();//去首尾空格         //System.out.println(str77.length());//輸出"aa  bb"         //toCharArray()//返回一個新字串陣列,可以隨便改

//// public int length(){         return value.length; }//返回字串長度

public boolean isEmpty(){         return value.length==0; }//判斷是否為空

 public char charAT(int index){         if((index < 0) || (index >= value.length)){             throw new StringIndexOutOfBoundsException(index);//索引不對丟擲異常         }         return value[index]; }

 public  boolean equals(object anObject){ //比較內容是否相等         if(this == anObject){//是否為同一物件             return ture         }         if(anObject instanceof String){//是否為字串             String anotherString = (Stirng) abObject;             int n = value.length;             if(n == anotherString.value.length){                 char v1[] = value;                 char v1[] = anotherString.value;                 int i = 0;                 while (0-- != 0){ //迴圈遍歷這個陣列,每一個進行比較,不一樣返回false                        if(v1[i] != v2[i])                             return false;                         i++;                     }                     return ture;             }             return false; }
作業: 1。練習String類的常用方法 2。結合陣列檢視原始碼 3。提高:按照老師的方法將String類的相關方法的程式碼看一看


55_陣列_String類的補充_常見面試題_記憶體分析.wmv
System.out.println("ABC".equalsIgnoreCase("abc"));   //比較大小,忽略大小寫
System.out.println("Abcbd".indexof('b'));//從左邊開始找b的位置 System.out.println("Abcbd".lastIndexof('b'));//從右邊開始找b的位置
System.out.println("Abcbd".startsWith("Ab"));//是否以Ab開頭 System.out.println("Abcbd".endWith("bd"));//是否以bd結尾
System.out.println("Abcbd".toLowerCase());//轉為為小寫,因為不可變,所以是新的資料 System.out.println("Abcbd".toUpperCase());//轉為為大寫,因為不可變,所以是新的資料
String gh = "a"; for(int i=0;i<10;i++){ gh+=i } System.out.println(gh); //輸出a0123456789   建立12個物件 這樣不好,很浪費空間。 筆試問題?
解釋如圖:
               
gh         "a"    

相關推薦

JAVA30051-55 筆記

51_面向物件_24_內部類詳解.avi 類能在方法裡面定義 內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類 如同一個人是由大腦、肢體、器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟:它也有自己的屬

JAVA30056-60 筆記

56_陣列_StringBuilder和StringBuffer的使用_常用方法_方法鏈的實現_JDK原始碼分析.wmv /** *String不可變字元序列 *可變字元序列。 StringBuilder(不安全,效率高)和StringBuff

JAVA30046-50 筆記

46_面向物件_19_多型_記憶體分析.wmv 47_面向物件_20_多型_記憶體分析深化(模擬servlet中方法的呼叫).wmv 構造可以為:父類 a = 子類(); 呼叫繼承,未重寫,或重

JAVA30041-45 筆記

41_面向物件_14_繼承_super_ super是直接父類物件的引用。 可以通過super來訪問父類中被子類覆蓋的方法或屬性 普通方法:沒有順序限制,可以隨便呼叫。 建構函式中:任何類的建構函式中,若是建構函式的第一行程式碼沒有顯式的呼叫s

JAVA30031-35 筆記

31_面向物件_04_程式執行過程的記憶體分析_01.wmv //屬性:field:成員變數 屬性作用範圍是整個類體 在定義成員變數時可以對其初始化,如果不對其初始化,java使用預設的載對其初始化 (數值:0,0.0  c

Nodejs學習筆記(一)--- 簡介及安裝Node.js開發環境

ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料   1.深入淺出Node.j

pythonpython學習筆記

pythonList:列表1)列表表達式:有時可以很方便的代替函數實現一些功能1.1)字符串居中(長度為9個字符) >>> a = ["123","456","abc","Abc","AAA"] >>> [k.center(9) for k in a] [‘ 123

Android開發筆記(序)寫在前面的目錄

animator 進程間通信 scrip cst 調用 receiver 手勢 打包 數據庫基礎 原文:http://blog.csdn.net/aqi00/article/details/50012511 知識點分類 一方面寫寫自己走過的彎路掉進去的坑,避免以後

23Python基礎筆記2

join 鍵值 什麽 位置 布爾 獲取 允許 選擇 內容 1、請用代碼實現:利用下劃線將列表的每一個元素拼接成字符串 li=[‘alex‘, ‘eric‘, ‘rain‘] print("_".join(li)) print(li[0]+"_"+li[1]+"_"+li[1

26Python Iterator筆記

() als 什麽 無限 區分 通過 說明 for循環 import 在講何為叠代器之前,要區分一件事:Iterable可叠代與Iterator叠代器的區別。可以直接作用域for循環的數據數據類型有以下幾種:一類是集合數據類型,如:list、dict、str、set、tup

Python3學習筆記(urllib模塊的使用)

nal 方法 utf 網址 pin des IE tps erer 原文地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None, [ti

WebAPI學習WEBAPI筆記1_20180324

配置 erl 控制 lte 原生 sin 增刪改 行動 選擇 [日期2180324(六)] ASP.NET WebAPI     WEBAPI能負責構建http常規的服務,和SingalR一起架構Service服務層,SingalR可以做比較高級的服務,如實時服務。而Web

MongoDB學習筆記(查詢)

順序 god ... ive HR 操作 方式 mar obj 原文地址 MongoDB學習筆記(查詢) 基本查詢: 構造查詢數據。 > db.test.findOne() { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a")

Verilog學習筆記簡單功能實現(八)...............異步FIFO

另一個 gif 多個 可靠 基本原理 drs bar next 不同 基本原理: 1.讀寫指針的工作原理   寫指針:總是指向下一個將要被寫入的單元,復位時,指向第1個單元(編號為0)。   讀指針:總是指向當前要被讀出的數據,復位時,指向第1個單元(編號為0)

HTMLHTML基礎筆記02

cin 原則 漢字 div logo 給他 作用 mar 創建 二、HTML基礎(第二部分) 註:經常查閱文檔是一個很好的學習習慣! 1、表格 table(會使用) 存在即是合理的。 表格的現在還是較為常用的一種標簽,但不是用來布局,常見處理、顯示表格式數據。 創建表格 t

Java學習筆記034 - 網絡

端口號 bre throws clas 編程 綁定 容器 名稱 套接字 1 package cn.temptation; 2 3 import java.net.InetAddress; 4 5 public class Sample01 {

reactreact學習筆記

教程 內部 意思 one docs 分享 log 標識 dom 1.jsx {}中支持三元表達式,不支持if else,用&&效果和if else一樣 2.樣式支持內聯樣式,駝峰式命名 3.允許插入數組,模板自動展開 4.事件 o

原創python學習筆記(自學階段1)-- 自學,爬蟲備註--先佔坑

  Request:使用者將自己的資訊通過瀏覽器(socket client)傳送給伺服器(socket server) Response:伺服器接收請求,分析使用者發來的請求資訊,然後返回資料(返回的資料中可能包含其他連結,如:圖片,js,css等) ps:瀏覽器在接收Res

VimVim自學筆記

查詢命令 進入正常模式後輸入以下程式碼: :set hlsearch #高亮搜尋欄位 :/xiaogongwei #搜尋xiaogongwei 複製-貼上 按下ESC後執行: yy #複製當前行 p #貼上當前行 執行shell命令 !ls -al #列出當

原創VBA學習筆記(2)--例項,VBA刪除表中的空行

Sub 巨集1迴圈內刪列() '資料不規範,有的空行是4,有的是6,有的是1就不好處理了     For i = 15 To 100 Step 2          Rows(i).Delete Shift:=xlUp &nb