我是你的老师父,请打开你的电脑,打开你的idea,然后咱们继续谈对象,上次说了为什么new Person();后边有个括号,那就提到了构造函数
一、构造函数
上图中的两个函数,一个是无参构造函数,就是下边这个
public Person() {
}
一个是有参构造函数,这个!
public Person(String name, String sex, String skill) {
= name;
= sex;
= skill;
}
它们的写法就是:
访问权限修饰符 + 方法名都跟类名一样 + 小括号(括号中可以有参数,可以没参数) {} 两个大括号
后边两个大括号以及括号中的代码叫做方法体
目前你所看到的类中所有方法都有方法体,以后讲抽象类就会有没有方法体的写法,后边再讲。
它才是真正造人的方法!你在new的时候,就是使用的这两个方法。
new Person()就是第一个方法
new Persion("哪吒", "男", "三头六臂") 就是第二个方法。
注意:
你在写类的时候,代码中是没有任何构造函数的,这时候去new的话只能new Person() ,这个无参的构造函数是默认的,不用写也是存在的。
但是如果你只写了含有参数的构造函数,那无参构造函数会自动失效,就是说不存在了,除非你给手动再写上无参构造函数
举个例子如下图:
a、无参构造函数默认存在,是可以直接使用默认构造函数执行new Person()操作的
b、有参构造函数,是可以调用有参构造函数,但是不能调用无参构造函数了,因为无参构造函数已经失效了
看到没,第二行Person p2 = new Person()报错了,把鼠标放在红色波浪线上,提示错误信息!
c、写了有参和无参构造函数如下,两个构造函数都可以用来初始化类:
看到没,这次就不会报错了,所以大家记住这个知识点,在讲继承的概念的时候还会提到。
那说说参数
1、参数概念
在调用构造方法的时候,也就是new的时候比如:
new Persion("哪吒", "男", "三头六臂");
括号中的叫做实际的参数,因为他们都是确定的数字、文字了,已经是实际的内容了啊所以是实际的参数,简称实参
那再看相对应的下边这个方法的定义,这个方法定义中的三个参数叫做形式参数确实是,它们只是个形式,不是具体的值,他们就相当于数学中的代数,代表一个数而已,具体的内容需要调用的时候,把实际的参数传进来,他们才会有值,形式参数简称形参。
这个形式参数有两个作用:
1、定义了一个局部变量,方法内部可以调用。
2、外部调用这个方法的时候,告诉你这个方法需要什么参数,按照形参规定来传递。
public Person(String name, String sex, String skill) {
= name; // 其实是属性,赋值符号(=)后边的name是形参变量
= sex;
= skill;
}
还记得变量定义吧,你看String name;是不是定义了一个变量?那这个变量的值是什么呢?看这行代码:
new Persion("哪吒", "男", "三头六臂");
第一个参数“哪吒”其实就是给name赋值呢,相当于是String name = "哪吒";
方法上定义形式参数的时候和局部变量的定义是一致的,只不过需要用逗号分隔而不是分号(分号代表了这语句结束,但是显然并没有结束)逗号是在方法参数、for循环等地方会用到,作为参数分隔符,希望大家记住
形参和实参的顺序一一对应关系,你不能把性别和名字对调!并且传递的参数类型也必须保持一致
比如这个构造函数必须都得传递String类型的参数,因为形式参数规定的就是String。
那如果改下变成这样
public Person(String name, boolean sex, String skill) {
= name;
= sex;
= skill;
}
那你在传递的时候就需要第一个String,第二个boolean,第三个String类型的参数了,也就是这样
new Persion("哪吒", true, "三头六臂");
好了构造函数懂了吧,快点敲敲代码吧!……
问题:
有人敲了一会儿代码,又问了,这个=name,是什么意思?
纳尼?
二、类中this的问题
好,我来解释,this,来翻译翻译,是什么意思!对,就是“这个”的意思
“这个”是谁啊,是你造出来的“哪吒”啊!
this指代的就是你new出来的对象,方便你在类中使用类自己的方法或者属性
那后边的点是什么意思?后边的点就是说我要使用我自身的特性了,比如我要使用我的名字了
那就是,
我要用我的名字干嘛?因为你麻麻告诉你叫哪吒了,你得记住,所以给自己的名字属性赋个值。
那=号左边的和=号右边的name有什么区别呢?
=号左边的就是你的属性也就是成员变量的这个name,看到没有,那个
private String name;
那=号右边的不带this的name呢?这个实际上是形式参数中的name,上文中说了形参定义了一个局部变量,这个name就是这个局部变量。
注意:
如果你定义的局部变量或者形参和属性重名,那这时候正好要用到这两个变量,那属性需要加上this来区分。
如果没有重名的情况,使用属性的时候没必要加this关键字。
那有人又问了,你这个局部变量没有值啊?
值你妹啊,不是说了是调用的地方通过实参来传递进来的,记住了没?相当于在方法调用的地方给name赋值了,方法调用时相当于这段代码String name = "哪吒";
那这个时候 = name这段代码因为右边的name是“哪吒”那左边的就被赋予了“哪吒”这个字符串。
然后你造的人就有名字了,其他性别、技能一样的
那你造的这个人就完整了!
那又问了,我造完了,这个“人”能干什么呢?
又是好问题,你可以让他告诉你他叫什么,那你得让他说话,那这说话可不是人的属性了,属性可以用成员变量来表达,那现在这是一个动作,是一个行为是不是,跟你走路一样,是不是个动作?
那java中怎么表达动作和行为这个概念呢?
对,是方法!
好,咱们接下来说方法!可不是构造方法了哦!
来先看一段代码,见下图
看到没,这个say()就是方法
方法和构造函数不同
方法是有返回值的,方法不能和类名相同,其他都相同
那方法结构语法就是
权限修饰符+返回值+方法名+括号(可以带参数)然后是括号和方法体
规范:
1、方法需要注意首字母小写
2、多个单词的话,首字母小写,后边的单词首字母大写,比如buyFruit(),buy是第一个单词,首字母小写,Fruit是第二个单词,首字母大写,后边再有字母的话都是首字母大写,比如buyFruitForMe()
关于方法返回值
上边简单说了说方法和构造方法的区别,那重要的区别是名称和返回值,名称好理解,那说下返回值。
大家之前看到的是void,这个是空的意思,表示什么都不返回,那其实是可以返回东西的。
比如让你写出你的名字和年龄来!
看下图:
这个类中我又增加了一个属性:年龄,他是int类型,还记得之前讲变量的时候说的int不?是整数类型,是数字。
年龄不用初始化,因为年龄每年都变,模拟这个场景的话,那就是每年都得重新设置年龄,所以有个setAge方法。
setAge的方法体中,大家明白什么意思吗?我不用解释了吧,不懂的话说明刚才讲this的时候没好好看,回去再好好看一遍。
那重点是后边两个方法,writeName和getAge方法,这两方法返回值不是void了吧!
返回值可以是任意类型(类型什么意思?回去翻翻变量那一节)。
怎么返回呢?是通过return关键字,return的值必须和你方法中定义的类型一致!
比如上边的例子,public String writeName() 这个方法,返回值是String类型,那我可以返回name属性,我还可以返回一个定义的字符串,比如:
public String writeName() {
return "我的名字叫 你的老师父";
}
也就是说不管你返回的值是什么,只要和规定的返回类型一致就可以。
那getAge呢,getAge要求的返回值是int,所以返回的就是。
注意:return后边一般不能有任何代码,因为写了return后就代表这个方法已经执行结束了,后续代码是不会再执行了。
为什么有一般两个字,后边讲控制逻辑的时候再说这个。
补充this
大家看到 writeName中return的是name,而getAge中return的是 ,其实这两个都是调用的属性。
之后是main函数
main函数中第一行是这么写的
Person person = new Person("哪吒", "男", "三头六臂");
这是不是个变量赋值的过程?左边是Person变量,右边是值?对,确实是这样,这就是之前咱们讲变量时提到过的“成员变量”的概念
实际上也很简单,左边是变量名和变量类型,右边是变量的值,只不过这个值必须是你new出来的对象,而不是之前那样直接写个值就好了。
第二行是(),person要调用say()方法,表示这个人要说话了,看他说了什么?
是不是啪啪的,额,有打错了,我的输入法最近怎么了!是不是怕怕的?
这篇文章内容总结一下:
1、先讲了构造函数的写法
2、构造方法形式参数的含义,之后引出this的问题
3、然后讲了this的概念
4、之后讲了类中的方法(实例方法)
好了,大家快去试一试,下一此要讲方法的调用和属性访问问题!大家洗耳恭听,看我怎么把12岁小朋友给讲的会敲代码!还是那句话,希望人人会编程,处处有码农!
1.文章《“java 怎么调用构造函数“JAVA中系统默认的构造函数!》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《“java 怎么调用构造函数“JAVA中系统默认的构造函数!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好