① java語言中的方法和構造方法有什麼區別
構造方法沒有返回值,方法名和類名一樣,其作用是用於在NEW一個類的時候,會總先調用這個類的構造方法,構造方法內部可以作一些變數的初始化或在創建這個類時必須調用的一些方法和運算,他是不用特意去調用的方法,會隨著類的創建而自動去調用。
例如:我們需要做一個i+j的運算,在這期間我們用到了構造函數,讓其改變了i和j的初始化值
public class Text {
int i = 0;
int j = 0;
/**
* Text 的構造函數 將i和J的值重新初始化賦值
*/
public Text() {
i = 1;
j = 2;
};
public static void main(String[] args) {
Text s = new Text();
//此時當你NEW完Text()時程序已經自動執行了Text的構造 函數i和j的值已經是1和2
System.out.println(s.i + s.j);
}
}
② java構造方法
java構造方法也就是java構造函數,方法舉例如下圖:
java構造函數一般用來初始化成員屬性和成員方法的,即new對象產生後,就調用了對象了屬性和方法。
在現實生活中,很多事物一出現,就天生具有某些屬性和行為。比如人一出生,就有年齡、身高、體重、就會哭;汽車一出產,就有顏色、有外觀、可以運行等。這些,我們就可以將這些天然的屬性和行為定義在構造函數中,當new實例化對象時,也就具有這些屬性和方法了,沒必要再去重新定義了,從而加快了編程效率。
(2)java方法和構造方法擴展閱讀:
java構造函數的特點:
1、函數名與類名相同
2、不用定義返回值類型。(不同於void類型返回值,void是沒有具體返回值類型;構造函數是連類型都沒有)
3、不可以寫return語句。(返回值類型都沒有,也就不需要return語句了)
③ java中構造方法和方法有什麼區別
我不知道怎麼和你解釋,所以在網上找了點資料,希望可以幫助你。
構造方法要與類名相同,無返回類型,在類初始化的時候調用。
方法最好與類名不同,對象調用,靜態方法可用類名.方法().
功能和作用的不同
構造器是為了創建一個類的實例。這個過程也可以在創建一個對象的時候用到:Platypus p1 = new Platypus();
相反,方法的作用是為了執行java代碼。
修飾符,返回值和命名的不同
構造器和方法在下面三個方便的區別:修飾符,返回值,命名。和方法一樣,構造器可以有任何訪問的修飾: public, protected, private或者沒有修飾(通常被package 和 friendly調用). 不同於方法的是,構造器不能有以下非訪問性質的修飾: abstract, final, native, static, 或者 synchronized。
返回類型也是非常重要的。方法能返回任何類型的值或者無返回值(void),構造器沒有返回值,也不需要void。
最後,談談兩者的命名。構造器使用和類相同的名字,而方法則不同。按照習慣,方法通常用小寫字母開始,而構造器通常用大寫字母開始。構造器通常是一個名詞,因為它和類名相同;而方法通常更接近動詞,因為它說明一個操作。
"this"的用法
構造器和方法使用關鍵字this有很大的區別。方法引用this指向正在執行方法的類的實例。靜態方法不能使用this關鍵字,因為靜態方法不屬於類的實例,所以this也就沒有什麼東西去指向。構造器的this指向同一個類中,不同參數列表的另外一個構造器,我們看看下面的代碼:
public class Platypus {
String name;
Platypus(String input) {
name = input;
}
Platypus() {
this("John/Mary Doe");
}
public static void main(String args[]) {
Platypus p1 = new Platypus("digger");
Platypus p2 = new Platypus();
}
}
在上面的代碼中,有2個不同參數列表的構造器。第一個構造器,給類的成員name賦值,第二個構造器,調用第一個構造器,給成員變數name一個初始值 "John/Mary Doe".
在構造器中,如果要使用關鍵字this,那麼,必須放在第一行,如果不這樣,將導致一個編譯錯誤。
"super"的用法
構造器和方法,都用關鍵字super指向超類,但是用的方法不一樣。方法用這個關鍵字去執行被重載的超類中的方法。看下面的例子:
class Mammal {
void getBirthInfo() {
System.out.println("born alive.");
}
}
class Platypus extends Mammal {
void getBirthInfo() {
System.out.println("hatch from eggs");
System.out.print("a mammal normally is ");
super.getBirthInfo();
}
}
在上面的例子中,使用super.getBirthInfo()去調用超類Mammal中被重載的方法。
構造器使用super去調用超類中的構造器。而且這行代碼必須放在第一行,否則編譯將出錯。看下面的例子:
public class SuperClassDemo {
SuperClassDemo() {}
}
class Child extends SuperClassDemo {
Child() {
super();
}
}
在上面這個沒有什麼實際意義的例子中,構造器 Child()包含了 super,它的作用就是將超類中的構造器SuperClassDemo實例化,並加到 Child類中。
編譯器自動加入代碼
編譯器自動加入代碼到構造器,對於這個,java程序員新手可能比較混淆。當我們寫一個沒有構造器的類,編譯的時候,編譯器會自動加上一個不帶參數的構造器,例如:public class Example {}
編譯後將如下代碼:
public class Example {
Example() {}
}
在構造器的第一行,沒有使用super,那麼編譯器也會自動加上,例如:
public class TestConstructors {
TestConstructors() {}
}
編譯器會加上代碼,如下:
public class TestConstructors {
TestConstructors() {
super;
}
}
仔細想一下,就知道下面的代碼
public class Example {}
經過會被編譯器加代碼形如:
public class Example {
Example() {
super;
}
}
繼承
構造器是不能被繼承的。子類可以繼承超類的任何方法。看看下面的代碼:
public class Example {
public void sayHi {
system.out.println("Hi");
}
Example() {}
}
public class SubClass extends Example {
}
類 SubClass 自動繼承了父類中的sayHi方法,但是,父類中的構造器 Example()卻不能被繼承。
總結
主題
構造器
方法
功能
建立一個類的實例
java功能語句
修飾
不能用bstract, final, native, static,
or synchronized
能
返回類型
沒有返回值,沒有void
有返回值,或者void
命名
和類名相同;通常為名詞,大寫開頭
通常代表一個動詞的意思,小寫開頭
this
指向同一個類中另外一個構造器,在第一行
指向當前類的一個實例,不能用於靜態方法
super
調用父類的構造器,在第一行
調用父類中一個重載的方法
繼承
構造器不能被繼承
方法可以被繼承
編譯器自動加入一個預設的構造器
自動加入(如果沒有)
不支持
編譯器自動加入一個預設的調用到超類的構造器
自動加入(如果沒有)
不支持
構造方法,可以理解為在對象使用之前必須調用的方法,而該類當中的其他方法則沒這個必要
所以在創建對象的時候,不但要分配內存,還要調用構造方法
細微的差別
構造方法必須沒有返回值,其他方法必須有返回值
構造方法有默認構造方法,而其他方法沒有
java 類當中方法有返回值,並且習慣方法名開頭小寫!
構造方法沒有返回值,而其寫法特殊是
public/private + 類名 +()+{}。是固定的
例如
class A{
private int id;
private String name;
public A(){}
public A(int id,String name){
this.id = id;
this.name = name;
}
}
第一個 public A(){}是預設的構造方法,第二是重載Full的構造方法。
④ JAVA中構造方法和普通方法的區別是什麼
只有構造方法才能new,用於生成實例對象,分配內存空間等。
普通方法是不能new 的,可以通過對象名來調用。在對象有內存空間後可以處理類成員變數和調用其他的方法。
拿個不算恰當的比喻來說,
構造方法相當於給你開房間,普通方法是進房間後在自己的許可權內隨便玩,設置可以開另外一個房間。沒有房間之前,普通方法無用武之地。
⑤ java中什麼是方法與構造方法
把人比作對象的話,那麼方法就是為人服務的工具,比如汽車,手機登
構造方法就是用來對變數進行初始化的.相當於給變數賦值
構造方法和方法的區別:
構造方法要與類名相同,無返回類型,在類初始化的時候調用。
方法最好與類名不同,對象調用,靜態方法可用類名.方法().
⑥ Java 普通方法和構造方法的區別
構造方法意為構造器,也就是為了程序在內存中構造當前類的對象,並提供相關get,set方法,共修改其屬性,多用於bean對象,而普通方法一般用於處理不同的程序單元,比如一個類中有加、減、乘、除這4個方法,這就是普通方法,只為處理程序邏輯上的功能。
構造方法:
①方法名和 類名相同
②在方法名的前面沒有返回值類型的聲明
③在方法中不能使用return語句返回一個值
④在創建對象時,要調用new,如:book b1=new book();
⑤當沒有指定構造方法時,系統會自動添加無參的構造方法
⑥當有指定構造方法時,無論該構造方法是有參,還是無參,系統都不會再自動添加無參的構造方法
⑦構造方法的重載:方法名相同,但參數不同的多個方法,調用時會自動根據不同的參數選擇相應的方法
普通方法:
①有返回類型
②方法名不能和類型相同
publicclassbean{
privateinta;
privateintb;
publicvoidsetA(inta){
this.a=a;
}
publicintgetA(){
returna;
}
publicvoidsetB(intb){
this.b=b;
}
publicintgetB(){
returnb;
}
publicbean(){}//空的構造方法
publicbean(inta,intb){//帶參構造方法
this.a=a;
this.b=b;
}
}
而構造方法和普通方法都可以被重載,如下:
voidselectForPage(Stringtable,intpageNo){
selectForPage(table,10,pageNo)
}
voidselectForPage(Stringtable,intpageSize,intPageNo){
...
}
⑦ 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中的構造方法
構造方法作用就是對類進行初始化。
如果你沒有定議任何構造方法的形式,程式會為你取一個不帶任何參數的構造函數,那麼你產生類的對像時只能用不帶參數的方法,如:class
a
{}//沒有任何構造函數。
構造方法就是與類同名的那個方法,它的作用是可以用來初始化,例子如下class
Person
//人類{public
Person(String
n,int
a)
//構造方法
{ name
=
n;
age
=
a;} private
string
name; private
int
age;}static
void
main(String[]
args){Person
p
=
new
Person("張三",14);//這就是作用}new一個對象的時候要用到構造函數,例如Hello
hello
=
new
Hello();這時調用的是Hello的無參數構造方法;Hello
hello
=
new
Hello("hi");這個是調用Hello有參數構造方法,在JAVA中如果不寫構造方法的話,會默認加上一個無參數的構造方法,但是如果已經有了一個有參數的構造方法,那麼無參數的構造方法就不會默認被加上.如果Hello類中已經有了一個有參數的構造方法,這時再使用
Hello
hello
=
new
Hello();來創建對象的時候就會出錯,這就是為什麼書上要強調寫了有參數的構造方法就最好加一個無參數的構造方法.
⑨ java構造方法和方法的區別
你自己寫代碼的時候,不需要考慮構造方法。因為構造方法是類實例化的時候 會自動調用構造方法,構造方法默認的是無參數的,java術語叫無參構造器。你也可以自己寫一個有參的構造器。 類初始化的時候 就可以調用有參的構造方法。一般實際開發中,你類實例化的時候要傳參數,控制的是你的初始化不同。
你自己寫代碼的時候呢,只需要用你new出來的對象,調用你寫的方法就可以。不必關心構造方法。你需要初始化一些類成員變數的時候,可以在構造方法中初始化。實例化的時候會自動調用構造方法進行初始化。
如果你還想了解的更深入,就需要買本書好好看看了。因為構造器還牽連著Java中的很多機制。比如說多態機制,垃圾回收機制等的實現都和構造器有關聯。
區別是
1.構造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有。
2.構造方法的調用是在創建一個對象時使用new操作進行的。構造方法的作用是初始化對象。
3.每個類可以有零個或多個構造方法.
4.不能被static、final、synchronized、abstract和native修飾。構造方法不能被子類繼承。
5.構造方法在創建對象時自動執行,一般不能顯式地直接調用。