day04

来源:https://www.cnblogs.com/xq-mys/archive/2018/07/14/9311254.html
-Advertisement-
Play Games

JavaDay04總結 1、實現介面VS繼承類 : 1. 實現介面是繼承的補充 2. 實現介面可以在不打破繼承關係的前提下,對某個功能擴展 2、綁定 : 1. 前期綁定:在程式運行前進行綁定,由編譯器和連接程式實現,又叫靜態綁定 2. 後期綁定:在運行時根據對象的類型進行綁定,由方法調用機制實現,又 ...


JavaDay04總結

1、實現介面VS繼承類

  1. 實現介面是繼承的補充
  2. 實現介面可以在不打破繼承關係的前提下,對某個功能擴展

2、綁定

  1. 前期綁定:在程式運行前進行綁定,由編譯器和連接程式實現,又叫靜態綁定
  2. 後期綁定:在運行時根據對象的類型進行綁定,由方法調用機制實現,又叫動態綁定

3、final:修飾變數或者方法

  1. 當不希望父類的某個方法被子類覆蓋時
  2. 當不希望類的某個變數值被修改時
  3. 當不希望被繼承時

註意:final修飾的變數又叫常量,用xx_xx_xx命名,並且變數在定義時必須賦初值且不能修改
使用final:1.因安全考慮,類的方法不能被修改 2.類不會被其他類繼承 3.某些變數值固定不變
4、數組
1.定義:數據類型 數組名[]=new 數據類型[大小]; eg.int a[]=new int [5]; int a[]=int []a
2.引用:數組名[下標] a.length 計算數組大小
3.初始化數組:int a[]={1,2,3,4,5}; 相當於 int a[]=new int[5];a[0]=1;a[1]=2;...
數組小結:(1)數組可以存放同一類型數據 (2)簡單數據類型數組可直接複製 (3)對象數組在定義後,賦值時需要再次為每個對象分配空間 (4)數組大小必須提前指定 (5)數組名為數組首地址的使用 (6)數組的下標從0開始
5、對象數組

/*
作者:mys
功能:對象數組的使用
日期:2018/7/13
 */
package cn.mys;
import java.io.*;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Demo16 {
    public static void main(String []args) throws Exception
    {
        //定義一個可以存放四隻狗的對象數組
        Dog dogs[]=new Dog[4];
        //從控制台輸入各個狗的信息
        InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);
        for(int i=0;i<4;i++)
        {
            dogs[i]=new Dog();//創建一個空間存放狗的具體信息
            System.out.println("請輸入第"+(i+1)+"只狗的名字:");
            //從控制台讀取狗名
            String name=br.readLine();//異常
            //將狗名賦給對象
            dogs[i].setName(name);

            System.out.println("請輸入狗的體重:");
            //從控制台讀取狗的體重
            String s_weight=br.readLine();
            //String->float
            float weight=Float.parseFloat(s_weight);
            //將狗體重賦給對象
            dogs[i].setWeight(weight);
        }
        //計算總體重
        float allWeight=0;
        for(int i=0;i<4;i++)
        {
            allWeight+=dogs[i].getWeight();
        }
        //計算平均體重
        float avrWeight=allWeight/dogs.length;
        System.out.println("總體重:"+allWeight+" 平均體重:"+avrWeight);
    }
}
class Dog
{
    private String name;
    private float weight;
    public void setName(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
    public void setWeight(float weight)
    {
        this.weight=weight;
    }
    public float getWeight()
    {
        return weight;
    }
}

6、二進位數操作

  1. 二進位的最高位是符號位:0正數,1負數
  2. 正數的原碼、反碼、補碼一樣
  3. 負數的反碼=原碼符號位不變,其餘位取反
  4. 負數的補碼=反碼+1
  5. 0的反碼、補碼=0
  6. java的數都是有符號的
  7. 電腦在運算時,都是以補碼的方式

位運算符:& | ^ ~
移位運算符

  1. 算術左移<< :符號位不變,低位補0(相當於*2)
  2. 算術右移>> :符號位不變,低位溢出,並用符號位補溢出高位
  3. 邏輯右移>>>:低位溢出,高位補0

7、集合類
分類

  1. List集合類:ArrayList類、LinkedList類、Vector類、Stack類
  2. Map集合類:HashMap類、Hashtable類
  3. Set集合類:HashSet類、TreeSet類
  4. Queue集合類:Queue介面

ArrayList和Vector區別

  1. 同步性:Vector同步,保證線程的安全性;ArrayList非同步,線程並不安全但是效率高。
  2. 數據增長:都使用數組來控制集合中的對象,當增加元素時,如果超出內部數組的目前長度,需要擴展,Vector在預設的情況下自動增長為原來的一倍,ArrayList增長為原來的50%,若要在集合中保存大量數據,用Vector。
        //ArrayList使用
        //定義ArrayList對象
        ArrayList a1=new ArrayList();
        //顯示大小
        System.out.println("加入前a1大小:"+a1.size());
        //向a1中加入數據(類型是Object)
        //創建一個職員
        Clerk clerk1=new Clerk("mys",19,1000);
        Clerk clerk2=new Clerk("sky",20,1200);
        Clerk clerk3=new Clerk("lucy",20,900);
        //將clerk1加入到a1中
        a1.add(clerk1);
        a1.add(clerk2);
        a1.add(clerk3);
        a1.add(clerk1);//可以放入同樣的對象
        //顯示大小
        System.out.println("加入後a1大小:"+a1.size());

        //訪問a1中對象(數據)
        //Clerk temp=(Clerk)a1.get(0);//註意類型要匹配
        //System.out.println("第一個名字是:"+temp.getName());

        //遍歷a1所有對象
        for(int i=0;i<a1.size();i++)
        {
            Clerk temp=(Clerk)a1.get(i);
            System.out.println("第"+(i+1)+"個名字是:"+temp.getName());
        }
        //從a1中刪除一個對象
        a1.remove(2);
        System.out.println("=====刪除後====");
        for(int i=0;i<a1.size();i++)
        {
            Clerk temp=(Clerk)a1.get(i);
            System.out.println("第"+(i+1)+"個名字是:"+temp.getName());
        }
    }

HashMap和Hashtable區別

  1. 歷史:Hashtable基於陳舊的Dictionary類,HashMap是java1.2引進的Map介面的實現
  2. 同步性:Hashtable同步,HashMap非同步
  3. :HashMap可將空值作為一個表的條目的key或者value,Hashtable不能空放入值null

小結:如果要求數據量很大,又要線程安全考慮時用Vector;要求鍵值時用Hashtable或HashMap

        //HashMap、Hashtable使用
        //創建一個HashMap對象
        HashMap hm=new HashMap();
        Clerk clerk1=new Clerk("mys","m20172213",1000);
        //將clerk1放入hm
        hm.put("mys",clerk1);
        //如果要查找名為 mys
        if(hm.containsKey("mys")) {
            System.out.println("有該員工");
            //取出鍵值
            Clerk clerk=(Clerk)hm.get("mys");
            System.out.println("編號:"+clerk.getNum());
        }
        else {
            System.out.println("沒有該員工");
        }
        //遍歷HashMap中所有的key和value
        //Iterator迭代
        Iterator it=hm.keySet().iterator();
        //hasNext返回一個Boolean
        while(it.hasNext()) {
            //取出key
            String key=it.next().toString();
            //通過key取出value
            Clerk clerk=(Clerk)hm.get(key);
            System.out.println("名字:"+clerk.getName());
            System.out.println("編號:"+clerk.getNum());
            System.out.println("薪水:"+clerk.getSal());
        }
        //Hashtable不能放入空值,HashMap可以
        /*Hashtable ht=new Hashtable();
        ht.put(null,null);*/
        hm.put(null,null);
        System.out.println("測試:"+hm.get(null));

8、泛型:本質:參數化類型,即所有的參數類型被指定為一個參數,可在類、介面和方法中創建,稱為泛型類、泛型介面、泛型方法。安全簡單,在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用性
優點:1.類型安全 2.向後相容 3.層次清晰 4.性能較高,用GL編寫的代碼可以為java編譯器和虛擬機帶來更多的類型信息,這些信息為java程式的進一步優化提供條件

/*
作者:mys
功能:泛型的使用
日期:2018/7/14
 */
package cn.mys;
import java.lang.reflect.Method;
import java.util.*;
import java.util.ArrayList;
public class Demo22 {
    public static void main(String []args) {
        //泛型
        ArrayList<Dog> a1=new ArrayList<Dog>();
        //創建一隻狗
        Dog dog=new Dog();
        //放入集合
        a1.add(dog);
        //取出
        //Dog temp=(Dog)a1.get(0); 強制轉換
        //Cat temp=(Cat)a1.get(0);//報錯:ClassCastException,沒有Cat對象
        //使用泛型後不用強制轉換
        Dog temp=a1.get(0);

       // Gen<Integer> gen1=new Gen<Integer>(1);
       // gen1.showTypeName();
        Gen<Dog> gen2=new Gen<Dog>(new Dog());
        gen2.showTypeName();
    }
}
class Cat {

}
class Dog {
    String name;
    int age;
    public void count() {
    }
}
//定義一個類
class Gen<T> {
    private T o;
    public Gen(T a) {
        o=a;
    }
    //得到T的類型名
    public void showTypeName() {
        System.out.println("類型是:"+o.getClass().getName());
        //通過反射機制,可以得到類型的很多信息,如成員函數名稱
        Method []m=o.getClass().getDeclaredMethods();
        //列印
        for(int i=0;i<m.length;i++){
            System.out.println("成員函數名稱:"+m[i].getName());
        }
    }
}

9、異常:當出現程式無法控制的外部環境問題(用戶提供的文件不存在、文件內容損壞、網路不可用...),java就會用異常對象來描述。
異常分類
1.檢查性異常java.lang.Exception 程式正確,因外在環境條件不滿足而引發
eg.用戶錯誤及I/O問題----程式試圖打開一個並不存在的遠程Socket埠,或者打開不存在的文件時
2.運行期異常java.lang.RuntimeException 程式存在bug eg.數組越界
3.錯誤java.lang.Error 可能源於程式的bug或環境問題(一般),eg.記憶體耗盡,錯誤在程式中無需處理,有運行環境處理
頂層是java.lang.Throwable類,以上三種異常都是這個類的子類
異常處理:程式運行產生異常發生時,將從異常發生中斷程式並向外拋出異常信息。在出現異常的地方,就終止執行代碼,然後進入catch,如果有多個catch語句,則進入匹配異常的那個catch
異常處理方法:
1.在發生異常的地方直接處理
2.將異常拋給調用者,讓調用者處理
finally:將finally塊置於try...catch後,finally塊一般會得到執行,相當於一個萬能保險,即使前面的try塊發生異常而又沒有對應異常的catch塊,finally塊將被執行
多個異常的處理:子類異常的處理塊必須在父類異常處理塊的前面,否則會發生編譯錯誤,因此越特殊的異常越在前面處理,越普遍的異常越在後面處理

/*
作者:mys
功能:異常及其處理、finally
日期:2018/7/14
 */
package cn.mys;
import java.io.*;
import java.net.*;
import java.io.FileReader;

public class Demo23 {
    public static void main(String []args){
        /*異常
        //檢查異常
        //1.打開文件
        FileReader fr=new FileReader("d:\\aaa.text");
        //2.連接一個192.168.1.1 IP埠號123
        Socket s=new Socket("192.168.1.1",123);

        //運行異常
        int a=4/0;//除數為0
        int b[]={1,2,3};
        System.out.println(b[10]);//數組越界
        */
        FileReader fr=null;
        try{
            //在出現異常的地方,就終止執行代碼,然後進入catch
            //如果有多個catch語句,則進入匹配異常的那個catch
            Socket s=new Socket("192.1688.1.1",123);
            //FileReader fr=new FileReader("d:\\aaa.text");
            fr=new FileReader("d:\\aaa.text");
        }catch (Exception e){
            //把異常的信息輸出,利於排除bug
            e.printStackTrace();
        }finally {
            //這個語句塊,不管有沒有異常都會執行
            //一般說,關閉需要的資源[文件,連接,記憶體]
            System.out.println("進入finally");
            if(fr!=null){
                try{
                    fr.close();
                    System.out.println("文件已關閉");
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}
/*將異常拋給調用者
class Father {
    private Son son=null;
    public Father() {
        son=new Son();
    }
    public void test1(){
        //son.test();//調用時出現異常
    }
}
class Son {
    //將異常處理拋出,給調用者
    public void test()throws Exception{
        FileReader fr=new FileReader("d:\\aaa.text");
    }
}
*/

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.DOM簡介 當網頁被載入時,瀏覽器會創建頁面的文檔對象模型,即DOM(Document Object Model)。 2.DOM操作HTML 2.1 改變HTML輸出流 不要在文檔載入完成之後使用document.write()。會覆蓋該文檔 2.2 尋找元素 通過id找到HTML元素 通過標簽 ...
  • 中介者模式 標簽 : 設計模式 初識中介者模式 定義 用一個中介對象來封裝一系列的對象交互。中介者使得各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立的改變它們之間的交互。 結構和說明 ![image_1cichf9j215a4eatf87cma7sm9.png 86.7kB][1] Me ...
  • 一、阻塞IO與非阻塞IO Linux網路IO模型(5種) (1)阻塞IO模型 所有文件操作都是阻塞的,以套接字介面為例,在進程空間中調用recvfrom,系統調用直到數據包到達且被覆制到應用進程緩衝區或發生錯誤時才返回,期間會一直等待(阻塞)。模型如圖: (2)非阻塞IO模型 recvfrom從應用 ...
  • Spring Security是什麼 Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean(註:包括認證與許可權獲取、配置、處理相關實例),充分利用了Spring IoC,DI(控制 ...
  • 本文內容: Listener Filter 首發日期:2018-07-15 Listener 監聽器Listener負責監聽事件的發生。我們能在事件發生後執行一些自定義的操作,這就是監聽器的意義。 監聽器的本質是介面回調。 分類: 監聽域對象的創建:監聽三個域(request,session,con... ...
  • 關於環境變數的配置,在百度上有很多教程,但對於我來說完成這步操作確實不簡單,所以決定在這裡分享一下配置方法。 1.安裝好jdk/jre。 官網都有安裝文件,仔細一些,就能安裝成功,可以自定義安裝路徑,但是要註意安裝時候不能有中文路徑,否則會報錯。 2.打開此電腦,選擇屬性。 3.選擇高級系統設置。 ...
  • 剛開始接觸這個概念的時候真的是完全不夠理解什麼叫做面向對象,即使到了現在人就是不能夠完全可以說明白。 程式員之路的設計理念分為:面向過程和麵向對象; 面向過程:要想得到一個結果需要一步一步的去設計出來,一步一步的敲代碼去實現這是一個過程。 比如說要比較兩個數的大小有以下程式: int a=3; in ...
  • 一,五大核心組件 1.DispatcherServlet 請求入口 2.HandlerMapping 請求派發,負責請求和控制器建立一一對應的關係 3.Controller 處理器 4.ModelAndView 封裝模型信息和視圖信息 5.ViewResolver 視圖處理器,定位頁面 二,Spri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...