26_构造方法

26_构造方法

构造方法的概念和使用

  • Person p = new Person(); // 声明Person类型的引用指向Person类型的对象。

  • p.show(); // 拿着引用变量 p 去调用名字为show的成员方法。

  • // 构造方法没有返回值类型,方法名与类名相同
    class 类名 {
    	类名(形参列表) {
    		构造方法体;
    	}
    }
    
    
    class Person {
        Person() {
            - Person 类的构造方法
        }
    }
    
  • 构造方法名与类名完全相同并且没有返回值类型,连void都不许有。

  • /*
    	编程实现Person类定义
     */
     public class Person {
    	 
    	 String name; // 用于描述姓名的成员变量
    	 int age; // 用于描述年龄的成员变量
    	 
    	 // 自定义构造方法	确实会调用
    	 Person() {
    		 System.out.println("我就是自定义的构造方法!");
    	 } 
    	 
    	 // 自定义成员方法实现所有特征的打印
    	 void show() {
    		 System.out.println("我是" + name +",今年" + age + "岁了!");
    	 }
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、声明一个Person类型的引用指向Person类型的对象
    		 // 当类中没有提供构造方法时,则下面调用默认构造方法,若类中提供构造方法后,则下面调用类中提供的版本
    		 Person p1 = new Person();
    		 // 并打印特征
    		 p1.show(); // null 0
    	 }
     }
    
    
    // 运行结果---------------------------------
    我就是自定义的构造方法!
    我是null,今年0岁了!
    

默认构造方法

  • 当一个类中没有定义任何构造方法时,编译器会自动添加一个无参空构造构造方法,叫做默认构造方法,如:Person(){}。无参是小括号中没有参数列表,空构造是指构造器里的方法体内没有方法体。
  • 若类中出现了构造方法,则编译器不再提供任何形式的构造方法。
  • 我们使用编译器提供的默认构造方法构造出来的对象,这个对象的成员变量只能是默认值。如果我们在构造对象的同时给这个对象指定值,这个时候编译器提供的默认方法就不足以满足我们的需求了,这时候就得我们自己去写默认方法了。

构造方法的作用

  • 使用new关键字创建对象时,会自动调用构造方法实现成员变量初始化工作。

  • 如果类中自定义了一个带参的构造方法,而没有自定义一个无参构造方法时,代码中有:Person p3 = new Person(); ==此时会编译报错,因为当类中自定义了构造方法后,编译器就不再提供任何构造方法。==意味着无参构造方法编译器就不提供了,类中没有,代码中需要无参构造,而类中没有,所以就出错了。 错误:无法将类 Person中的构造器 Person应用到给定类型; 解决方案:再自定义一个无参构造方法即可。Person(){}

  • 注意:我们写了,编译器就不再提供构造方法了,如果我们需要,就自定义多个构造方法

  • /*
    	编程实现Person类定义
     */
     public class Person {
    	 
    	 String name; // 用于描述姓名的成员变量
    	 int age; // 用于描述年龄的成员变量
    	 
    	 // 自定义构造方法	确实会调用
    	 Person() { // 这样写的时候,创建出来的所有Person对象就是同一个人了
    		 // System.out.println("我就是自定义的构造方法!");
    		 name = "张飞";
    		 age = 30;
    	 } 
    	 
    	 // 相当于 String s = "张飞"   int i = 30
    	 // String s = "马超"   int i = 45
    	 Person(String s, int i) {
    		 name = s;
    		 age = i;
    	 }
    	 
    	 // 自定义成员方法实现所有特征的打印
    	 void show() {
    		 System.out.println("我是" + name +",今年" + age + "岁了!");
    	 }
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、声明一个Person类型的引用指向Person类型的对象
    		 // 当类中没有提供构造方法时,则下面调用默认构造方法,若类中提供构造方法后,则下面调用类中提供的版本
    		 Person p1 = new Person();
    		 // 并打印特征
    		 p1.show(); // null 0		张飞	30
    		 
    		 Person p2 = new Person("张飞", 30); // 实参就是为了给形参初始化的		实参传的是什么,形参的值就是什么
    		 p2.show(); // 张飞 30
    		 
    		 Person p3 = new Person("马超", 45);
    		 p3.show(); // 马超 45
    	 }
     }
    

案例:Point 类的自定义

  • 编程实现Point 类的定义并向 Point类添加构造方法

    • Point() 默认创建原点对象
    • Point(int i, int j) 根据参数创建点对象
    /*
    	编程实现Point类的定义并向Point类添加构造方法
     */
     public class Point {
    	 
    	 int x; // 用于描述横轴坐标的成员变量
    	 int y; // 用于描述纵轴坐标的成员变量
    	 
    	 // 自定义无参构造方法
    	 Point() {
    		 // System.out.println("这是一个原点对象");
    	 }
    	 
    	 // 自定义一个有参构造方法
    	 Point(int i, int j) {
    		 x = i;
    		 y = j;
    	 }
    	 
    	 // 自定义成员方法实现特征的打印
    	 void show() {
    		 System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
    	 }
    	 
    	 
    	 public static void main(String[] args) {
    		 
    		 // 1、实现无参方式构造对象并打印特征
    		 Point p1 = new Point();
    		 p1.show(); // 0 0
    		 
    		 // 2、实现有参方式构造对象并打印特征
    		 Point p2 = new Point(3, 5);
    		 p2.show(); // 3  5
    	 }
     }
    
    
    
    // 执行结果---------------------------
    横坐标是:0,纵坐标是:0
    横坐标是:3,纵坐标是:5
    

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值