在介绍方法重载前要先了解一下什么是方法
方法:
概念:类的共同行为,封装了一段逻辑代码,在封装方法时,尽可能的只完成一项功能(避免将多个功能封装到一个方法内)
方法的使用:方法属于对象的行为,应该使用:引用.方法,这些方法动态绑定到对象上
方法签名:
方法名+形参列表=方法签名
形参列表:指的是形参的类型顺序列表
如:public void sum(int a,int b)
方法签名是: sum + int,int
public int eat(String food)
方法签名是:eat +String
方法的重载(overload):在同一个类型中,方法名相同,参数列表不同
在方法调用时,编译器会检查类的信息中是否有此方法签名的方法c.sum(3,5):
此时编译器检查类中是否有c.sum(int,int)这样的方法如果有,编译通过,没有,编译失败,并提示错误
public class Point {
int x;//横坐标
int y;//纵坐标
public double distance() {
int num = x*x+y*y;
return Math.sqrt(num);
}
/**横纵坐标移动整数s*/
public void move(int s) {
x+=s;
y+=s;
}
/**横纵坐标移动浮点数s*/
public void move(double s) {
/*
* 扩展赋值运算符,类型不一致时
* 会自动转成符号左边的类型
*
* int m = 10;
* double s = 5.5;
* m+=s;//相当于 m = (int)(m+s)
*/
x+=s;
y+=s;
}
/**横坐标平移x,纵坐标平移y*/
public void move(int x,int y) {
this.x+=x;
this.y+=y;
}
这里我们再介绍一下java的内存管理机制
jvm将内存分成三大主要区域。
方法区: jvm将字节码文件加载到此区域,用来存储类的信息
堆(heap):用来存储引用类型的对象
栈(stack):用来存储方法内的局部变量
栈帧:是栈中的空间。当程序执行到某一个方法时,jvm专门为此方法开辟的一块独有空间,此方法内的局部变量,都在此栈帧中,当此方法结束后,栈帧消失,释放内存
构造方法(构造器):
是特殊的方法,作用是用来给成员变量(Field,字段,属性)
特点:
(1)没有返回值这个位置
(2)方法名与类型相同
默认无参构造器:如果定义类时,没有添加构造方法,系统会默认提供一个公有的没有形式参数的构造方法
public Point(){}
注意:如果定义期间,提供了构造器,系统不再提供无参构造器。
有参构造器:因为构造器是用来给成员变量初始化的,为了方便,所以形式参数的名称都与成员变量一致。因此,在赋值时,this.不能省略。
构造器的调用:
只能是new关键字来调用 。
new 构造方法(有参传参)。
对象的实例化:是由new完成的(对象此时就存在了,但是成员变量都是默认值)
对象的成员变量初始化:是由new调用的构造器进行的(成员变量是第一次被赋值)
构造器的重载:
一个类中,可以有多个构造器。
方法名相同,参数列表不同
参考代码:
public class Student {
String stuId;
String name;
String grade;
int age;
double score;
public Student(String stuId,String name,String grade,int age,double score) {
this.stuId = stuId;
this.name = name;
this.grade = grade;
this.age = age;
this.score = score;
}
}
可变参数:在Java 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用
语法:public void sum(类型名称...类型名) { }
练习代码
public void sum(int...a) {
int sum=0;
//可传入多个参数
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
System.out.println(sum);
}
持续更新中。。。。。