var user = JsonSerializer.Deserialize<UserModel>(jsonStr, new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = true
});
public class UserModel
{
public UserModel()
{
}
public UserModel(string email, string gid)
{
Email = email;
Gid = gid;
}
public string Email { get; set; }
public string Gid { get; set; }
}
1.用類創(chuàng)建對(duì)象時(shí)使用構(gòu)造函數(shù)。構(gòu)造函數(shù)名必須與類名相匹配并且必須沒(méi)有返回類型。它們可以被重載,但是不被子類繼承。
調(diào)用構(gòu)造函數(shù)
2.只能從其他構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù)。要調(diào)用同一個(gè)類中的構(gòu)造函數(shù),用匹配的參數(shù)調(diào)用 this() 函數(shù)。
要調(diào)用超類中的構(gòu)造函數(shù),用匹配的參數(shù)調(diào)用 super() 函數(shù)。
創(chuàng)建子類對(duì)象時(shí),按層次結(jié)構(gòu)中從上到下的順序調(diào)用所有超類的構(gòu)造函數(shù)。
3.默認(rèn)構(gòu)造函數(shù)
如果沒(méi)有在類中提供任何其他構(gòu)造函數(shù),編譯器將創(chuàng)建默認(rèn)構(gòu)造函數(shù)。它沒(méi)有任何參數(shù)。
默認(rèn)構(gòu)造函數(shù)調(diào)用超類的無(wú)參數(shù)構(gòu)造函數(shù)。它與類有同樣的訪問(wèn)修飾符。
不過(guò),哪怕在類中編寫了一個(gè)構(gòu)造函數(shù),編譯器就不會(huì)提供默認(rèn)構(gòu)造函數(shù)。
例如,下面的類具有一個(gè)定義了兩個(gè)參數(shù)的構(gòu)造函數(shù)。這里如果我們?cè)噲D不傳遞參數(shù)就實(shí)例化這個(gè)類,
那么編譯器將給出錯(cuò)誤,因?yàn)闆](méi)有默認(rèn)構(gòu)造函數(shù)
class Dog
{
int x, y;
Dog(int x, int y)
{
this.x = x;
this.y = y;
}
}
4.如果調(diào)用類的默認(rèn)構(gòu)造函數(shù),而超類沒(méi)有不帶參數(shù)的構(gòu)造函數(shù),那么您的代碼將不能編譯。
原因是子類的默認(rèn)構(gòu)造函數(shù)隱式地調(diào)用其超類的無(wú)參數(shù)構(gòu)造函數(shù)。例如:
class Dog
{
int x, y;
Dog(int x, int y)
{
this.x = x;
this.y = y;
}
}
class MyDog extends Dog { }
class Test
{
public static void main(String args[])
{
MyDog dog=new MyDog();
}
}
一般情況下是可以不寫,系統(tǒng)有一個(gè)默認(rèn)的構(gòu)造方法,但是如果你自己加了一個(gè)構(gòu)造方法,
那么默認(rèn)的就失效了,需要自己加進(jìn)去,就算沒(méi)寫代碼也要加