方法:
概念:类的共同行为,封装了一段逻辑代码,
尽可能的只完成一项功能(避免将多个功能封装到一个方法内)
2.方法的使用:
方法属于对象的行为,应该使用 :引用.方法,这些方法动态绑定到对象上
3.方法签名:
方法名+参数列表 = 方法签名
形参列表:指的是参数的类型顺序列表
如:public void sum(int a,int b)
方法的签名是:sum + int,int
public int eat(String food)
方法的签名是:eat + String
4.方法的重载(overload):
在同一个类型中,方法名相同,参数列表不同
在方法的调用时,编译器会检查类的信息中是否有此方法签名的方法
c.sum(3,5):
此时编译器检查类中是否有c.sum(int,int)这样的方法编译通过
如果没有的话编译失败,并提示错误
举例:
定义一个类型:坐标中的点(Point)
成员变量 int x y
方法 计算到原点(0,0)的距离
Math.sqrt(num):对num开平方
move(int s)
横坐标都平移整数s
move(double s)横纵坐标都平移浮点数s
在定义一个方法:横坐标平移x,纵坐标平移
public class Point {
int x;//横坐标
int y;//纵坐标
public double distance() {
int num = x*x+y*y;
return Math.sqrt(num);
}
/** 计算此点到点p1的距离*/
public double distance(Point p1) {
double dis = (this.x-p1.x)*(x-p1.x)+(this.y-p1.y)*(y-p1.y);
return Math.sqrt(dis);
}
/**横纵坐标移动整数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;
}
public String toString() {
return "("+x+","+y+")";
}
public static void main(String[] args) {
Point p = new Point();
p.x = 3;
p.y = 4;
double dis = p.distance();
System.out.println("到原点的距离:"+dis);
//此点移动 横纵坐标都移动3
p.move(3);
System.out.println(p);//系统默认调用toString()
//此在再次移动,横纵坐标都移动-4.5
p.move(-4.5);
System.out.println(p);//(1,2)
//横坐标移动-2,纵坐标移动3
p.move(-2,3);
System.out.println(p);
Point p2 = new Point();
p2.x = 1;
p2.y = 1;
Point p3 = new Point();
p3.x = 10;
p3.y = 10;
double d1 =p2.distance(p3);//distance(Point )
System.out.println(d1);
}
}
内存管理机制:
jvm将内存分成三大主要区域。
方法区:jvm将字节码文件加载到此区域,用来存储类的信息。
堆(heap):用来存储引用类型的对象
栈(stack):用来存储方法内的局部变量
栈帧:是栈中的空间。当程序执行到某一个方法时,jvm专门为此方法开辟一块独有的空间,
此方法内的局部变量都在此栈帧中,在此方法结束后,栈帧消失,释放内存。