“Java类的构造方法”的版本间的差异
来自CloudWiki
(→什么是构造方法) |
|||
第4行: | 第4行: | ||
构造,英文名construction ,是建造、创造的意思。每次在创建实例变量,对类中的所有变量都要初始化是很乏味的。如果在一个对象最初被创建时就把对它的设置做好,程序将更简单并且更简明。所有我们引入了构造方法。构造方法的作用是创建一个对象并对其完成初始化。 | 构造,英文名construction ,是建造、创造的意思。每次在创建实例变量,对类中的所有变量都要初始化是很乏味的。如果在一个对象最初被创建时就把对它的设置做好,程序将更简单并且更简明。所有我们引入了构造方法。构造方法的作用是创建一个对象并对其完成初始化。 | ||
− | 具体说来,我们创建一个对象的时候,都要用到new语句,比如Consumer c= new Consumer(); | + | 具体说来,我们创建一个对象的时候,都要用到new语句,比如Consumer c= new Consumer();这个时候new语句都会调用一个构造方法,完成对象的初始化工作。调用的这个构造方法的名称必须与类同名,比方说,类名叫Consermer,构造方法名也叫Consumer() |
+ | |||
<nowiki>public class Consumer { | <nowiki>public class Consumer { | ||
第13行: | 第14行: | ||
} | } | ||
− | + | public static void main(String[] args) { | |
// TODO Auto-generated method stub | // TODO Auto-generated method stub | ||
Consumer c= new Consumer(); | Consumer c= new Consumer(); | ||
− | + | } | |
}</nowiki> | }</nowiki> | ||
− | + | 每个类都有构造方法,没有例外。如果没有显式地为类定义构造方法((像上一节一样)。Java编译器将会为该类提供一个默认构造方法,只是我们看不到罢了: | |
+ | [[文件:java3-11.png]][[文件:java3-12.png]] | ||
===构造方法的多样性=== | ===构造方法的多样性=== | ||
− | + | 一个类可以有多个构造方法,更多是像这种带参数的: | |
+ | <nowiki>public class Consumer { | ||
+ | String name ; | ||
+ | int age; | ||
+ | String job; | ||
+ | //默认的构造方法需要显性的写出来 | ||
+ | public Consumer(){ | ||
+ | |||
+ | } | ||
+ | //带参的构造方法来初始化属性 | ||
+ | public Consumer(String myname,int myage){ | ||
+ | name = myname; | ||
+ | age = myage; | ||
+ | } | ||
+ | |||
+ | }</nowiki> | ||
+ | |||
+ | 主类代码: | ||
+ | <nowiki>public class Test { | ||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | |||
+ | Consumer c1 = new Consumer( ); | ||
+ | c1.name = "李强";c1.age = 25; | ||
+ | |||
+ | Consumer c2 = new Consumer("刘丽",21); | ||
+ | System.out.println("顾客1:"+c1.name+",今年"+c1.age+"岁"); | ||
+ | System.out.println("顾客2:"+c2.name+",今年"+c2.age+"岁"); | ||
+ | |||
+ | |||
+ | }</nowiki> | ||
+ | ==构造方法的特点== | ||
#它的名字必须与它所在的类的名字完全相同。 | #它的名字必须与它所在的类的名字完全相同。 | ||
#不返回任何数据类型,也不需要使用void声明。 | #不返回任何数据类型,也不需要使用void声明。 | ||
第43行: | 第76行: | ||
*当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。 | *当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
返回 [[Java程序设计]] | 返回 [[Java程序设计]] |
2018年3月26日 (一) 15:26的版本
什么是构造方法
除了上文说的普通方法之外,Java类还包括一种特殊的方法,叫做构造方法。
构造,英文名construction ,是建造、创造的意思。每次在创建实例变量,对类中的所有变量都要初始化是很乏味的。如果在一个对象最初被创建时就把对它的设置做好,程序将更简单并且更简明。所有我们引入了构造方法。构造方法的作用是创建一个对象并对其完成初始化。
具体说来,我们创建一个对象的时候,都要用到new语句,比如Consumer c= new Consumer();这个时候new语句都会调用一个构造方法,完成对象的初始化工作。调用的这个构造方法的名称必须与类同名,比方说,类名叫Consermer,构造方法名也叫Consumer()
public class Consumer { String name ; int age; String job; public Consumer(){ } public static void main(String[] args) { // TODO Auto-generated method stub Consumer c= new Consumer(); } }
每个类都有构造方法,没有例外。如果没有显式地为类定义构造方法((像上一节一样)。Java编译器将会为该类提供一个默认构造方法,只是我们看不到罢了:
构造方法的多样性
一个类可以有多个构造方法,更多是像这种带参数的:
public class Consumer { String name ; int age; String job; //默认的构造方法需要显性的写出来 public Consumer(){ } //带参的构造方法来初始化属性 public Consumer(String myname,int myage){ name = myname; age = myage; } }
主类代码:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Consumer c1 = new Consumer( ); c1.name = "李强";c1.age = 25; Consumer c2 = new Consumer("刘丽",21); System.out.println("顾客1:"+c1.name+",今年"+c1.age+"岁"); System.out.println("顾客2:"+c2.name+",今年"+c2.age+"岁"); }
构造方法的特点
- 它的名字必须与它所在的类的名字完全相同。
- 不返回任何数据类型,也不需要使用void声明。
- 它的作用是创建对象并初始化成员变量。
- 在创建对象时,系统会自动调用类的构造方法。
- 构造方法一般都用 public来声明,这样才能在程序任意位置创建对象。
- 每个类至少有一个构造方法。如果不写构造方法,Java 将提供一个默认的不带参的方法体为空的构造方法。
- 构造方法定义格式:
[访问权限] 类名称([参数1,参数2,……]) { //程序语句 ; //构造方法没有返回值 }
【经验】
- 如果类中显性的定义了构造方法,那么系统不再提供默认的不带参的方法体为空的构造方法。若对一个已完成的程序进行扩展,因某种需要而添加了一个类的构造方法,由于很多其他类原先使用默认构造方法,这势必会导致找不到构造方法的错误。解决的方法就是把默认的构造方法显性的写出来。
- 当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。
返回 Java程序设计