㈠ java類的構造方法是什麼
構造方法和實例方法的區別
一、主要的區別在於三個方面:修飾符、返回值、命名
1、和實例方法一樣,構造器可以有任何訪問的修飾符,public、private、protected或者沒有修飾符 ,都可以對構造方法進行修飾。不同於實例方法的是構造方法不能有任何非訪問性質的修飾符修飾,例如static、final、synchronized、abstract等都不能修飾構造方法。
解釋:構造方法用於初始化一個實例對象,所以static修飾是沒有任何意義的;多個線程不會同時創建內存地址相同的同一個對象,所以synchronized修飾沒有意義;
構造方法不能被子類繼承,所以final和abstract修飾沒有意義。
2、返回類型是非常重要的,實例方法可以返回任何類型的值或者是無返回值(void),而構造方法是沒有返回類型的,void也不行。
3、至於命名就是構造方法與類名相同,當然了實例方法也可以與類名相同,但是習慣上我們為實例方法命名的時候通常是小寫的,另一方面也是與構造方法區分開。
而構造方法與類名相同,所以首字母一般大寫。
下面看幾個例子熟悉一下:
publicclassSample{
privateintx;
publicSample(){//不帶參數的構造方法
this(1);
}
publicSample(intx){//帶參數的構造方法
this.x=x;
}
publicintSample(intx){//不是構造方法
returnx++;
}
}
上面的例子即使不通過注釋我們也很容易能區分開的,再看下面一個例子
publicclassMystery{
privateStrings;
publicvoidMystery(){//不是構造方法
s="constructor";
}
voidgo(){
System.out.println(s);
}
publicstaticvoidmain(String[]args){
Mysterym=newMystery();
m.go();
}
}
程序執行的結果為null,雖然說Mystery m = new Mystery();調用了Mystery 類的構造方法,但是public void Mystery()並不是構造方法,他只是一個普通的實例方法而已,那該類的構造方法哪去了呢?
二、說到這就得說一下java的默認構造方法
我們知道,java語言中規定每個類至少要有一個構造方法,為了保證這一點,當用戶沒有給java類定義明確的構造方法的時候,java為我們提供了一個默認的構造方法,這個構造方法沒有參數,修飾符是public並且方法體為空。如果用戶有定義構造方法,就不會有默認構造方法!!!
其實默認的構造方法還分為兩種,一種就是剛剛說過的隱藏的構造方法,另一種就是顯示定義的默認構造方法.
如果一個類中定義了一個或者多個構造方法,並且每一個構造方法都是帶有參數形式的,那麼這個類就沒有默認的構造方法,看下面的例子。
publicclassSample1{}
publicclassSample2{
publicSample2(inta){System.out.println("MyConstructor");}
}
publicclassSample3{
publicSample3(){System.out.println("MyDefaultConstructor");}
}
上面的三個類中Sample1有一個隱式的默認構造方法,下列語句Sample1 s1=new Sample()合法;
Sample2沒有默認的構造方法,下列語句Sample2 s2=new Sample2()不合法,執行會編譯錯誤
Sample3有一個顯示的默認構造方法,所以以下語句Sample3 s3=new Sample3();合法。
㈡ java中什麼是構造方法及其作用
無意中翻到這條提問,看了很多回答,發現歧義較重,在這里解答一下,為了避免後邊來的朋友們踩雷
新手學習Java在構造方法這里很容易踩雷,構造方法是用來初始化的,這句勉強沒錯,可構造方法是用來創建對象的,這句就錯了,實際上,在構造方法執行之前,類的內存空間已經開辟完成了,意思就是說對象已經創建了,這步是由new關鍵字來完成的,而構造方法的作用是給類中的變數進行初始化賦值
假設,假設構造方法是用來創建對象用的,就無法解釋抽象類中為什麼允許構造方法的存在,抽象類無法實例化,不能被創建,但是抽象類中允許構造方法的存在,舉例從側面證明一下:
abstract class Animal{
String name;
public Animal() {
System.out.println("抽象父類的無參構造");
}
abstract void eat();
}
class Dog extends Animal{
public Dog() {
super();
System.out.println("子類的無參構造");
}
@Override
void eat(){
}
}
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
System.out.println(d.name);
}
}
隨手敲的很簡陋的一段代碼,不要在意格式上的不嚴謹,領會精神,這段代碼執行後的結果為:
抽象父類的無參構造
子類的無參構造
null
當執行Dog d = new Dog()這句代碼時,大致會分兩步,一是載入類,開辟類的內存空間,這是由new完成的,第二步執行構造方法,為類中的變數初始化賦值,在執行Dog的無參構造時,系統會默認調用父類的無參構造,也就是super(),super關鍵字是對該類的父類進行的引用,它並不是一個對象,這也是個難點,感興趣的可以去查一下,而super()這句代碼可以簡單理解為調用這個類的父類的無參構造
在上述代碼中,父類Animal是一個抽象類,而抽象類不可被實例化,如果構造方法的作用是創建對象,在這一步上邏輯就無法自洽,而實際情況是:抽象類執行了構造方法,但卻沒有創建對象,同時成員變數name也有了初始值null
㈢ JAVA中構造方法和普通方法的區別
JAVA中構造方法和普通方法的區別 1.建構函式的命名必須和類名完全相同;在java中普通函式可以和建構函式同名,但是必須帶有返回值。
2.建構函式的功能主要用於在類的物件建立時定義初始化的狀態.它沒有返回值,也不能用void來修飾.這就保證了它不僅什麼也不用自動返回,而且根本不能有任何選擇.而其他方法都有返回值.即使是void返回值,盡管方法體本身不會自動返回什麼,但仍然可以讓它返回一些東西,而這些東西可能是不安全的.
3.建構函式不能被直接呼叫,必須通過new運運算元在建立物件時才會自動呼叫,一般方法在程式執行到它的時候被呼叫.
4.當定義一個類的時候,通常情況下都會顯示該類的建構函式,並在函式中指定初始化的工作也可省笑爛帆略,不過Java編譯器會提供一個預設的建構函式.此預設建構函式是不帶引數的.而一般方法不存在這一特點
java中構造方法和普通方法的區別
構造方法:一個類 被例項化 也就是被new的時候 最先執行的是 構造方法,在java類中,如果不顯示宣告建構函式,JVM 會給該類一個預設的建構函式。一個類 可以有多個建構函式。建構函式的主要作用 一是用來例項化該類。二是 讓該類例項化的時候執行哪些方法,初始化哪些屬性。當一個類聲明了建構函式以後,JVM 是不會再給該類分配預設的建構函式。
其實建構函式是用來對一個類以及變數進行例項化。
JAVA中構造方法和普通方法的區別是什麼?
只有構造方法才能new,用於生成例項物件,分配記憶體空間等。
普通方法是不能new 的,可以通過物件名來呼叫。在物件有記憶體空間後可以處理類成員變數和呼叫其他的方法。
拿個不算恰當的比喻來說,
構造方法相當於給你開房間,普通方法是進房間後在自己的許可權內隨便玩,設定可以開另外一個房間。沒有房間之前,歷辯普通方法無用武之地。
java構造方法和普通方法的區別
構造方法沒有返回值,普通方法有返回值,構造方法在類的物件被建立時執行,普通方法在類的物件建立後呼叫時被執行
java中的構造方法和普通方法的區別
構造方不能寫返回值型別
構造方法是用來例項化物件的有有參的有無參的
Java 普通方法和構造方法的區別
構造方法:
①方法名和 類名相同
②在方法名的前面沒有返回值型別的宣告
③在方法中不能使用return語句返回一個值
④在建立物件時碰雹,要呼叫new,如:book b1=new book();
⑤當沒有指定構造方法時,系統會自動新增無參的構造方法
⑥當有指定構造方法時,無論該構造方法是有參,還是無參,系統都不會再自動新增無參的構造方法
⑦構造方法的過載:方法名相同,但引數不同的多個方法,呼叫時會自動根據不同的引數選擇相應的方法
無參的構造方法
class person{
public person(){
System.out.println("無參的構造方法被呼叫了。。。");
}
}
class Ex11{
public static void main(String[] args){
person p=new person();
}
}
有參的構造方法(目的就是為了給物件例項變數賦值)
class person{
int age;
public person(int a){
age=a;
}
public void speak(){
System.out.println("I am "+age+" years old");
}
}
class Ex11{
public static void main(String[] args){
person p=new person();
p.speak();
}
}
普通方法有返回型別,方法名小寫,不能和類名相同,如:void XX(){}普通方法:代表物件可以干什麼
構造方法是初始化物件的重要途徑,如:student s=new student(); s這個例項,是通過構造方法初始化的構造方法:可建立一個物件,並可初始化物件的值
構造方法有對類屬性得初始化的功能,如:public people(String name){this name=name;}或public people(){name="zangsan";age=11;} 完成了people類屬性name或age的初始化
php構造方法析構方法和普通方法的區別
有的類,需要進行一些初始化,比如賦初值、預設值,為類成員申請臨時空間,這些工作可以在建構函式中完成;解構函式可以將建構函式中申請的臨時空間釋放,也可以逐一檢查類中成員如果申請了臨時空間也一一釋放。
java中構造方法和方法的區別
1.建構函式的命名必須和類名完全相同;在java中普通函式可以和建構函式同名,但是必須帶有返回值。 2.建構函式的功能主要用於在類的物件建立時定義初始化的狀態.它沒有返回值,也不能用void來修飾.這就保證了它不僅什麼也不用自動返回,
java中構造方法和成員方法的區別
構造方法是類的一種特殊方法,用於例項化類時給類的一些屬性賦初值;成員方法則是類的一般方法,用來呼叫的。
例如:
public class Users{ private String username; private String password; public Users(){ Users的空構造方法 } public Users(String name,String password) { Users的第二種構造方法給使用者名稱和密碼賦值 this.username=name; this.password=password; } 以下是一般的成員方法給使用者名稱和密碼set賦值及get獲取 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public static void main(String[] args){ 接下來利用構造方法例項化類,構造方法一 Users u= new Users(); System.out.println("使用者名稱:"+u.username); System.out.println("密碼:"+u.password);可以看到是空值 使用構造方法二 Users u= new Users("zhangsan","123456"); System.out.println("使用者名稱:"+u.username); System.out.println("密碼:"+u.password);可以看到使用者名稱是zhangsan,密碼是123456 使用一般方法 u.setUsername("lisi") u.setPassword("654321") System.out.println("使用者名稱:"+u.getUsername()); System.out.println("密碼:"+u.getPassword());可以看到使用者名稱是lisi,密碼是654321 }
}
Java中static方法和普通方法的區別
static方法就是靜態方法。
靜態方法是類方法,類名即可引用。
普通方法是物件方法,需要例項化物件才可以引用
㈣ 請問java中,構造方法是什麼 能通俗的講講嗎
首先要搞清楚什麼是類方法,什麼是構造方法
一個類中的方法分為三類:
1)全局方法 2) 成員方法 3)構造方法
例:
123456789101112public class Test{private int age; //這是成員變數public Test(int age){ //這是構造方法this.age = age;}public void setAge(int age){ //這是成員方法this.age = age;}public static int getAge(){ //這是全局方法,加了static ,成員方法就會變成全局方法return this.age;}}
成員方法和構造方法沒啥關系,區別在於成員方法必須用類的實例化對象進行訪問,而全局方法是用類直接訪問的,而構造方法是實例化對象時進行初始化的
先解釋構造方法:
Test t = new Test(34);
這里的new Test(34) 括弧代表了構造方法,一般的構造的方法是默認的,可以不用寫,如果上面的構造方法不寫,這里就應該這樣實例化對象:
Test t = new Test();
成員方法:
Test t = new Test(34);
t.setAge(35);
用實例化對象調用普通方法即可
普通成員變數:
Test t = new Test(34);
因為變數age加了private 不能這樣調用:t.age = 35; 這樣是錯的,只能通過方法來進行修改
全局方法:
Test.getAge();
直接這樣調用就可以了,當然如果沒有實例化過,這里的Test.getAge()為0
㈤ 什麼叫做JAVA的構造方法(含義)
在Java中,每個類都需要至少一個的構造方法(可以有多個),它用於構造類的對象;在Java中構造方法必須與類名相同;構造方法可以不帶有參數、也可以帶有參數,不帶有參數的構造方法被稱為無參構造(no-arg)方法。
這里大家可能會覺得奇怪,我們之前的MainClass好像就沒有構造方法。其實是這樣的,如果我們不給類提供構造方法,編譯器會自動提供一個無參構造方法。
定義構造方法的語法如下:
Java代碼
constructorName (listOfArguments) {
[constructor body]
}
其中constructorName必須和你定義的類的名字相同,listOfArgumengs是構造方法的參數列表,當然,這里也可以不帶有任何參數。然後大括弧內是我們的方法體。這里提一下,構造方法也可以帶有訪問控制符,即public、protected、private和default(忽略情況下)。
下面的例子給出了一個構造方法的實例:
Java代碼
public class MainClass {
double radius;
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
}
可以看出,我們給MainClass定義了一個構造方法,它的修飾符是默認的。後面的教程大家會學到這幾個訪問控制符的作用。我們的MainClass的構造方法帶有一個double參數,這里大家也可以看出,構造方法的參數可以用於初始化類的屬性,其實強制要求帶參數的構造方法可以保持類的狀態的完整性,即保證構造出的對象是符合要求的。
默認構造方法
前面我講過,如果沒有提供構造方法,編譯器會提供一個默認的構造方法(沒有參數)。這里其實也隱含著一個意思,即,如果我們提供了構造方法,那麼編譯器是不會提供默認的構造方法的。我們可以通過下面的代碼來驗證。
Java代碼
public class MainClass {
double radius;
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
public static void main(String[] args) {
MainClass mc = new MainClass();
}
}
大家可以嘗試編譯上面的代碼,可以發現編譯會出錯,提示的錯誤信息為:
Java代碼
The constructor MainClass() is undefined
這個信息的意思是構造方法MainClass()沒有定義,即編譯器沒有給我們提供默認的構造方法。那麼如果我們還想繼續使用無參的構造方法的話,這就需要我們自己來提供了,如:
Java代碼
public class MainClass {
double radius;
MainClass() {
}
// Class constructor
MainClass(double theRadius) {
radius = theRadius;
}
}
上面的代碼我們自己手動的提供了一個無參的構造方法MainClass(),大家現在嘗試編譯代碼,會發現,代碼是可以通過編譯的。所以在自己實際的工作中,稍微注意這點。
多個構造方法
其實我們前面已經見過多構造方法的例子了,不過這里給大家提示下,Java支持一個類中定義多個構造方法,如:
Java代碼
class Sphere {
int radius = 0;
Sphere() {
radius = 1;
}
Sphere(int radius) {
this.radius = radius;
}
}
這里我們定義了球(Sphere)類,然後定義了它的半徑並提供了兩個構造方法。在默認的構造方法里,我們將半徑設置為1,然後在帶有半徑作為參數的構造方法中,我們設置了半徑為提供的值。
在一個構造方法中調用另一個方法
我們一直稱呼構造方法,那麼既然是方法,當然支持方法的調用。在Java中,我們可以從一個構造方法中調用另一個構造方法。要調用另一個方法,只要使用this關鍵字,然後後面跟著括弧,如果要調用的構造方法中帶有參數,只要將參數放到對應的位置即可。如:
Java代碼
class Sphere {
int radius = 0;
double xCenter;
double yCenter;
double zCenter;
Sphere() {
radius = 1;
}
Sphere(double x, double y, double z) {
this();
xCenter = x;
yCenter = y;
zCenter = z;
}
Sphere(int theRadius, double x, double y, double z) {
this(x, y, z);
radius = theRadius;
}
}
在使用這種方式的時候,稍微注意下,不要引起循環調用。在出現循環調用的時候,編譯器會出現類似於如下的提示來阻止類編譯通過:
Java代碼
Recursive constructor invocation MainClass(int)
它的意思是遞歸的構造方法調用,大家遇到這個問題的時候,稍微檢查下自己的代碼,看看構造方法是否出現遞歸調用了。
㈥ JAVA構造方法
構造方法的方法名必須與類名一樣。
構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。
構造方法不能作用是完成對象的初始化工作,他能夠把定義對象時的參數傳遞給對象的域。
構造方法不能由編程人員調用,而要系統調用。
構造方法可以重載,以參數的個數,類型,或排序順序區分。
例子:
1;單個構造函數方法;』