<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java學習筆記2

      目錄

      Java語言簡介

      • 源程序,字節碼程序
      • .class文件
      • 垃圾回收 機制
        Java運行環境 JRE
      • Java SE(J2SE)
      • EE ME
      • JVM 加載、校驗、執行

      常用命令

      • Javac:編譯器

      • java:

      • 反匯編:javap

      • 可讀性第一,效率第二

      • Java application

      • Java applet

      • netbeans IDE

      • NULL 不是關鍵字

      • finally 是關鍵字

      • $開頭為合法標志符

      • 基本數據類型

      命令 作用 備注
      成員變量 可以不初始化
      局部變量 必須初始化

      包裝器類

      • Java每種數據類型都有一個包裝器類,對于xxx類:

        • valueOf(String str):返回指定String值的xxx對象
        • xxxValue:返回xxx對象
      • byte、char、short數據之間的運算結果是int

      • 自增符不能用于表達式

      image

      • 定義成員方法的語法格式:
        權限修飾符 返回值類型 方法名(參數類型 參數名){

        }

      2 數據類型

      3 運算符和表達式

      4 流程控制

      5 Java的繼承、多態、高級類特性和數組

      5.2 繼承與多態

      Food mlt = new MaLaTang();

      • 聲明類型 Food
      • 實際類型 MaLaTang
      • 調用的方法在子類和父類中都有,那么最終的方法調用以實際類型為準
      • 如果聲明類型與實際類型不一樣,且調用的方法是實際方法獨有的,那么該方法不能調用。

      5.3.3 枚舉類型

      public enum Season
      {
      a,b,c,d;
      }

      5.3.4 抽象類

      abstract class A

      • 抽象類不可以實例化對象
      • 抽象類必須被繼承,與final類相反
      • 可以定義一個統一的編程接口LLLL
      • 抽象類定義所有子類共用的抽象方法,實現細節由子類完成
      • 抽象類可以繼承抽象類,普通類可以繼承抽象類;抽象類可以繼承普通類;
      • 普通類可以繼承接口,
      • 接口可以繼承接口(通過extends),但不可以繼承抽象類

      5.3.5 接口

      • Java不支持多繼承

      接口與抽象類的區別

      • 抽象類中可以有具體方法,接口必須全部為抽象方法
      • 抽象類中的方法可以使用多種修飾符來修飾,接口中的方法必須通public abstract來修飾
      • 抽象類中的屬性可以使用多種修飾符來修飾,接口中???方法必須通public static final來修飾

      接口的聲明

      • [修飾符] interface In1 [extends 父接口名]
      • 接口只能包含常量定義和抽象方法定義
      • 接口體內只包含常量定義和抽象方法定義兩部分。

      接口的實現

      • class A implements In1, In2
      • 0 or all: 所有方法都要實現
      • 接口中聲明方法可省略public和abstract,但在實現的時候,要有public修飾

      接口作為類型的使用

      接口與abstract類的比較

      • 接口中只能有常量,只能有abstract方法

      5.4 內部類

      • 內部類不能聲明靜態變量和靜態方法
      • 外部類可以用內部類聲明對象
      • 聲明方法:直接聲明、new
      • 內部類不能與外部類同名
      • 內部類可以作為其他類的成員

      5.5 數組

      • 數據類型相同
      • 數組是引用類型,java中的數組屬于對象的成員變量

      5.5.1 一維數組

      • 聲明+初始化
      int[] Arr = new int[100] //默認的元素全部為0
      int[] Arr = {1,2,3}
      

      5.5.2 二維數組

      • 二維數組每一行的長度可以不一樣
      //從高維向低維依次進行空間分配
      int [][] c = new int[3][];
      c[0] = new int[4];
      c[1] = new int[5];
      c[2] = new int[6];
      
      數組的復制
      • java.lang.System類提供了靜態方法arraycopy()
      static void arraycopy(Object src, int srcPos, Obj dest, int destPos, int length)
      

      6 異常和斷言

      6.1 異常概述

      • Throwable直接繼承自object,所有異常必須是Throwable類的實例或其子類
      • Throwable派生Error和Exception類
      • Exception派生RuntimeException
      • Throwable的常用方法:
        • getMessage()
        • getStackTrace() //返回堆棧跟蹤情況
        • printStackTrace() // 打印堆棧的標準錯誤流
        • fillStackTrace()
        • toString() //返回簡單描述
      • throw一個異常:生成一個異常對象并把它提交給運行時系統的過程
      • catch一個異常:運行時系統從生成異常的方法開始回溯,直到找到包含相應異常處理的方法

      6.2 異常的處理

      try{
        ...//被監視的代碼段
      }
      catch(異常類型 e){ ... //異常處理語句}
      catch(){}
      finally{} //最終處理
      
      • 異常總是在方法內產生

      拋出異常

      • 一個方法可以聲明拋出多個異常
      • 若一個方法產生了異常,而不處理異常,則可以在方法聲明時,用throws拋出異常,傳遞給其調用者或更高一級的調用者,直到被捕獲。
      doSomething() throws IOException{...}
      method1() throws IOException{...}
      method2() throws IOException{...}
      public Static main(){
        try{
          method2();
        }catch(IOExcetption e){...}
      }
      

      自定義異常

      class 自定義異常名 extends Exception{
       ...
      }
      
      throw new 異常類名();
      

      程序會在throw語句處立即終止,轉向try...catch尋找異常處理方法,不再執行throw之后的語句

      finally語句

      • finally語句總是在return之前執行

      6.3 斷言

      assert (布爾表達式)
      assert (布爾表達式):"表達式"
      
      • 布爾表達式為假則拋出AssertionError,在第二種形式中,表達式會作為參數傳進AssertionError的構造方法中以消息字符串

      • 斷言主要用于程序開發和測試階段

      • 對某個包或類打開斷言java -ea:com.mydx.mylib...

      • 對某個包或類關閉斷言java -da:com.mydx.mylib...

      • 系統級打開斷言-esa

      • 系統級關閉斷言-dsa

      7 輸入輸出及文件操作

      7.1 流的概念

      • java.io和java.lang處理輸入輸出

      標準的I/O流

      • 鍵盤:stdin

      • 監視器:stdout

      • stdin和stdout均被封裝在System類的類變量in和out中

      • 每當main方法被執行,就自動生成下述三個類的對象:

        • System.in: extends InputStream
        • System.out: extends PrintStream
        • System.err: extends PrintStream
      • java.io包有字節流和字符流

      • 字節流extends InputStream或OutputStream

      • 字符流extends Reader和Writer

      7.2 文件

      • File是io包中的非流類
      • 目錄也作為文件對象處理
      • File的構造方法
      File(String filename);
      File(String directoryPath, String filename);
      File(File f, String filename);
      
      try{f.createNewFile();}
      catch(Exception){...}
      
      • 常用方法
      * f.delete() //文件刪除
      * public String getName() //獲取文件名
      * public long lastModified() //獲取文件最后被修改時間
      * public boolean canRead()  //判斷是否可讀
      * public boolean canWrite() //判斷文件是否可寫
      * public boolean isDirectory() //判斷是否為目錄
      

      目錄

      • 創建目錄: public boolean mkdir()
      File f = new File("f:\\java");
      f.mkdir();
      
      • 列出目錄中的文件
      public String[] list()
      public String[] list(FilenameFilter obj)
      public File[] listFile()
      public File[] listFile(FilenameFilter obj)
      
      

      隨機文件流

      • RandomAccessFile類可同時完成讀和寫
      public class RandomAccessFile extends Object implements DataInput, DataOutput
      
      • DataInput方法:readBoolean()、readInt()、readLine()

      • DataOutput方法: writeChar()、writeDouble()、write()

      • RandomAccessFile類僅限操作文件,不能訪問其他IO設備(網絡、內存映像)

      • RandomAccessFile類有個文件指針,剛打開文件時,文件指針指向開頭,可以移動文件指針到新的位置,以此位置開始讀寫操作。

      • RandomAccessFile常用方法

      byte readByte() //讀取一個字節
      double readDouble()
      int readInt()
      
      String readLine()
      void write(byte b[])
      void writeDouble(double v)
      void seek(long pos) // 將指針指向pos指定的位置
      void close()
      void length()
      long getFilePointer()
      void setLength(long newLength)
      
      • RandomAccessFile常用方法都會拋出IOException異常,需要放入try...catch結構中

      • 創建隨機文件流

      File f = new File("file.txt")
      new RandomAccessFile(f, "rw");
      new RandomAccessFile("file.txt", "w");
      
      raf1.write(name.getBytes()); //將String類型的name變為字節數組
      raf1.writeInt(age);
      raf1.close;
      

      7.3 字節流

      • 字節流extends InputStream或OutputStream,兩個都是抽象類
      • InputStream和OutputStream的所有方法在出錯的時候都會拋出IOException異常

      InputStream

      • 常用方法
      read()
      skip() //跳過指定數量的字節不讀
      available() //返回流中可用字節數
      mark() // 在流中的當前位置做一個標記
      reset() //返回上一個標記位置
      markSupport()
      close()
      
      • read()的三種用法,若返回值為-1,表明流結束
      int read()
      int read(byte b[])
      int read(byte b[], int off, int len)  //從輸入流中讀取長度為len的數據,寫入數組b中從索引off開始的位置,并返回讀取的字節數
      

      OutputStream

      • 常用方法
      void write(int b)
      void write(byte b[])
      void write(byte b[], int off, int len)
      void flush() // 刷空輸出流,并將緩沖區中的數據強制送出
      void close()
      

      數據流

      • 數據流類可處理字節和字節數組,還可以實現對文件不同數據類型(int、float、Boolean)的讀寫

      • DataInputStream和DataOutputStream分別實現了接口DataInput和DataOutput

      • 常用方法:

      readInt()
      writeInt()
      readByte()
      writeByte()
      readBoolean()
      readChar()
      readLine()
      
      • 構造方法:
      DataInputStream(InputStream in)
      DataOutputStream(OutputStream out)
      

      文件流

      FileInputStream

      • 構造方法:
      FileInputStream f0 = new FileInputStream("/a.txt");
      
      File f = new File("/a.txt");
      FileInputStream f1 = new FileInputStream(f);
      

      FileOutputStream

      FileOutputStream(String filepath, boolean append) //附加還是覆蓋
      
      • FileOutputStream類的對象創建不依賴于文件是否存在,沒有就創建
      • FileNotFoundException異常:無法創建、打開時拋出
      • 利用數據流向文件中寫數據
      int[] myArr = {1,2,3}
      DataOutputStream doc = new DataOutputStream(new FileOutputStream("ints.dat"))
      for ()
        dos.writeInt(myArray[i]) 
      

      內存的讀寫

      ByteArrayInputStream

      • 構造方法
      ByteArrayInputStream(byte [] buf)
      ByteArrayInputStream(byte b[], int off, int len)
      
      • 自有方法
      public byte[] toByteArray()
      public int size() //返回緩沖區大小
      
      
      

      ByteArrayOutputStream

      字符流

      FileReader

      FileWriter

      • FileWriter打開一個只讀文件,引發IOException

      緩沖流

      • BufferedReader和BufferedWriter類

      BufferedReader

      • 構造方法
      BufferedReader(Reader in)
      

      BufferedWriter

      • 構造方法
      BuffeiwedWriter(Writer out, int bufSize)
      

      Scanner類

      • java.lang包的System類有in和out
      Scanner reader = new Scanner(System.in)
      

      之后調用reader的各種方法,實現讀取用戶在命令行輸入的各種數據

      7.5 對象流

      ObjectInputStream和ObjectOutputStream類

      • 構造方法
        ObjectInputStream(InputStream in)
        
      • 實現了接口ObjectXput,是XputStream的子類
      • 通常用FileXputStream對象作為參數創建ObjectXputStream對象,之后用readObject()/writeObject()方法
      • readObject()返回類型為Object

      可串行化

      • java中,只有可串行化的對象才能通過對象流進行傳輸
      • 只有實現了Serializable接口的類才能被串行化
      • Serializable接口不包含任何方法

      7.6 過濾流

      字符過濾流

      • 其他過濾流都是FilterReader/FilterWriter的子類
      • FilterReader/FilterWriter都被定義為abstract,但它們沒有抽象方法。abstract的作用是強制二者不能被實例化,必須被繼承,

      7.7 管道

      • 連接方法:
        • 構造
        • connect

      7.8 不同流的速度比較

      • 內存映射>緩沖>文件>RandomAccessFile

      Java I/O流的其它應用

      8 線程

      8.1 線程的概念

      • 進程是程序的一次動態執行過程
      • 標準線程是由指令指針(PC),線程ID,寄存器集合和堆棧組成
      • 線程間的數據可以共享

      線程模型

      • 三個部分組成:虛擬cpu、code、Data
      • 虛擬cpu封裝在java.lang.Thread類中

      8.2 線程的創建

      • 以下兩種方法都要使用Java.lang中的Thread類及其方法:
        • 由Thread類派生子類
        • 實現Runnable接口
        • 生成一個Thread對象,就產生了一個線程,對該對象進行操作,就操作了該線程
      • Thread類本身只是線程的虛擬CPU,線程所執行的代碼是通過方法Run()來完成的
      • Run()方法稱為線程體,當一個線程被建立并初始化以后,Java的運行時系統就會調用run()方法。

      通過繼承Thread類構造線程

      class testThread extends Thread{
        public testThread (){
          super(str); //調用父類的構造方法為線程對象命名
        }
        public void run(){
          for (int i=0; i<3; i++){
            System.out.println( getName()+"在運行");  //將值輸出顯示在console窗口中
            try {
              sleep(1000);
              System.out.println( getName()+"在休眠");
            } catch(InterruptedException e){}  
          }
          System.out.println( getName()+"已結束")
        }
      }
      class Thread1{
        public static void main(String args[]){
          testThread t1 = new testThread("Thread1");
          testThread t2 = new testThread("Thread2");
          t1.start();
          t2.start();
        }
      }
      

      通過實現Runnable接口構造線程

      • 一個類已經擴展了Frame和Applet,由于單繼承性,這樣的類就不能再繼承Thread,可以通過實現Runnable接口構造線程
      class class1 implements Runnable
      {
        someMethod{
          //以實現了Runnable接口的類創建的對象 為參數 來創建Thread對象
          Thread threadobj = new Thread(new class1())
          threadobj.start()
        }
        public void run(){
          ...
        }
      }
      public static void main(String args[]){
        Thread threadobj = new Thread( new class1);
        threadobj.start();
      }
      
      • run()方法的返回值類型應為void
      • Java.util包有一個Date類,實例化Date對象可得到當前事件

      8.3 線程的調度與控制

      線程的優先級

      • Thread類有三個關優先級的靜態常量

        • MIN_PRIORITY=1
        • MAX_PRIORITY=10
        • NORM_PRIORITY=5
      • 新線程會繼承創建它的父類的優先級

      • 線程具有普通優先級

      • setPriority()修改優先級

      線程的基本控制

      sleep()

      • sleep()會拋出InterruptedException,必須捕獲

      yield()

      • 將執行的權利交給其他優先級相同的線程
      • 若隊列中沒有其他線程,則繼續執行

      join()

      • 使當前的線程等待,直到t結束為止
      • 當前線程調用t.join(),則當前線程等待線程t結束后繼續執行
      • join(long millis):調用t.join(),當前線程等待線程t結束或最多等待millis毫秒

      interrupt()

      currentThread()

      isAlive()

      • 如果線程已被啟動且未被終止,那么isAlive()返回true,但無法判斷是處于可運行還是等待狀態
      • 如果返回false,則線程是新創建或已被終止

      suspend()和resume()

      • 易造成死鎖

      8.4 線程的同步

      2 對象鎖及其操作

      • 實現對象互斥鎖:synchronized:用于方法或代碼段
      • 一個對象中所有synchronized方法都共享一把鎖
      • 聲明方法:
      synchronized returnType methodName([paraList]){}
      
      synchronized (this) {}
      
      • 如果synchronized用在類聲明中,則表明該類中的所有方法都是synchronized

      3 線程間的交互

      • wait()、notify()/notifyAll()都是Object類的final方法,被所有類繼承,不可被改寫
      • 三者只能在被聲明為synchronized的方法或代碼段中使用

      wait()

      • 讓當前線程釋放其所持有的“對象互斥鎖”,進入wait隊列

      notify()

      • 喚醒一個或所有正在等待隊列中等待的線程,并將他們移入等待同一個“對象互斥鎖”隊列
      • notify后,當前線程不會馬上釋放鎖,要等到當前線程被synchronized修飾的代碼執行完,才會釋放鎖

      8.5 線程的狀態

      • Newborn 之后一定是 Runnable
      • Running 之前一定是 Runnable
      • Dead之前一定是Running

      Newborn

      • 創建一個新線程后,該線程為New狀態,系統不為它分配資源
      • 該狀態只能調用start()或stop(),否則拋出IllegalThreadStateException
      • 調用start()后,該線程參與運行調度

      Runnable

      • New -> start() -> 系統分配資源 -> run() -> Runnable
      • Running -> yield() -> Runnable
      • Running -> sleep()/t.join 結束 -> Runnable
      • Running -> 調用wait(),被notify()/Allnotify()喚醒(注意不能是sleep(),且必須被喚醒) -> Runnable
      • Blocked -> 輸入輸出結束 -> Runnable

      Running

      • Runnable -> 獲取CPU -> Running

      Blocked

      • Running -> Blocked
        • 線程調用sleep()、join()、wait()
        • 線程中使用synchronized來請求對象的鎖而未獲得
        • 線程進行輸入輸出

      Dead

      • Running -> run()正常結束 -> Dead
      • stop()

      8.6 線程相關的其他類與方法

      8.6.1 支持線程的類

      • java.lang.Thread
      • java.lang.Runnable
      • java.lang.Object
      • java.lang.ThreadGroup
      • java.lang.ThreadDeath

      8.6.2 線程組

      • 線程組在線程創建時設置,不可改變
      • 使一組線程作為一個對象進行統一處理與維護

      8.6.3 Thread類的其他方法

      public final void setName(String name)
      public final String getName()
      public static int activeCount()
      public final ThreadGroup getThreadGroup() //返回該線程所屬的線程組
      public final void setDaemon() //設置守護線程
      public String toString() //返回該線程的字符串表示形式
      public static int enumerate(Thread[] tarry)
      

      9 編寫圖形用戶界面

      • AWT:abstract window toolkit 抽象窗口工具包
      • AWT可用于Java的Application和Applet
      • Swing組件:建立在AWT之上

      9.1 用AWT編寫GUI

      • 創建圖形界面的基礎包:java.awt

      9.1.1 基本的GUI類

      Component類

      • 基本方法
      setName
      getName //獲取標題
      paint
      repaint
      update
      setFont
      setForeground
      setSize
      setLocation
      setEnable
      isEnable
      setVisible
      
      • 常用組件
        • Button
        • CheckBox
        • Choice
        • Label
        • Canvas

      Container類

      • Container類是Component類的子類

      • 用來表示各種GUI組件的容器

      • 主要方法

        • 管理組件
      add()
      remove()
      
      • 布局管理
      setLayout()
      

      9.1.2 常用容器

      Frame 窗口

      • 包含標題、菜單、文本區和按鈕的圖形窗口
      • Frame extends Window
      • Window extends Container

      Panel

      • 透明容器,沒有標題和邊框
      • 不能作為最外層的容器單獨存在
      • 面板可以享有自己的布局管理器
      • 可以使用一個布局管理器組合不同的面板,并放于一個Frame或Applet或其他面板中

      9.1.3 布局管理器 LayoutManager

      • 在不同的操作系統中,Java構件外觀可能不同,JVM獲取不同操作系統的標準按鈕。布局管理器可以管理版面布局

      • 可以使用實現了LayoutManager接口的布局類來設置組件的布局方式。

      • 布局管理器都實現了LayoutManager接口

      • 使用布局管理器后,無法繞過它設置組件的大小、位置(調用setLocation()、setSize()等),若要自己設置,則需取消該容器的布局管理器(setLayout(null))

      • 不同的容器有不同的默認布局管理器

      • FlowLayout是Pane和Applet的默認布局管理器

      • BorderLayout是Window、Dialog和Frame的默認布局管理器

      FlowLayout

      • 自動調用組件的getPreferedSize()方法
        • 容器改變大小后,各組件大小不變,相對位置變化
      • 添加組件:add()
      • 若原容器不使用FlowLayout,而要修改為使用FlowLayout:
      setLayout(new FlowLayout())
      
      • setLayout是Container的方法

      BorderLayout

      • 東西南北
      • 容器改變大小后,相對位置變化,組件大小改變:南北組件高度不變,東西組件寬度不變
      • 添加組件方法
      add("West", new Button("West"));
      add(new Button("West"), BorderLayout.SOUT);
      

      GridLayout

      • 要在網格單元中放多個組件要先在此網格單元中放容器

      CardLayout

      • 使用CardLayout布局時,調用add(字符串,組件)將組件加入容器
      • 顯示組件:
      show(容器名, 字符串)
      first(容器名)
      last(容器名)
      previous()
      next()
      

      容器的嵌套

      public class TestPanel extends Frame{
          Panel p1;
          TextArea ta;
          TextField tf;
          Button bt;
          Label lb;
          public TestPanel{
            super("容器嵌套");
            p1 = new Panel();
            p1.setBackground(Color.gray);
            ta = new TextArea();
            tf = new TextField("textfieldtext");
            bt = new Button("buttonton");
            lb = new Label("labelabel")
            p1.add(bt);
            p1.add(ta);
            p1.add(tf);
            p1.add(bt);
            p1.add(lb);
            add(p1,"East");
            setVisible(true);
            setSize(360,240);
          }
      }
      
      ## 9.2 AWT事件處理模型
      * 三類對象:Event、Event Source、Event Handler
        
      * Button類的方法
      
      ```java
      public void setLabee(String label)
      public void addActionListener(ActionListener l)
      public void removeActionListener(ActionListener l)
      

      Button Event 處理步驟

      • 通知JVM類要監督和處理一個動作事件
      • 激活按鈕
      • 實現一個方法處理事件

      ActionListener

      • java.awt.event包的一個接口

      • 只有一個方法

      public interface ActionListener extends EventListener{
      public abstract void actionPerformed(ActionEvent e)
      }
      
      • 關鍵步驟:
      public class EventFrame extends Frame{
        private Button quit = new Button("Quit")
        public EventFrame(){
          ...
          setLayout(new FlowLayout());
          add(quit);
          //quit是事件源,產生事件而不處理事件,ActionListener處理事件
          ...
          quit.addActionListener(new ButtonHandler());
          //注冊按鈕給監聽者
          }
      }
      //指定按鍵之后的行動
      class ButtonHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
          System.exit(0);
        }
      }
      
      • 把按鈕對象注冊給實現了監聽器接口的對象

      事件類

      • 所有事件都放在包java.awt.event中
      • java.util.EventObject是所有事件類的父類,有兩個主要方法:
      getSource() //獲取事件源
      toString() //返回事件對象名的字符串
      
      • java.awt.event中常見的事件類:
        • 低級事件
          • ComponentEvent
          • FocusEvent
          • KeyEvent
          • MouseEvent
          • WindowEvent
        • 高級事件
          • ActionEvent
          • AdjustmentEvent
          • ItemEvent
          • TextEvent

      事件監聽器

      • 事件監聽器在java.awt.event包中,被定義為接口
      • 事件監聽器與事件要對應起來
      • 常見的事件監聽器
        • ActionListener
        • AdjustmentListener
        • ComponentListener
        • 鼠標事件的監聽器
          • MouseListener
          • MousMotionListener

      AWT事件及其相應的監聽器接口

      ActionEvent事件

      • 觸發時機
        • 單擊按鈕
        • 點擊菜單項
        • 文本框中按回車
      • 事件監聽接口:ActionListener
        • 用匿名類創建接口對象:
          ActionListener listener = new ActionListener(){
            public void  actionPerformed(ActionEvent event){
              ...
            }
          }
          
      • 接口方法:actionPerformed(ActionEvent e)
      • 組件注冊該事件的方法:addActionListener()

      Window事件

      • WindowListener接口方法:
        • windowActivated(WindowEvent e)
        • windowClosed(WindowEvent e)
        • windowDeiconified(WinowEvent e) 從最小化恢復為普通窗口
        • windowIconified(WindowEvent e) 窗口變為最小化圖標
      • 接口適配器類
        • 當接口方法不止一個時,只實現其中一部分
        • WindowAdapter

      ComponentEvent事件

      • 觸發時機
        • 組件移動

      ContainerEvent事件

      FocusEvent事件

      ItemEvent事件

      • 觸發時機
        • 改變復選框中選中狀態
      • 接口方法

      TextEvent事件

      • 觸發時機
        • TextField中按下Return鍵
      • 接口方法:textValueChanged(TextEvent e )

      KeyEvent事件

      • KeyEvent方法:
        • char getKeyChar()
        • int getKerCode()
      • 接口方法:
        • keyPressed(KeyEvent e)
        • keyReleased(KeyEvent e)
        • keyTyped(KeyEvent e)

      MouseEvent

      MouseListener
      MouseMotionListener
      • 接口方法:
        • mouseMoved(MouseEvent e)
        • mouseDragged(MouseEvent e)

      9.2.4 事件適配器類

      適配器類 Adapter

      • Adapter可以作為事件監聽器的父類

      內部類

      • 內部類對象可以訪問外部類的成員方法和變量,包括私有成員
      • 內部類、匿名類編程易于實現事件監聽器
      • 內部類便于編寫事件驅動程序

      匿名類

      • 用于“次拋”
      • 構造方法
      someMethod( new ClassType([constructorInputList]){類體} )
      
      • 以接口名作為構造方法名稱,創建的就是匿名類

      9.3 AWT組件庫

      常用的基本組件

      CheckBox 復選框

      復選框組

      下拉式菜單(choice)

      畫布

      單行文本輸入區(TextField)

      文本輸入區(TextAera)

      列表

      Dialog

      FileDialog

      用戶

      • 菜單只能被添加到MenuBar中
      • MenuBar只能???添加到Frame中

      Color

      • Java.awt.Color類提供了顏色的一些方法

      Font

      • Java.awt.Font類提供了字體
      Font myFont = new Font(String name, int style, int size)
      

      9.4 用Swing編寫GUI

      Swing概述

      • javax.swing包中4個重要類:JApplet、JFrame、JDialog和JComponent
      • JComponent是絕大部分組件的父類
      graph TD A(Container) --> B(JComponent) A --> C(Window) C --> D(Frame) C --> E(Dialog) D --> F(JFrame) E --> G(JDialog)
      • JFrame, JApplet, JDialog, JWindow都是重組件,有同位體,可以和操作系統交互信息,稱為Swing的頂層容器

      • javax.swing.event包中定義了事件和事件監聽器類。

      • javax.swing.table包中包括了表格組件的支持類。

      Swing的特性

      • 支持鍵盤代替鼠標
      • 使用圖標

      9.5 Swing組件和容器

      組件的分類

      • 頂層容器:JFrame, JApplet, JDialog, JWindow
      • 中間容器:JPanel, JScrollPane, JSplitPane, JToolBar
      • 特殊容器:JInternalFrame, JLayeredPane, JRootPane
      • 基本組件
        • JButton
        • JComboBox
        • JList
        • JMenu
      • 不可編輯的信息顯示
        • Jlabel
        • JProgressBar
        • JToolTip
      • 可編輯的信息顯示
        • JFileChooser
        • JTable
        • JTextArea

      使用Swing組件的基本規則

      • 加組件不能直接添加到頂層容器之中,要加到與頂層容器相關的內容面板(content pane)上

      • 避免使用非Swing的重量級組件

      • 添加組件的兩種方式

       //getContentPane()獲取JFrame的內容面板后再添加組件
      frame.getContentPane().add(childComponent);
      // 建立一個中間容器,把組件添加到容器中,用setContentPane方法把該容器置為JFrame的內容面板
      JPanel contentPane = new JPanel();
      frame.setContentPane(contentPane);
      

      各種容器面板

      根面板

      • 由以下3個部分組成
        • GlassPane:玻璃面板,完全透明,默認不可見,用于接收鼠標事件和在組件上繪圖
        • ContentPane:
        • JMenuBar:可選擇菜單條
      • 常用方法:
      Container getContentPane();
      JMenuBar getMenuBar();
      Component getGlassPane();
      JLayeredPane getLayeredPane();
      

      分層面板

      • Swing提供兩種分層面板:JLayeredPane和JDesktopPane,
      • JDesktopPane是JLayeredPane的子類,用以容納內部框架

      JPanel

      • 是中間容器,是輕量組件
      • 默認布局是FlowLayout

      JScrollPane

      JSplitPane

      JTabbedPane

      JToolBar

      JInternalFrame

      • 需添加到一個容器中(通常為JDesktopPane),否則不顯示
      • 不必調用show()或setVisible()方法,內部框架隨所在容器一起顯示
      • 必須用setSize()或pack()或setBounds方法設置尺寸
      • setLocation()或setBounds設置其在容器中的位置
      • 像頂層JFrame一樣,對內部框架添加組件也要加到它的內容面板上
      • 在內部框架中建立對話框,不能使用JDialog作為頂層窗口,要用JOptionPane或JInternalFrame
      • JInternalFrame不能監聽窗口事件,但可監聽JInternalFrameEvent

      各種組件

      JButton

      • 構造方法
      JButton(String text, Icon icon)
      

      JCheckBox

      JRadioButton

      JComboBox

      JProgresBar

      JTable

      JTree

      JOptionPane類

      • showXXXDialog()方法所用參數:

        • parentComponent:指示對話框的父窗口對象
        • message:
        • title
        • messageType:
          • ERROR_MESSAGE
          • PLAIN_MESSAGE
        • icon
        • optionType
          • DEFAULT_OPTION
          • YES_NO_OPTION
        • initialSelectionValue
        String inputValue = JOptionPane.showInputDialog("Input something")
        

      4. 布局管理器

      • BoxLayout

      事件處理

      • 需要用到的兩個包:java.awt.event 和 java.swing.event

      10 Applet

      與Application的關系

      • Application使用命令行命令直接運行,從main()方法開始運行

      • Applicati的解釋器是java.exe,Applet的解釋器是兼容java的瀏覽器

      • Applet的主類要定義為Applet類或JApplet類的子類

      • Applet可以不包含main()方法

      Applet工作原理

      • 運行于瀏覽器環境
        • 首先要創建一個HTML文件,通過編寫HTML語言代碼告訴瀏覽器載入何種Applet以及如何運行。
      • 每個Applet必須是通過擴展Java的Applet類來實現
      • 所有的Applet須繼承自Applet類
      class AppletName extends Applet
      
      1. 瀏覽器(向WWW服務器)請求、下載、解釋、顯示HTML
      2. 瀏覽器遇到HTML中的Applet標記,根據Applet的名字和位置請求、下載Applet字節碼文件(.Class)
      3. 瀏覽器用Java解釋器執行Applet
      • 字節碼文件和HTML文件可以放在相同或不同的服務器上

      Applet的生命周期

      1. 初始化:init()
      2. 開始運行:start()
        1. Applet的主體
      3. 停止運行:stop()
      4. 撤銷清理:destroy()
        1. 瀏覽器關閉時自動調用
        2. 清除Applet所用的所有資源

      9.2 Applet的類層次結構

      • Java.awt.Panel > Java.applet.Applet > Java.swing.JApplet
      • 是一個面板容器

      9.3 Applet類API

      • 顯示方法

        • paint(Graphics g)
        • update(Graphics g)
        • repaint()
      • HTML標記方法

        • public URL getDocumentBase()
        • public URL getCodeBase()
        • public String getParameter(String name)
      • 多媒體支持方法

        • public image getImage(URL utl, String name)
        • public AudioClip getAudioClip(URL utl, String name)
        • public void play(URL utl, String name)
      • Applet信息報告方法

      10.2 Applet的編寫

      • import java.applet.*
      • 如果基于Swing的Applet:
      import javax.swing.*;
      public class AppletName extends JApplet{}
      

      在HTML中applet標記的使用

      • 必要:applet, code, width, height
      <applet code = "Hello.class" width = 300 height=300>
      </applet>
      
      • CODE
      • WIDTH
      • HEIGHT
      • CODEBASE
      • ALT
      • NAME

      使用標記參數向Applet傳遞信息

      • PARAM NAME = appletParameter1 VALUE value
        • Applet 可以用getParameter()獲取<PARAM>屬性指定的參數
        • getParameterInfo()可得到有關<PARAM>屬性的說明信息

      獲取參數步驟

      • 在頁面中:
      <param name=p1 value="11"> //name后不需加引號
      
      • 在Applet類中
      s1=getParameter("p1")
      

      10.3 Applet與GUI

      1. Applet中的事件處理

      2. 基于AWT組件的Applet用戶界面

      3. 基于Swing組件的Applet用戶界面

      • 唯一子類:JRootPane 根面板
      • JRootPane中的ContentPane是JApplet除了菜單條以外所有構件的父類
      • 默認布局:BoarderLayout
      • 繪圖方法:paintComponent()

      4. JApplet添加構件方法

      方法1

      • 用getContentPane()方法獲得JApplet內容面板,再向內容面板中增加構件:
        Container contentPane = getContentPane();
        contentPane.add(SomeComponent)
        

      方法2

      • 建立一個JPanel之類的中間容器
      • setContentPane(),將中間容器設為JApplet的內容面板
        JPanel contentPane = new JPanel();
        contentPane.add(SomeComponent);
        setContentPane(contentPane);
        

      10.4 Applet的多媒體支持

      • 顯示圖像
        • getImage()
      • 動畫

      10.5 Applet與工作環境的通信

      11 集合與泛型

      11.1 集合的概念

      • Collection,即Container

      集合類的特點

      • 只容納對象名
      • 容納的元素都是Object類型
        • 把一個對象置入集合類,它的類信息將消失
      • 大小可變
        • 解決數組定義數組時就要確認數組大小的問題

      集合體系結構

      • Java集合結構由兩個接口樹構成
      • Collection
        • 定義了所有集合的基本操作
        • Set
        • List
      • Map

      集合分類

      Set

      • 集里的對象不按任何特定的方式排列
      • 按索引值操作數據
      • 不能有重復的元素

      List

      • 按索引值操作數據
      • 可以有重復的元素

      Map

      • 映射的每一項為“鍵——值對”,key不能重復,value可以重復

      簡單集合類

      Vector

      • 實現動態數組

      ArrayList

      • 實現了List接口

      以上為兩個動態數組

      11.2 泛型

      泛型類

      class 類名 <T> {...}
      

      泛型接口

      posted on 2022-12-04 20:42  Glovesize  閱讀(38)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 中文字幕av无码免费一区| 性色欲情网站| 丰满人妻一区二区三区无码AV| 又爽又黄又无遮掩的免费视频| 色av综合av综合无码网站| 国精品人妻无码一区免费视频电影| 国产一区二区三区禁18| 精品熟女少妇免费久久| 中文字幕乱码视频32| 国产激情一区二区三区成人 | 亚洲成人av高清在线| 久久精品国产国产精品四凭| 国产欧美日韩另类在线专区| 久久精品亚洲精品国产色婷| 国产成人无码A区在线观| 勃利县| 在线亚洲午夜片av大片| 国产精品自产在线观看一| 国产成人啪精品视频免费软件 | 午夜通通国产精品福利| 国产片AV国语在线观看手机版| 久播影院无码中文字幕| 亚洲最大在线精品| 久久精品国产一区二区蜜芽| 人妻少妇精品久久| 亚洲天堂在线观看完整版| 91中文字幕一区在线| 国产成人精品2021欧美日韩| 精品久久免费国产乱色也| 欧美日韩一线| 精品一区二区久久久久久久网站| 午夜成年男人免费网站| 夜鲁鲁鲁夜夜综合视频欧美| 亚洲性日韩精品一区二区| 无码福利一区二区三区| 欧美黑人性暴力猛交在线视频| 道真| 成A人片亚洲日本久久| 伊人狠狠色j香婷婷综合| 午夜国产精品福利一二| 亚洲成av一区二区三区|