Java基礎總結

来源:https://www.cnblogs.com/charlottepl/archive/2020/03/21/12538563.html
-Advertisement-
Play Games

JAVA 簡介 1. 面向對象的特征主要有哪些: 封裝 繼承 多態 抽象 1. 輸入,輸出 1. 輸出:System.out.println\("Hello"\); 1. 輸入: 1. 標識符的組成: 1. Java標識符由:字母,數字,下劃線,美元符號$組成,並且只能以字元,下劃線,$開頭。 1. ...


JAVA

簡介

  1. 面向對象的特征主要有哪些:

    • 封裝

    • 繼承

    • 多態

    • 抽象

  2. 輸入,輸出

    1. 輸出:System.out.println("Hello");

    2. 輸入:

    
    //在Java中的輸入需要使用Scanner的對象讀取來自System.in的輸入,Scanner類在包java.util中,使用時須導入:
    
    import java.util.Scanner;
    
    Scanner對象中常用的獲取用戶輸入的方法有:
    
        String nextLine();
    
        boolean nextBoolean();
    
        short nextShort();
    
        int nextInt();
    
        long nextLong();
    
        double nextDouble();
    
        
    
        Scanner input = new Scanner(System.in);
    
        System.out.print("請輸入圓的半徑");
    
        double radius = input.nextDouble();
    
        double area = radius*radius*3.14;
    
        System.out.println("圓的面積是:"+area);
    
    
  3. 標識符的組成:

    1. Java標識符由:字母,數字,下劃線,美元符號$組成,並且只能以字元,下劃線,$開頭。

    2. 標識符是大小寫敏感的並且未規定最大長度

    3. 標識符不能是Java關鍵字或者保留字

  4. 數據類型:程式設計語言描述事物,對象的方法。Java數據類型分為基本類型和引用類型兩大類。

    1. 基本類型

      • 整數類型:byte,short,int,long

      • 浮點類型:float,double

      • 字元類型:char

      • 布爾類型:boolean

    2. 引用類型:

      • 介面

      • 數組

      • 枚舉

    3. Java是一種強類型語言。這就意味著必須為每一個變數聲明一個類型。在java中,一共有8種基本類型:4種整數類型,2種浮點類型,1種字元類型,一種布爾類型。

      • byte:1位元組

      • short:2個位元組

      • int:4個位元組

      • long:8個位元組

      • char:2個位元組

      • boolean:1個位元組

      • float:4個位元組

      • double:8個位元組

      • (預設10000000表示-128)

  5. 常量的定義:

final int NUM = 12;
//常量一旦被初始化,就不能再改變值
```1. java種支持的運算符
![](image.png)1. 類型轉換:

   1. 隱式轉換:int n = 5;double f = n;

   1. 強制轉換:double f = 5.5;int n = \(int \)f;

   1. 數據類型按容量大小排序:byte\-\-short\-\-char\-\-int\-\-long\-\-float\-\-double

## 數組

1. 數組的初始化:數組只是聲明的話,JVM並沒有給數組分配記憶體空間,在使用數組前還需要對其進行初始化(即為其分配記憶體空間)。給數組元素分配記憶體並未數組元素賦初始值的過程稱為數組初始化。
1. 靜態初始化

int ids[] = {1,2,3}

int ids[] = new int[4];
for(int i = 0;i<3;i++){
ids[i]=i;
}

int i = ids[0];


   1. 聲明:

1.int[][] ids;

2.int [] ids[];

3.int ids[][];


   1. 靜態初始化

   ```

   int num [][] = {{1,2},{3,4}};

   ```1. 動態初始化

   ```

   String[][] names = new Stirng[3][4];

   ```
1. Arrays類的引入

1. 常用方法

1.copyOf:實現數組的賦值

2.fill:可以為數組填充相同的值

   Arrays.fill(names,"Hello!");

3.sort:實現數組的排序

   Arrays.sort(names);

   Arrays.sort(names,0,3); //對第一個到第四個進行排序

4.binarySearch:實現排序後的數組元素查找

5.copyOfRange();

   int[] b = Arrays.copyOfRange();

List str = new ArrayList<>();

str.add("Hello!");

## 類和對象

1. 封裝:將屬性(數據)和處理這些屬性的行為結合起來,僅對外公開介面以達到信息隱藏的目的。

1. 繼承:在軟體開發種,若已有類A,要創建類B,而類A和B屬性,行為基本相同,則只需要在A的基礎上增加些新內容即可,提高了代碼的重用率,提高了編程的效率。

1. 多態:同一個操作作用於不同的類的對象,將產生不同的執行結果。

1. new是一個關鍵字,它為新創建的對象開闢記憶體空間,用於保存對象的成員變數和成員方法

## 類和繼承

1. final修飾的類不能有派生類,String是典型的例子
1. Object類是所有java類的頂級基類。
1. 繼承過程:

1. 吸收基類成員:派生類把基類全部的成員接收過來

1. 增加派生類成員:這部分內容是派生類對基類功能的擴展,要根據需要仔細考慮應當增加那些成員。在聲明派生類時,一般還應當自己定義派生類的構造方法。因為構造風法時不能從基類繼承的。

1. 調整基類成員:隱藏同名基類成員。

1. 方法重寫的規則:

   1. 重寫的方法返回值類型時基類方法返回值類型的子類或者相同

   1. 重寫的方法具有相同的方法名

   1. 重寫的方法參數列表必須相同

   1. 不能重寫被標記為final的方法

   1. 重寫的方法不能縮小訪問許可權。

   1. 不能重寫基類私有的方法。

1. 基類的引用可以指向派生類的對象:向上轉型

   1. 好處:可以使用派生類強大的功能。可以抽取基類的共性。

   1. 指向派生類對象的基類的引用可以調用基類中定義的屬性和方法

   1. 指向派生類的基類的引用不能調用派生類中定義而基類中沒有定義的方法。
1. 包:命名空間,避免命名衝突。

1. 包的名稱就像是我們的姓,而class名稱就像是我們的名字。

1. 如果希望自己的類從屬於一個包,可以使用package關鍵字

package com.baidu.www;


## 抽象類和介面

1. abstract修飾的類稱為抽象類,抽象類的特點:

1. 不能實例化對象

1. 類中可以定義抽象方法(abstract修飾的方法)

1. 抽象類中可以沒有抽象方法
1. 抽象類和介面

1. 介面中的方法預設修飾符為public abstract

1. 介面中所有的屬性的修飾符預設為public static final;

1. 介面和抽象類的區別:

   * 抽象類描述的是“是不是”的問題,而介面描述的是“有沒有”的問題

   * 介面只有定義,不能有方法的實現,抽象類可以有定義和實現,方法可以在抽象類中實現。

   * 介面interface,抽象類abstract。

   * 實現介面的關鍵字implements,繼承抽象類的關鍵字為extends,一個類可以實現多個介面,但是一個類只能繼承一個抽象類。
1. abstract修飾的方法稱為抽象方法,抽象方法只有方法的聲明而沒有方法的實現,即沒有方法體。包含抽象方法的類本身必須是被聲明為抽象的。
1. 抽象類的繼承:派生類繼承抽象類必須實現抽象類中所有的抽象方法,否則派生類也必須定義為抽象類。
1. Java中介面是一系列方法的聲明,是一些方法特征的集合,介面可以看做事一種特殊的抽象類,其中包含常量和方法的聲明,而沒有變數和方法的實現。
1. 介面的定義:

interface Test{
int compareTo();
}

1. 介面的實現

class Student implements 介面名{
...
}

1. 抽象類

   * 不能實例化,但是可以聲明抽象類的引用。

   * 包含抽象方法的類必須定義為抽象類

   * 不包含抽象方法的類不一定不是抽象類

   * 抽象方法不含方法體,必須顯式定義為abstract

   * 抽象類的派生類必須實現基類的所有抽象方法
1. 介面

   * 彌補Java單一繼承機制的不足

   * 不能實例化,但是可以聲明介面變數

   * 包含常量和方法的聲明,不包含變數和方法的實現(常量可以沒有final修飾,但是必須初始化,在介面實現類中不能修改值,方法可以沒有abstract,在交界口裂實現類中必須實現)

   * 介面中的抽象方法不能有方法體

   * 介面不能繼承類
1. Object類:所有Java類的祖先,每個類都可以使用Object作為基類。所有對象都是先這個類的方法。

   1. 在不明確給出超累的情況下,Java會自動把Object作為要定義類的超類。

   1. 可以使用類型為Object的變數指向任意類型的對象。

   1. Object類有一個預設構造方法public Object(),在構造派生類實例時,都會先調用這個預設構造方法。

   1. Object類的變數只能用作各種值的通用持有者。要對他們進行任何專門的操作,都要知道他們的原始類型併進行類型轉換。

Object obj = new MyObject();

MyObject x = (MyObject)obj;


   1. Object():預設構造方法

   1. clone():創建並返回此對象的一個副本

   1. equals(Object obj):指示某個其他對象是否與此對象相等。

   1. finalize():當垃圾回收期確定不存在對改對象更對的運用時,由杜希昂的垃圾回收器調用此方法。

   1. getClass():返回一個對象運行時類。

   1. hashCode():返回該對象的哈希碼值

   1. notify():喚醒在此對象監視器上等待的單個線程。

   1. notifuAll():喚醒在此對象監視器上等待的所有線程。

   1. toString():返回該對象的字元串表示

   1. wait():導致當前的線程等待,直到其他線程調用此對象的notify或者notifyAll方法。

   1. equals方法:用於測試某個對象是否和另一個對象相等,它在Object類中的實現是判斷兩個對象是否指向同一塊記憶體區域。

      * String中重寫了equals方法,判斷對象的值是否相同,==判斷地址是否相同。

   1. toString方法:

      * Object類的toStirng方法返回一個字元串,該字元串由類名(對象是海內的一個實例),at標記符@和此對象哈希碼的無符號十六進位表示組成。

      ```

      getClass().getName()+"@"+Integer.toHexString(hashCode())

      ```

## 多態

1. 一個對外介面,多個內在實現方法
1. 向上轉型:就是基類引用指向派生類對象,既可以使用派生類強大的功能,也可以抽取基類的共性。
1. 在運行時期,將根據person這個對象引用實際的類型來獲取對應的方法。所以才有多態性,對於基類中定義的方法,如果派生類中重寫了該方法,那麼基類類型的引用將會調用派生類中定義的這個方法。
1. 對於派生類中定義而基類中沒有的方法無法調用。

## 包裝器類

1. 概念:Java中的八種基本數據類型本身只能表示一種數據,為了能將基本類型是為對象來處理,並能鏈接相關的方法,Java為每個基本類型提供了包裝類。
1. Java的八種基本數據類型對應的包裝器類分別為Byte,Short,Character,Integer,Long,Float,Double,Boolean。
1. 創建包裝器類型的對象:

1. Java可以直接處理基本數據類型,但是在有些情況下需要將其作為對象來處理,這時就需要將其轉化為包裝器類型,在一定的場合,運用Java包裝器類來解決問題,能大大提高編程效率。

1. 創建的兩種方法

1.Integer i = new Integer(1);

2.Double d = Double.valueOf(3.14);

對象一旦賦值,其值將不能再改變。


![](image.png)

## 內部類

1. 內部類是定義在另一個類中的類,也稱內置類或者嵌套類
1. 特點:

1. 內部類是一種編譯時的語法,編譯後生成的兩個類是獨立的兩個類。(對於一個名為other的外部類和其內部定義的名為inner的內部類。編譯完成後出現other.class和other$inner.class兩個類)

1. 內部類可以訪問外部類的任何成員(包括私有成員),但是外部類不能直接訪問內部類的成員。

1. 內部類可為靜態,可以用procected,private修飾,而外部類只能使用public和預設的包訪問許可權。

1. 用內部類定義再外部類中不可訪問的屬性。這樣就可以再外部類中實現了比外部類的private還要小的訪問許可權。
1. 內部類的形式:

1. 成員內部類

   * 作為外部類的一個成員存在,與外部類的屬性,方法併列。內部類和外部類的實例變數可以共存。

   * 在外部類中使用內部類首先在外部類中new出內部類。

1. 局部內部類

   * 局部內部類不能聲明為介面

   * 想要使用局部內部類時,需要生成外部類對象,通過外部類對象調用外包方法,在方法中才能調用局部內部類。

1. 匿名內部類

   * 匿名類沒有類名,它必須繼承一個類或者時實現一個介面。不能有顯式的extends和implements子句。

1. 靜態內部類

   * 靜態內部類定義在類中,在任何方法之外,使用static定義。

## static修飾符

1. 靜態屬性特點:

* 聲明為static的屬性也被稱為類屬性。

* 當創建一個對象時,並不產生static屬性的拷貝。

* 該類所有的實例共用同一個static屬性

* 在類裝載時,只分配一塊存儲空間,蘇頗有此類的對象都可以操控此存儲空間。
1. 訪問形式:

1. 通過類名.共有靜態屬性名

1. 通過對象名.共有靜態屬性名
1. 使用規則:

1. 在靜態方法中,僅能直接調用其他的static類型的方法。

1. 在靜態方法中,只能直接訪問static類型的屬性。

1. 在靜態方法中,不能以任何方式使用this或者super。

1. 靜態代碼塊盡在該類貝介在時執行一次。

1. 涉及到繼承的時候,會優先初始化父類的static代碼塊,然後是子類的靜態代碼塊。
1. 總結:

1. static表示“全局”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。

1. 被static修飾的成員變數和成員方法獨立於該類的任何對象,他不依賴特定的實例,被類的所有實例共用。

1. static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用,但是不餓能在其他類中通過類名來直接引用。

1. 用static修飾的代碼塊表示靜態代碼塊,當Java虛擬機(JVM)載入類時,就會執行該代碼塊。

## 枚舉

1. 定義

enum enum_name{num1,num2,num3}
定義星期的枚舉:
enum day{monday,tuesday,wensday,thursday,friday}
使用
day.monday


## 異常和斷言

1. 異常分為兩大類:

   * Error:描述了Java運行系統中的內部錯誤以及資源耗盡錯誤,唯一的解決方法:儘力使程式安全的終止。

   * Exception:程式中需要關註的。1.運行時異常,在Java虛擬機正常運行期間排除的異常,由程式錯誤導致,Java編譯器允許程式中不對這類異常做出處理。2.其他異常:一般都是外部錯誤,Java編譯器要求在程式中必須處理這類異常。
1. 小結:

   1. 系統自動排出的異常:所有系統定義的編譯和運行異常都可以由系統自動拋出,稱為標準異常,並且Java強烈要求程式進行完整的異常處理,給用戶友好的提示,或者修正後使程式繼續執行。

   1. 語句拋出的異常:用戶程式自定義的異常和應用程式特ing的異常,必須藉助於throws和throw語句來定義拋出的異常。

   1. throw和throws的區別:

      * throws語句用在方法聲明後面,表示該方法會拋出哪些異常,使它的調用者知道要捕獲這些異常

      * throw語句用在方法體內,表示拋出異常,是具體向外拋異常的動作,它拋出一個異常實例。

      * throws表示出現異常的一種可能性,濱海不是一定會發生這些異常;throw則是跑出來異常,執行throw則i頂跑出來某種異常。
1. 斷言:assert

   1. 當需要在一個值為FALSE時中斷當前操作的話,可以使用斷言。

   1. assert後買你跟著冒號表達式,如果冒號之前為true,則冒號後面的被忽略,否則拋出AssertionError,錯誤內容為冒號後面的文字。

## JDK8中的日期

1. Java中用於表示日期的類:Date類,Calendar類
1. 日期的格式化和解析:

   * DateFormate

   * SimpleDateFormate
1. java\.time:

   * 瞬時時間:Instant

   * 年月日:LocalDate

   * 時間:LocalTime

   * 年月日時間:LocalDateTime
1. java\.time.format

   * DateTimeFormatter
1. Instant類\-\-\-時間戳

   * 獲取當前時間,類似於java.util.Date:

      * Instant now = Instant.now\(\);

      * Instant t = Instant.ofEpochSecond\(100\)

   * 和Date的轉換

      * Date\.from\(now\);

      * new Date\(\).toInstant\(\);
1. LocalDate類

   * LocalDate類只有年月日部分,沒有小時分鐘秒

   * 實例化

      * LocalDate today = LocalDate.now\(\);

      * LocalDate christmas = LocalDate.of\(2018,12,25\);
1. LocalTime

   * LocalTime類只有小時分鐘秒,沒有年月日

   * 實例化:

      * LocalTime now = LocalTime.now\(\);

      * LocalTime zero = LocalTime.of\(0,0,0\);//00:00:00

      * LocalTime mid

## 字元串,日期

1. 字元串常量類:String

   * String對象一經賦值,其值不可修改

   * 指的是所指向的記憶體值不可修改,但是指向可以修改
1. 字元串變數類:StringBuffer,StringBuilder

   1. 構造方法初始化

String name = new String("Hello!");


String name = "Hello!";


   * String str = "a"; 這個只是一個引用,記憶體中如果有“a"的話,str就指向它;如果沒有,才創建它;

   

     如果你以後還用到"a"這個字元串的話並且是這樣用:

   

     String str1 = "a"; String str2 = "a"; String str2 = "a"; 這4個變數都共用一個字元串"a"。

   

     

   * 而String str = new String\("a"\);是根據"a"這個String對象再次構造一個String對象,將新構造出來的String對象的引用賦給str。

1. String類是final的,無法被繼承。
1. 字元串分割解析類:StringTokenizer
1. String類:

1. 出於安全考慮,String類實現了值的不可變

1. String中常用的字元串處理方法:

   * 字元串連接:concat(String str)/“\+”運算符

   * 字元串查找:

      1. indexOf(String str);

      1. lastIndexOf(String str);

      1. charAt(int indexOf);

      1. startsWith(String prefix);

   * 字元串分割:

      1. split(String regex)字元串分割

      1. compareTo(String str)字元串比較

      1. equalslgnoreCase(String str)忽略大小寫

   * 字元串替換:

      1. replace(char oldChar,char newChar)

   * 字元串求子串

      1. substring(int beginIndex,int endIndex)

   * 字元串大小寫轉換

      1. toUpperCase()小寫轉大寫

      1. toLowerCase()大寫轉小寫
1. StringBuffer類

1. StringBuffer類是一個字元串變數類

   * StringBuffer對象的值可以修改

   * 主要用於對字元串做大量修改的操作時

1. StringBuffer變數的初始化:

   * 構造方法初始化

   * StringBuffer stringBuffer = new StringBuffer(“Hello”);

1. StringBuffer類中常用的方法:

   * 字元串連接:append(Object obj);

   * 字元串刪除:delete(int start,int end);

   * 字元串插入:insert(int offset,Object obj);

   * 轉換為String對象:toString();
1. StringBuilser類:

1. StringBuilder類和StringBuffer類的調用是一致的。

1. StringBuilder類和StringBuffer類的區別:

   * StringBuffer是線程安全的

   * StringBuilder是非線程安全的
1. StringTokenzier類

1. StringTokenizer類主要用途是將字元串以界定符為界,分析為一個個獨立的token(單詞)

1. StringTokenizer中的定界符可以自己指定。

1. StringTokenizer常用的方法:

   * hasMoreTokens:是否有更多的分隔符

   * nextToken:返回下一個分隔符前的內容值
1. 日期的格式化:

1. Java中用於表示日期的類

   * Date類

   * Calendar類

1. 日期的格式化和解析

   * DateFormate

   * SimpleDateFormate

1. Date類

   1. java\.util.Date類實際上是一個包裹類,它包含的是一個長整型數據,表示的是從GMT1970年1月1日00:00:00這一刻之前或者之後經歷的毫秒數

   1. Date類提供了兩個重載的構造方法

      * Date\(\):以本地當前時間構造一個Date對象。

      * Date(long date):以距離基準時間的毫秒數構造Date對象,

      ```

      Date date = new Date();

      System.out.println(date.getTime)

      ```

1. Calendar類

1. 日曆類,Calendar類定義了足夠的方法來表述日曆的規則

1. Calendar是一個抽象類,Java中提供了Calendar的一個具體的實現類GregorianCalendar

1. Calender和Date的轉換

   1. 從一個Calendar對象中獲取Date對象

   ```

   Calendar calendar6

   ```1.

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

-Advertisement-
Play Games
更多相關文章
  • 1. WebView用法 ①佈局文件新建一個WebView,特別註意線性佈局和控制項的寬高都要匹配父控制項 ②代碼中的配置 ③AndroidManifest.xml文件中聲明許可權 2. 使用HTTP協議訪問網路 (1)使用HttpURLConnection 首先學習一個新的控制項ScrollView 由於 ...
  • 網路上有很多MySQL表碎片整理的問題,大多數是通過demo一個表然後參考data free來進行碎片整理,這種方式對myisam引擎或者其他引擎可能有效(本人沒有做詳細的測試).對Innodb引擎是不是準確的,或者data free是不是可以參考,還是值得商榷的。本文基於MySQL的Innodb存 ...
  • 前言:昨日與今日重裝SQL Server2016,報了"Polybase要求安裝Oracle JRE 7更新51(64位)或更高版本"規則失敗的錯誤,網上查詢資料,有兩種解決方式,一種是安裝JDK、另一種是不安裝此功能。通過對Polybase功能的瞭解,決心安裝一下SDK。沒想到遇到了茫茫多的坑。總 ...
  • 安裝 第一步:打開百度雲鏈接,下載安裝包 鏈接:https://pan.baidu.com/s/1gE96PTcuMovmqE4TEFHvwA 提取碼:rm6g 第二步:雙擊打開,等待5s,點擊下一步 第三步:接受協議,點擊下一步 第四步:選擇安裝類型,有“Typical(預設)”、“Complet ...
  • 最近在學習springboot,想整理一篇博客,關於springboot整合mybatis並配置主從資料庫的,但是電腦win10系統上並沒有配置mysql主從資料庫。所以花了幾天的時間終於整好了。在這裡記錄一下。 首先是關於在win10上安裝兩個mysql8的步驟,我找到了一篇博客,按照上面的步驟, ...
  • 今遇到問題: 查看表空間,發現表空間大小已達到32G,但創建表空間時已設置了無限擴展(初始空間為1G),磁碟空間沒滿,說明表空間無法進行自動擴展了。 問題原因: 查找資料瞭解到Oracle單個表空間數據文件的最大值為: 最大數據塊 * DB_BLOCK_SIZE 查看Oracle的 DB_BLOCK ...
  • (1)用戶標識和鑒別: 該方法由系統提供一定的方式讓用戶標識自己的名字或身份。每次用戶要求進入系統時,由系統進行核對,通過鑒定後才能提供系統的使用權 (2)存取控制 通過用戶許可權定義和合法權檢查確保只有合法許可權的用戶訪問資料庫,所有未授權的人員無法存取數據 (3)視圖機制 為不同的用戶定義視圖,通過 ...
  • 註意:無特殊說明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 MaterialApp 在學習Flutter的過程中我們第一個看見的控制項應該就是MaterialApp,畢竟創建一個新的Flutter項目的時候,項目第一個組 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...