我是你的老师父,请打开你的电脑,打开你的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岁小朋友给讲的会敲代码!还是那句话,希望人人会编程,处处有码农!

相关推荐