5.3面向对象(构造函数,this)

1构造函数

  • 声明在类的内部
  • 方法名与类名一模一样的函数叫构造函数
  • 构造函数没有返回值
  • 构造函数可以包含参数
  • 作用:用来描述对象的创建过程

在mian方法中用Person p = new Person()实例化后,在用“p。xxx”来进行赋值操作,这样做有些不太合理,人的性别在人生下来时就确定了不会再去改变(人妖除外),所以这应该要先实例化的时候(在生的时候)就该确定,而不是在生下来了在去增加性别。

java的构造函数就是这个作用,可在初始化的时候进行赋值操作。


1.1不带参数构造函数

没有写构造函数是,会自动生成一个不带参数的构造函数,并且什么都不做

例:在Person中加入不带参数构造函数

class Person{
	String name;
	String sex;
	int age;
	
	//构造函数
	public Person(){
		name = "唐僧";
		sex = "男";
		age = 999;
	}
	

	public void sleep(){
		System.out.println(name+"在睡觉");
	}
}

main方法:

	public static void main(String[] args) {
		Person p = new Person();	//实例化类,创建对象。所以所对象是类的实例化
		
		//调用Person中的动态属性(函数)
		p.sleep(); 		//输出:唐僧在睡觉
	}

在main方法中没有赋值操作,输出结果依然是:唐僧再睡觉。

因为实例化对象的时候就已经进行了赋值。


1.2带参数的构造函数

手动写了一个带参数的构造函数时,JVM就不会再自动生成一个不带参数的构造函数

this关键字,实例化对象时,还有个this指针指向它


声明一个带参数的构造函数,例:

Person类:在构造方法中增加了String类型参数

class Person{
	String name;
	String sex;
	int age;
	
	public void sleep(){
		System.out.println(name+"在睡觉");
	}
	
	//构造函数
	public Person(String name){	//在这里增加了一个参数
		name = name;
		sex = "男";
		age = 999;
	}
}

main方法:

	public static void main(String[] args) {
		Person p = new Person("唐僧");	//这时需要传入参数,否者会报错
		
		p.sleep(); 		//输出:null在睡觉
	}

这时用new实例化的时候一定要传入与构造方法参数类型相同的参数

奇怪的是这里输出的是null在睡觉

因为在构造函数内这句出了问题

		name = name;

这句话jvm不知道name到底是形参name(就是构造函数参数中的name)还是实参(类中的name)。

所以需要加this,如:

		this.name = name;

1.3this指针

因为实例化对象时,还有个this指针指向它,看内存图:

1,如图片右边红线处,有个this指向该内存

2,当p中有参数是,会将这个参数压入栈中,如图左边红线

3,所以this.name = name 意思就是:this.name就是堆中的name,name 就是构造方法参数中的name



前面有个问题,如果写了一个带参数的构造函数时,就无法调用不带参数的构造方法,因为JVM没有创建不带参数的构造方法

解决方法:手动一个不带参数的构造函数

在写了一个不带参数的构造函数:

/*person类*/
class Person{
	//这些定义的变量就是Person类的静态属性
	String name;
	String sex;
	int age;
	
	//睡觉行为就是Person类的动态属性
	public void sleep(){
		System.out.println(name+"在睡觉");
	}
	
	//第一个构造函数
	public Person(String name){	
		this.name = name;
		this.sex = "男";
		this.age = 999;
	}
	
	//不带参数的构造函数
	public Person(){
		
	}
}
main方法:
	public static void main(String[] args) {
		Person p = new Person();	//现在不传入参数就不会报错了
		
		p.sleep(); 		//输出:null在睡觉
	}
这里输出的是: null在睡觉,因为不带参数构造方法我没有写写赋值操作







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是Python实现multi函的代码: ```python def multi(a, b): """ 实现两个的乘法 :param a: 第一个 :param b: 第二个 :return: 两个的乘积 """ return a * b # 测试 print(multi(5, 3)) # 输出 15 ``` 该函接受两个参,返回它们的乘积。在上面的代码中,我们定义了一个名为`multi`的函,它接受两个参`a`和`b`,并返回它们的乘积。我们使用`*`运算符来计算两个的乘积。最后,我们使用`print`函来测试该函是否正常工作。 ### 回答2: Python中实现multi函5.3,需要先了解multi函的含义。multi函是一个把两个参相乘的函,参可以是任何值类型。所以我们需要定义一个函名为multi,同时定义两个参。 先来看一下实现该函的代码: ``` def multi(a, b): return a * b ``` 这段代码就是实现了multi函5.3的功能。其中,def关键字用来定义一个函,multi是函名,a和b是参名。函体中的return关键字用来返回该函的结果,即a和b的乘积。 那么,如何测试该函的正确性呢?可以使用一些测试用例,例如: ``` print(multi(3, 5)) # 输出 15 print(multi(2.5, 4)) # 输出 10.0 print(multi(-2, 6)) # 输出 -12 ``` 这些测试用例中,分别传入不同类型的参,即整、浮点和负,测试multi函是否能正确计算它们的乘积。运行结果是正确的,说明该函的实现是正确的。 综上,Python实现multi函5.3,只需要定义一个函名为multi,定义两个参a和b,函体中用return语句返回a和b的乘积就可以了。同时,可以使用各种测试用例来测试该函的正确性。 ### 回答3: Python是一种高级编程语言,提供了许多内置函来简化编程过程。其中之一是multi函,可以实现多个字相乘。下面将详细介绍如何使用Python实现multi函。 1. 定义multi函 首先,需要定义一个名为multi的函。函有一个参,即要相乘的字列表: ``` def multi(numbers): ``` 2. 初始化结果变量 接下来,需要初始化一个结果变量,用于存储字相乘的结果。在这里,可以将结果变量设置为1,因为任何字乘以1都等于其本身: ``` result = 1 ``` 3. 循环相乘 然后,在for循环中,使用“*”符号将相邻的字相乘,并将结果赋给结果变量。注意,这里的for循环是遍历字列表中的所有字,即使它们很多也不会出现问题: ``` for number in numbers: result *= number ``` 4. 返回结果 最后,将计算结果返回给调用函的代码行: ``` return result ``` 完整代码如下: ``` def multi(numbers): result = 1 for number in numbers: result *= number return result ``` 5.3版本的multi函现已成功实现,可以接受字列表作为输入,并返回所有字的乘积。这个函可以用于各种场合,例如在计算机程序中进行学计算,或将多个字相乘以得出结果等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值