“Java类的构造方法”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
案例:商苑面馆
第82行: 第82行:
 
以下程序中使用了两个构造方法,一个有参的、一个无参的。
 
以下程序中使用了两个构造方法,一个有参的、一个无参的。
  
  <nowiki>package 小马哥面馆;
+
  <nowiki>import java.util.Scanner;
  
public class Noodle {
+
public class Noodles {
//成员变量
+
    //商品的名称
//名称
+
public String name;
public String name;
+
//商品的价格
//价格
+
public float price;
public double price;
+
//商品的数量,
//数量
+
public int num;
public int num;
+
public Noodles() {
+
/*构造方法*/
+
}
public Noodle(){
+
public Noodles(String n,float p, int nu){
+
this.name = n;
}
+
this.price = p;
public Noodle(String name,double price,int num){
+
this.num = nu;
this.name = name;
+
}
this.price = price;
+
public static void main(String[] args) {
this.num = num;
+
// TODO Auto-generated method stub
}
+
        Scanner sc = new Scanner(System.in);
//成员方法
+
        //输入
//预定订单;
+
        System.out.println("请问您想点什么面?");
public void buy(String name,int num){
+
        String str = sc.nextLine();
this.name =name;
+
        String [] data = new String[3];
this.num = num;
+
        data = str.split(" ");
+
        //System.out.println(data[0]);
}
+
        //System.out.println(data[1]);   
//取消订单;
+
        String name = data[0];
public void cancel(String name,int n){
+
        int num = Integer.parseInt(data[1]);
this.name =name;
+
       
this.num = this.num -n;
+
        //处理
}
+
        Noodles n1= new Noodles();//声明一个Noodle类的对象n1
//查看订单;
+
        n1.name=name;//给变量赋值
public String  lookup( ){
+
        n1.price = 10;//给变量赋值
String s ="您订购的面是:\r\n";
+
        n1.num = num;//给变量赋值
s    = "品名:"+ this.name  
+
       
+" 价格:"+ this.price
+
        //输出
+" 数量: "+ this.num;
+
        System.out.print("您点的是"+n1.name);//打印变量
return s;
+
        System.out.print(" 价格:"+n1.price);//打印变量
}  
+
        System.out.println(" 数量"+ n1.num);//打印变量      
 +
 +
}
  
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>
 
</nowiki>
 +
 
==Java练习题==
 
==Java练习题==
 
1.完成课本P32后面的选择题和填空题
 
1.完成课本P32后面的选择题和填空题

2020年3月12日 (四) 07:14的版本

思考

  • 在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编译器将会为该类提供一个默认构造方法,只是我们看不到罢了:

700px

构造方法的多样性

一个类可以有多个构造方法,更多是像这种带参数的:

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+"岁");
		
		
	}

构造方法的特点

  1. 它的名字必须与它所在的类的名字完全相同。
  2. 不返回任何数据类型,也不需要使用void声明。
  3. 它的作用是创建对象并初始化成员变量。
  4. 在创建对象时,系统会自动调用类的构造方法。
  5. 构造方法一般都用 public来声明,这样才能在程序任意位置创建对象。
  6. 每个类至少有一个构造方法。如果不写构造方法,Java 将提供一个默认的不带参的方法体为空的构造方法。
  • 构造方法定义格式:
[访问权限] 类名称([参数1,参数2,……]) {
     //程序语句 ;
     //构造方法没有返回值
 }

【经验】

  • 如果类中显性的定义了构造方法,那么系统不再提供默认的不带参的方法体为空的构造方法。若对一个已完成的程序进行扩展,因某种需要而添加了一个类的构造方法,由于很多其他类原先使用默认构造方法,这势必会导致找不到构造方法的错误。解决的方法就是把默认的构造方法显性的写出来。
  • 当构造方法定义完毕后就可以通过创建对象来对属性进行初始化操作。一般情况下需要结合new实例化操作,使用传递实参的形式进行。

案例:商苑面馆

以下程序中使用了两个构造方法,一个有参的、一个无参的。

import java.util.Scanner;

public class Noodles {
	    //商品的名称
		public String name;
		//商品的价格
		public float price;
		//商品的数量,
		public int num;	
		public Noodles() {
			
		}
		public Noodles(String n,float p, int nu){
			this.name = n;
			this.price = p;
			this.num = nu;
		}
		public static void main(String[] args) {
			// TODO Auto-generated method stub
	        Scanner sc = new Scanner(System.in);
	         //输入
	        System.out.println("请问您想点什么面?");
	        String str = sc.nextLine();
	        String [] data = new String[3];
	        data = str.split(" ");
	        //System.out.println(data[0]);
	        //System.out.println(data[1]);    
	        String name = data[0];
	        int num = Integer.parseInt(data[1]);
	        
	         //处理
	        Noodles n1= new Noodles();//声明一个Noodle类的对象n1
	        n1.name=name;//给变量赋值
	        n1.price = 10;//给变量赋值
	        n1.num = num;//给变量赋值
	        
	        //输出
	        System.out.print("您点的是"+n1.name);//打印变量
	        System.out.print(" 价格:"+n1.price);//打印变量
	        System.out.println(" 数量"+ n1.num);//打印变量 	       
				
		}

}


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程序设计