第十三天学Java(面向对象)
时间就像一张网,你撒在哪里,收获就在哪里。
方法重载:overload
重载:一个类中定义多个相同名称的方法
要求
方法名称相同
参数列表不同(类型,个数。顺序)
与访问修饰符/返回值类型无关
调用带有重载的方法时,需要根据传入的实参去找到
方法的重载
同一个功能
根据参数的不同,执行的具体的方法也不同
衡量方法是否重载
1、同一个类中
2、方法名必须一致
3、参数列表必须不同,类型,个数,顺序
举例
就是同一个功能的方法,因为参数不同,调用的具体方法也不同
如何判定多个方法是否是重载的?衡量标准,要同时满足以下三条
1、同一个类中
2、方法名必须一致
3、参数列表必须不同,类型,个数,顺序
优点
1、简化了开发的压力
2、简化了记忆的压力
3、调用方法更方便。更简洁,又满足了不同的情况
基本原理
当方法一致时,通过形式参数列表的不同来选择要执行的方法
构造方法
构造方法:是一个很特殊的方法
1、声明的语法
publi 类名(){}
2、调用的方式
new关键字调用
3、作用
用于创建对象
普通方法:一段具有特殊功能的方法,而且可以被多次调用
声明的语法:public static void main(String[]){}
调用的方式:方法名(实参)
作用:避免重复的代码增强代码的可读性
提高程序的可维护性
1、编写Java的源代码:XXX.java
2、将源文件进行编译,XXX。class
javac命令 javac XXX.java
3、JVM执行字节码文件:XXX。class
Java反编译工具
javap -c -1 -private XXX.calss
java编译器提供的默认的构造方法
问题:创建对象的时候,代码:new Person();调用的这个Person()的这个方法,哪来的
结论:通过反编译工具,发现了一些和源代码不相符的内容,这就是javac编译器,自动给代码中添加的构造方法。用于创建对象。
java编译器,发现代码中没有任何的构造方法,在编译时,会自动的帮我们添加一个无参的构造方法。
如果代码中自己写了构造方法,那么编译器不再帮我们添加无参的构造方法。
注意点:
1、如果代码中,没有写构造方法,编译器会自动的添加一个无参的构造方法
2、如果代码中。写了构造方法。编译器都不hi再给我们添加无参的构造方法,编译器不会帮我们自动添加,需要我们在写了有参的构造方法,再写一个无参的构造方法
对比一下构造方法和普通方法:
this关键字
词义:这个。表示当前对象
就近原则问题
当写代码的时候,要给成员变量,参数,局部变量等等,要进行命名。根据见名知意的原则,很容易就命名冲突了,在程序当中,有个就近原则,一旦名字冲突,就要看离哪个近
导致名称中成员变量和局部变量的命名冲突
因为命名规范,见名知意,成员变量和局部变量命名相同了
因为就近原则问题,构造方法Person中,name和age,都会堪称这个参数,就是局部变量
希望有一种方式,来告诉编译器, =左边时成员变量,=右边的才是参数
可以借助于this这个关键字解决
this关键字的用法一
表示当前对象
使用this关键字,明确告诉编译器,this后的这个name,就是成员变量,对象的属性,没有this的就是这个参数
解决成员变量和局部变量的命名冲突
this就是成员变量,没有的就是局部变量
this关键字的用法二
this()指代当前类的构造方法
this(参数),就表示构造方法
如果一个类中,有多个构造方法之间存在了调用方法,那么使用this()指代这个构造方法,具体指代哪个构造方法,要靠参数来区分
注意点:当this()指代构造方法,那么必须放在首行
三、总结
1、方法的重载:overload
概念:一个功能的多种形式。
理解:一个功能,根据参数的不同,执行的具体的方法也不同。
衡量多个方法是否是重载:
A:同一个类中
B:方法名必须一致
C:参数列表必须不同:顺序,个数,类型
2、构造方法:
概念:就是一个特殊的方法。声明,调用,作用。
声明的语法:
public 类名(){}
调用:
new关键字来进行调用。
作用:
创建对象。
注意点:
1、如果一个类,没有写构造方法,那么编译器会自动添加一个无参的构造方法。
2、如果一个类,写了构造方法,那么编译器不再添加。
分类:
无参构造:创建对象。
有参构造:创建对象,并给属性初始化赋值。
class Person{
String name;
int age;
public Person(){}
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
3、this关键字
用法一:指代本类的对象的。
就可以访问属性和方法。this.属性,this.方法
用法二:指代本类的构造方法。this()
如果一个类中,有多个构造方法,靠参数来区分。指代构造方法时,要放在首行。