18、面向对象03 类和对象的构造、构造器的详解

本文介绍了类和对象在面向对象编程中的关系,类作为对象的模板,描述了一组具有相同属性和行为的对象。对象是类的具体实例,具有属性和方法。文章通过Java代码示例展示了如何定义类和对象,包括属性和方法的声明。同时,详细阐述了构造函数的作用,用于在创建对象时初始化属性,并提供了不同参数的构造函数示例,强调了无参构造函数与有参构造函数的使用和覆盖规则。
摘要由CSDN通过智能技术生成

类和对象的关系

  • 类和对象之间是抽象和具体的关系。类是一个模板,是对一类事物的抽象描述,而对象是用于表示该类中的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类必须通过对象才可以使用,而对象的属性和行为必须在类中定义

  • 类(Class)是java代码的基本组织模块,是用来描述一组具有共同属性和行为对象的基本原型。是对这组对象的概括,归纳和描述。类是对象的模板,它定义了本类对象的所拥有的属性集和行为集,是对一组具有相同属性和相同方法的对象的定义

  • 对象(Object)是一个应用系统中的用来描述客观事实的实体,是有特定属性和行为(方法)的基本运行单位,是类的一个特殊状态下的实例。对象可以是一个实体、一个名词、一个可以想象为有自己标识的任何东西


    ,可以概括为“万物皆对象”

  • 面向对象的本质就是:以类的方式组织代码,以对象来组织(封装)数据

如何写一个类?只用回答两个问题

  1. 它有什么?------------------------>类的属性
  2. 它能做什么?--------------------->类的方法
package com.etime01;

//定义了一个手机类
public class Mobile {
	//手机有哪些属性------品牌、颜色、价格等------------>把这些属性转换成代码来描述出来
	String brand = "vivo";
	String color = "紫色";
	int price = 2999;

	//手机有哪些功能(方法)--------发短信、打电话------------->把这些方法转换成代码来描述出来
	
    //定义了一个发短息的方法
	public void sendMessage(){
		System.out.println("发短信");
	}
	//定义了一个打电话的方法
	public void call(){
		System.out.println("打电话");
	}

}
package com.etime01;

public class Test {
	public static void main(String[] args) {
		/**
		 * 使用非静态方法和非静态属性必须通过new关键字来生成一个对象,然后通过对象来调用非静态方法和飞惊天睡醒
		 */

		//创建一个对象
		Mobile m1 = new Mobile();

		//调用对象m1的一些属性
		System.out.println(m1.brand);   //调用m1的brand属性
		System.out.println(m1.color);   //调用m1的color属性
		System.out.println(m1.price);   //调用m1的price属性

		//调用对象m1的一些方法
		m1.sendMessage();   //调用对象m1的sendMessage()方法
		m1.call();  //调用对象m1的call()方法
	}
}

创建并初始化对象

  • 使用new关键字创建对象

  • 使用new关键字创建对象时,除了分配内存空间外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用

//创建一个Student类

package OOP;
​
public class Student {  //类里面永远只有属性和方法
    //属性:字段
    String name;
    int age;
​
    //方法
    public void Study(){
        System.out.println(this.name+"在学习");    //this代表当前类
    }
}
//通过new关键字创建不同的实例
package OOP;
​
public class Application {
    public static void main(String[] args) {
​
        //类是抽象的,需要实例化,类实例化后悔返回一个自己的对象
        Student student = new Student();    //student对象就是Student类的"一个"具体实例
​
        Student xiaoming = new Student();
        Student xiaohong = new Student();   //这就创建了两个不同的对象
​
        System.out.println(xiaoming.name);  //输出为null(通过new创建对象时,会对对象进行默认的初始化)
        System.out.println("======================================");
​
        xiaoming.name = "小明";
        xiaoming.age = 3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age+"岁");
        System.out.println("====================================");
​
​
        System.out.println(xiaohong.name);
        System.out.println(xiaohong.age);   //因为未给xiaohong.name和xiaohong.age赋值,所以输出的结果为默认值
​
    }
}
​
//结果
D:\JDK\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar=2667:D:\IDEA\IntelliJ IDEA 2022.2.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\eclipse\work\Demo1\out\production\untitled1 OOP.Application
null
======================================
小明
3岁
====================================
null
0
​
进程已结束,退出代码0

构造函数(也叫构造方法,构造器)

  • 何为构造函数?用来创建对象的函数就叫做构造行数
  • 类中的构造器也称为构造方法,是在进行创建对象时必须要调用的。也就是说,只要有对象的创建,就一定会调用到构造函数。从本质上来讲,它就是一个函数,但是,它又非常特殊,特殊指出在哪呢?

    • 1、构造方法的名字和类的名字相同,

    • 2、构造方法没有返回类型,也不能写void

创建一个对象

package com.etime04;

public class Test  {
	public static void main(String[] args) {
		//创建一个对象s1
		Student s1 = new Student();
	}
}

运行程序时

 注意:只要是通过类创建了对象,创建了几个对象,就会调用到几次构造函数

package com.etime04;

public class Student {
	private String name;    //姓名
	private int age;        //年龄
	private String gender;  //性别

	//默认的无参构造函数
	public Student() {
		System.out.println("这是一个无参构造函数");
	}
}
package com.etime04;

public class Test  {
	public static void main(String[] args) {
		//创建两个对象s1和s2
		Student s1 = new Student();
		Student s2 = new Student();
	}
}

运行程序时

自定义构造函数

  • 除了默认的构造函数外,还可以自定义构造函数。自定义函数和默认的构造函数的区别就在于有没有参数。要不要带参数,带几个参数,带哪几个参数,全凭自身需求

package com.etime04;

public class Student {
	private String name;    //姓名
	private int age;        //年龄
	private String gender;  //性别

	//默认的无参构造函数
	public Student() {
		System.out.println("这是一个构造函数");
	}

	/**
	 *除了默认的构造函数外,还可以自定义构造函数,自定义构造函数和默认的构造函数的区别就是,有没有参数
	 */
	//只带name这一个参数的构造函数
	public Student(String name) {
		this.name = name;
	}
	//只带name和age这两个参数的构造函数
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	//带了所有参数的构造函数
	public Student(String name, int age, String gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
}

有了前面的构造函数,就可以在创建对象的同时对一个或者多个属性进行赋值

package com.etime04;

public class Test  {
	public static void main(String[] args) {
		//创建一个对象s1
		Student s1 = new Student();

		//在创建对象的同时给name赋值
		Student s2 = new Student("小明");
		System.out.println(s2.getName());
/*
		//可以调用前面提供的public的set()方法度对还没有赋值的属性进行赋值
		s2.setAge(30);
		System.out.println(s2.getAge());
		s2.setGender("男");
		System.out.println(s2.getGender());
*/

		//在创建对象的同时给name和age赋值
		Student s3 = new Student("xiaoming",24);
		System.out.println(s3.getName());
		System.out.println(s3.getAge());

		//在创建对象的同时给name、age和gender赋值
		Student s4 = new Student("XDDA",28,"男");
		System.out.println(s4.getName());
		System.out.println(s4.getAge());
		System.out.println(s4.getGender());
	}
}

注意:如果定义了有参构造函数,则默认的无参构造函数将会被有参构造函数给覆盖。所以,如果定义了有参构造函数,无参构造函数就必须显示定义否则程序将报错

  • 构造器的作用

    • 1、使用new关键字,必须要有构造器

    • 2、构造器一般用来初始化值

  • 结论:1、一个类,即使什么都不写,也会存在一个默认的构造方法

  • 快捷键alt+insert    快速生成构造器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值