• 【java学习】类的成员之三:构造方法(即构造器)(25)



    1. 构造器(构造方法)基本概念

    1. 构造器的特征
      (1) 它具有与类相同的名称
      (2) 它不声明返回值类型。(与声明为 void 不同)
      (3) 不能被staticfinalsynchronizedabstractnative修饰,不能有return 语句返回值

    2. 构造器的作用:①创建对象;②给对象进行初始化
      (1) 如:Order o = new Order();Person p = new Person(Peter,15);
      (2) 如同我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。

    2. 语法格式

    修饰符 类名 (参数列表) {
         初始化语句;
    }

    举例:

    public class Animal {
    	private int legs;
    	
    	// 构造器
    	public Animal() {legs = 4;} 
    	//如果不编写构造器,会使用系统默认的构造器
    	
    	public void setLegs(int i) {legs = i;}
    	public int getLegs(){return legs;}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    解释(对应上文构造器的作用):
        ①创建 Animal 类的实例: Animal a=new Animal();
        ②调用构造器,将 legs 初始化为 4 。

    3. 构造器(构造方法)的种类

    根据参数不同,构造器可以分为如下两类:
        (1) 隐式无参构造器(系统默认提供)
        (2) 显式定义一个或多个构造器(无参、有参)

    注意:
        (1) Java 语言中,每个类都至少有一个构造器
        (2) 默认构造器的修饰符与所属类的修饰符一致
        (3) 一旦显式定义了构造器,则系统不再提供默认构造器
        (4) 一个类可以创建多个重载的构造器
        (5) 父类的构造器不可被子类继承

    标重点:new对象 实际上就是调用 类的构造方法!

    4. 从代码中理解构造函数

    (1) 在显示构造方法中使用设定的默认值
    创建一个Person5类:

    package day06;
    
    public class Person5 {
    	/**
    	 * 如果显示的定义了构造方法,那么就会使用显示的构造方法
    	 */
    	public Person5() {   //构造方法
    		age = 1;            //设定的age默认值1
    		name = "zhangsan";  //设定的name默认值zhangsan
    	}
    	
    	public int age;
    	public String name;
    	public void showInfo() {
    		System.out.println(age);
    		System.out.println(name);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    编写Test.java调用Person5方法:

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    
    		Person5 p5 = new Person5(); //new就是调用构造方法的过程
    		p5.showInfo();
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果:
    在这里插入图片描述
    这个运行结果说明带调用了显示的构造方法

    (2) 在调用构造方法过程,根据需要自己设定值

    创建一个Person5类:

    package day06;
    
    public class Person5 {
    	/**
    	 * 可以写 带参数的构造方法
    	 */
    	public Person5(int a,String n) {   //给构造方法的 参数列表 添加 两个形参
    		age  = a;
    		name = n;
    	}
    	
    	public int age;
    	public String name;
    	public void showInfo() {
    		System.out.println(age);
    		System.out.println(name);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    编写Test.java调用Person5方法:

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    
    		Person5 p5 = new Person5(2,"lisi"); //在new对象时,同样给参数列表的形参赋值
    		p5.showInfo();
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果:
    在这里插入图片描述

    5. 练习题

    5.1. 题目1

    1. 在前面定义的 Person 类中添加构造器,利用构造器设置所有人的 age 属性初始值都为 18 。

    答案1:

    package day06;
    
    public class Person6 {
    	
    	public Person6() { //构造器
    		age = 18;
    	}
    	
    	public int age;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Test.java

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    
    		Person6 p6 = new Person6();
    		System.out.println(p6.age);   //运行Test.java后,输出构造方法中age的默认值18
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    5.2. 题目2

    1. 修改上题中类和构造器,增加 name 属性 , 使得每次创建 Person 对象的同时初始
      化对象的 age 属性值和 name 属性值。
      在这里插入图片描述
      答案2:
    package day06;
    
    public class Person6 {
    	
    	public Person6(int a, String n) {
    //		age = 18;
    		age = a;
    		name = n;
    	}
    	
    	public int age;
    	public String name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Test.java

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    
    		Person6 p6 = new Person6(12,"zhangsan");
    		System.out.println(p6.age);
    		System.out.println(p6.name);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Test.java运行结果:
    在这里插入图片描述

    5.3. 题目3

    1. 定义一个“点”( Point )类用来表示三维空间中的点(有三个坐标)。要求如下:
      (1) 可以生成具有特定坐标的点对象。
      (2) 提供可以设置三个坐标的方法。

    答案:

    package day06;
    
    public class Point {    // 要求(1)
    	public Point(int m, int n, int k) {
    		x = m;
    		y = n;
    		z = k;
    	}
    	
    	int x;
    	int y;
    	int z;
    	
    	public void setPoint(int m, int n, int k) {    //要求(2)
    		x = m;
    		y = n;
    		z = k;
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    一文读懂Base64
    “ElementUI实现动态树和动态表格的综合应用“
    (附源码)ssm产品裂变管理系统 毕业设计 100953
    golang 线程 定时器 --chatGPT
    模拟百度网盘
    期末前端web大作业——HTML+CSS+JavaScript仿京东购物商城网页制作(7页)
    模拟实现qsort函数(冒泡排序版本)
    ImageProvider工作流程和AssetImage 加载流程
    【分布式金融交易模型】账户开立
    Redis缓存问题二、缓存雪崩
  • 原文地址:https://blog.csdn.net/weixin_44883789/article/details/133778173