“Java类的构造方法”的版本间的差异
来自CloudWiki
(→练习题答案) |
|||
第79行: | 第79行: | ||
*当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。 | *当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。 | ||
+ | ==案例:商苑面馆== | ||
+ | 以下程序中使用了两个构造方法,一个有参的、一个无参的。 | ||
+ | |||
+ | <nowiki>package 小马哥面馆; | ||
+ | |||
+ | public class Noodle { | ||
+ | //成员变量 | ||
+ | //名称 | ||
+ | public String name; | ||
+ | //价格 | ||
+ | public double price; | ||
+ | //数量 | ||
+ | public int num; | ||
+ | |||
+ | /*构造方法*/ | ||
+ | public Noodle(){ | ||
+ | |||
+ | } | ||
+ | public Noodle(String name,double price,int num){ | ||
+ | this.name = name; | ||
+ | this.price = price; | ||
+ | this.num = num; | ||
+ | } | ||
+ | //成员方法 | ||
+ | //预定订单; | ||
+ | public void buy(String name,int num){ | ||
+ | this.name =name; | ||
+ | this.num = num; | ||
+ | |||
+ | } | ||
+ | //取消订单; | ||
+ | public void cancel(String name,int n){ | ||
+ | this.name =name; | ||
+ | this.num = this.num -n; | ||
+ | } | ||
+ | //查看订单; | ||
+ | public String lookup( ){ | ||
+ | String s ="您订购的面是:\r\n"; | ||
+ | s = "品名:"+ this.name | ||
+ | +" 价格:"+ this.price | ||
+ | +" 数量: "+ this.num; | ||
+ | return s; | ||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | Noodle n1= new Noodle(); | ||
+ | n1.name="手擀面"; | ||
+ | n1.price = 10; | ||
+ | n1.num = 2; | ||
+ | System.out.println("您订的面是"+n1.name); | ||
+ | System.out.println("价格:"+n1.price); | ||
+ | System.out.println("数量"+ n1.num); | ||
+ | |||
+ | Noodle n2 = new Noodle("炸酱面",12,3); | ||
+ | System.out.println("您订的面是"+n2.name); | ||
+ | System.out.println("价格:"+n2.price); | ||
+ | System.out.println("数量"+ n2.num); | ||
+ | |||
+ | Noodle n3 = new Noodle(); | ||
+ | n3.buy("油泼面",2); | ||
+ | n3.cancel("油泼面",1); | ||
+ | String s2 =n3.lookup(); | ||
+ | System.out.println(s2); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </nowiki> | ||
==Java练习题== | ==Java练习题== | ||
1.完成课本P32后面的选择题和填空题 | 1.完成课本P32后面的选择题和填空题 | ||
第85行: | 第154行: | ||
3.为“倍添利小微金融管理平台”定义一个类Fin_product(汉语意思:理财产品),为这个类创建构造方法、成员变量和成员方法,完成之后创建类的对象调用它们。要求:1.创建类方法getRate(查询收益率)、getTime(查询理财周期)能为方法product_Info(产品介绍)所调用;2.将product_Info(产品介绍)设定为static修饰的静态方法,不通过对象也能调用它。 | 3.为“倍添利小微金融管理平台”定义一个类Fin_product(汉语意思:理财产品),为这个类创建构造方法、成员变量和成员方法,完成之后创建类的对象调用它们。要求:1.创建类方法getRate(查询收益率)、getTime(查询理财周期)能为方法product_Info(产品介绍)所调用;2.将product_Info(产品介绍)设定为static修饰的静态方法,不通过对象也能调用它。 | ||
+ | |||
==练习题答案== | ==练习题答案== |
2019年3月21日 (四) 03:08的版本
思考
- 在Java中,对象是怎么创造出来的 ?
- 在这一过程中,构造方法发挥了什么作用 ?
什么是构造方法
除了上文说的普通方法之外,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实例化操作,使用传递实参的形式进行。
案例:商苑面馆
以下程序中使用了两个构造方法,一个有参的、一个无参的。
package 小马哥面馆; public class Noodle { //成员变量 //名称 public String name; //价格 public double price; //数量 public int num; /*构造方法*/ public Noodle(){ } public Noodle(String name,double price,int num){ this.name = name; this.price = price; this.num = num; } //成员方法 //预定订单; public void buy(String name,int num){ this.name =name; this.num = num; } //取消订单; public void cancel(String name,int n){ this.name =name; this.num = this.num -n; } //查看订单; public String lookup( ){ String s ="您订购的面是:\r\n"; s = "品名:"+ this.name +" 价格:"+ this.price +" 数量: "+ this.num; return s; } public static void main(String[] args) { // TODO Auto-generated method stub Noodle n1= new Noodle(); n1.name="手擀面"; n1.price = 10; n1.num = 2; System.out.println("您订的面是"+n1.name); System.out.println("价格:"+n1.price); System.out.println("数量"+ n1.num); Noodle n2 = new Noodle("炸酱面",12,3); System.out.println("您订的面是"+n2.name); System.out.println("价格:"+n2.price); System.out.println("数量"+ n2.num); Noodle n3 = new Noodle(); n3.buy("油泼面",2); n3.cancel("油泼面",1); String s2 =n3.lookup(); System.out.println(s2); } }
Java练习题
1.完成课本P32后面的选择题和填空题
2.为创新题目”顺鸟驿站快递管理平台”定义一个类Delivery(汉语意思:快递),为这个类创建构造方法、成员变量和成员方法,并创建类的对象调用它们。
3.为“倍添利小微金融管理平台”定义一个类Fin_product(汉语意思:理财产品),为这个类创建构造方法、成员变量和成员方法,完成之后创建类的对象调用它们。要求:1.创建类方法getRate(查询收益率)、getTime(查询理财周期)能为方法product_Info(产品介绍)所调用;2.将product_Info(产品介绍)设定为static修饰的静态方法,不通过对象也能调用它。
练习题答案
1.课本第1章习题答案(计1 黄飞 提供):
一、1.B 2.A 3.D 二、1.J2EE J2ME 2.java 3.Java Virtual Machine Java Runtime Environment Java Development Kit 4.javac java
2.(根据计2 刘永星 计1 徐洁的代码改编)
public class Delivery { String bid; // 快递编号 String place; // 快递发往地 String name; // 快递接收人 long tel; // 接收人电话 float price; public Delivery(){ } public Delivery(String bid,String place,String name long tel,float price){ this.bid =bid; this.place = place; this.name = name; this.tel = tel; this.price = price; } public void setPrice( float p){ price = p; } public float getPrice( ){ System.out.println("价格为 : " + price); return price; } public static void main(String[] args) { // TODO Auto-generated method stub String mybid="001",String myplace="山东济南",String myname="某某" ,long mytel=12345678912l; float myprice=12.5f; Delivery d1= new Delivery (mybid,myplace,myname,mytel,myprice); System.out.println("产品编号:"+d1.bid); System.out.println("产品发往地:"+d1.place); System.out.println("产品接收人:"+d1.name); System.out.println("接收人电话:"+d1.tel); float p=18f; d1.setPrice(p); float now_price = d1.getPrice(); d1.getInfo(); } }
返回 Java程序设计