java基础内容笔记--构造函数

【注意,本人小白一个,以下是个人根据教程的理解,如有疑惑,出错的地方,希望大家能够留言指出来,相互学习进步。】

构造函数

对象在创建的时候会默认调用一个函数,这个函数会初始化对象,这个函数就是构造函数。如果在对象中已经有一个自己定义的构造函数,则系统默认的构造函数将会失效,从而去调用对象里面的构造函数。在看教程和看其他博客上介绍构造函数的时候,有个博客用一个比喻让我对构造函数有深刻的印象,原文是“我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。(博客地址”看到这个比喻,我感受很大,构造函数就像是起名字,小孩子出生前起名字,我个人理解是自己提前定义好了构造函数,小孩子出生后,起名字前,有短空白期,而这段空白期,我们会根据小孩子的性别确定一个大家都有的“名字”,比如:“男孩子”、“女孩子”,这个就像是调用系统的构造函数。虽然这个比喻也不是很恰当,但是我觉得能够初步的理解“构造函数”是什么,这就行了,要想深入的了解,还是需要代码的理解,官方的介绍。

下面是根据教程的个人理解。

在没有自己设置构造函数的时候,调用系统的构造函数,给对象的实例变量初始化的值分别是:所有的数字变量设为 0,把所有的 boolean 型变量设为 false,把所有的对象变量都设为 null。

Human(){
   name=null;
   age=0;
   sex=null;
   addr=null;
}

以上是系统默认的构造函数,

下面验证:

class Human {
	String name;
	String sex;
	int age;
	String addr;

	void work() {
		System.out.println("我在工作");
	}

	void eat() {
		System.out.println("我在吃饭");
	}
}

public class MethodDemo {
	public static void main(String[] args) {
		// 创建一个 zhangsan 对象
		Human zhangsan = new Human();
		// 打印出 zhangsan 的属性的默认值
class Human {
	// 属性
	String name;
	String sex;
	int age;
	String addr;

	// 构造方法
	public Human() {
		name = null;
		age = 0;
		sex = null;
		addr = null;
	}

	// work 方法
	void work() {
		System.out.println("我在工作");
	}

	// eat 方法
	void eat() {
		System.out.println("我在吃饭");
	}
}

System.out.println("姓名默认值" + zhangsan.name);System.out.println("性别默认值" + zhangsan.sex);System.out.println("年龄默认值" + zhangsan.age);System.out.println("地址默认值" + zhangsan.addr);}}

运行的结果是:

姓名默认值 null
性别默认值 null
年龄默认值 0

地址默认值 null

这里要说一下,构造函数有个特点,它的名字必须跟类名相同,并且没有返回类型。上面的系统默认的构造函数就是一个简单的构造函数格式。

在类中,系统的构造函数是不显示出来的,其实我们写的类不是完整的类(刚开始),一个完整的类是:

class Human {
	// 属性
	String name;
	String sex;
	int age;
	String addr;

	// 构造方法,public是访问权限
	public Human() {
		name = null;
		age = 0;
		sex = null;
		addr = null;
	}

	// work 方法
	void work() {
		System.out.println("我在工作");
	}

	// eat 方法
	void eat() {
		System.out.println("我在吃饭");
	}
}

当然,在创建对象的时候,想指定初始化的值,就要自定义自己的构造函数了。

public Human(String hName,String hSex,int hAge,String hAddr){
  name=hName;
  sex=hSex;
  age=hAge;
  addr=hAddr;
}

这时候,创建对象的格式就是:

Human zhangsan=new Human("张三","男",25,"中国北京");

如果是这种 Human zhangsan=new Human(); 的话,没有参数传入构造函数中,会报错,这个要注意一下。

构造函数也有重载的功能,在不同情况下,传入构造函数的参数内容不同,调用的构造函数也就不一样了,构造函数的重载和方法的重载也是类似的。

例子:

class Human {
	String name;
	String sex;
	int age;
	String addr;

	public Human() {
		name = null;
		age = 0;
		sex = null;
		addr = null;
	}
        //只传入的hName、hSex两个构造参数调动此构造参数
	public Human(String hName, String hSex) {
		name = hName;
		sex = hSex;
	}
        //传入全部的参数,调用这个构造函数
	public Human(String hName, String hSex, int hAge, String hAddr) {
		name = hName;
		sex = hSex;
		age = hAge;
		addr = hAddr;
	}

	void work() {
		System.out.println("我在工作");
	}

	void eat() {
		System.out.println("我在吃饭");
	}
}

实现测试:

public class MethodDemo {
	public static void main(String[] args) {
		Human zhangsan=new Human();
		Human qq=new Human("青青","女");
		Human lisi=new Human("李四","男",20,"中国上海");
		System.out.println("张三的信息:");
		System.out.println(" 姓 名 :"+zhangsan.name+"\n 性 别 : "+zhangsan.sex+"\n 年 龄 :"+zhangsan.age+"\n 地址:"+zhangsan.addr);
		System.out.println("青青的信息:");
		System.out.println("姓名:"+qq.name+"\n 性别:"+qq.sex+"\n 年龄:"+qq.age+"\n 地址:"+qq.addr);
		System.out.println("李四的信息:");
		System.out.println("姓名:"+lisi.name+"\n 性别:"+lisi.sex+"\n 年龄:"+lisi.age+"\n 地址:"+lisi.addr);
	}
}

运行结果:

张三的信息:
姓名:null
性别:null
年龄:0
地址:null
青青的信息:
姓名:青青
性别:女
年龄:0
地址:null
李四的信息:
姓名:李四
性别:男
年龄:20
地址:中国上海
这里java有个重要的功能,构造函数可以调用其他的构造函数,
class Human {
	String name;
	String sex;
	int age;
	String addr;

	public Human() {
		name = null;
		age = 0;
		sex = null;
		addr = null;
	}

	public Human(String hName, String hSex) {
		name = hName;
		sex = hSex;
		System.out.println("第二个构造函数被调用");
	}

	public Human(String hName, String hSex, int hAge, String hAddr) {//全部参数传入,但是只有age、addr定义了,
		this(hName, hSex);//通过this关键字调用第二个构造函数,this关键字目前不知道什么意思,今后涉及在讨论
		age = hAge;
		addr = hAddr;
		System.out.println("第三个构造函数被调用");
	}

	void work() {
		System.out.println("我在工作");
	}

	void eat() {
		System.out.println("我在吃饭");
	}
}

实例演示:

public class MethodDemo {
	public static void main(String[] args) {
		Human lisi = new Human("李四", "男", 20, "中国上海");//这个是全部的参数传入构造函数
		System.out.println("李四的信息:");
		System.out.println("姓名:" + lisi.name + "\n 性别:" + lisi.sex + "\n 年龄:"+ lisi.age + "\n 地址:" + lisi.addr);
	}
}

运行的结果是:

第二个构造函数被调用
第三个构造函数被调用
李四的信息:
姓名:李四
性别:男
年龄:20
地址:中国上海

------end------

目前还有个【this】关键字是未知的只是,今后涉及到后才做讨论。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值