#Java方法的定义与使用
##方法就是一段可以被重复调用的方法快,有一定的模板 ,如下
public static 返回类型 方法名称(参数类型1 变量1,参数类型2 变量2..){
方法体代码;
return 返回值;
}
##使用方法的好处在于它可以重复调用,这样大大减少了代码量,使代码更加的简洁,也便于维护。
#驼峰命名法
##顾名思义 ,就是说方法名称看上去就像驼峰一样此起彼伏,第一个单词以小写字母开始,第二个单词的首字母大写或每一个单词的首字母都采用大写字母 例如:myFirstTest,yourFirstTry等等。这样命名的好处是可以使其他程序员在看你的代码时能明白你这个方法执行的功能是什么。
##在定义方法的时候其返回值有两种:
- void :返回值为空 无返回值
- 数据类型:int double char…
##1. 定义一个没有返回值,没有参数的方法 如下
public class Practice {
public static void main (String[] args) {
print();
}
public static void print() {
System.out.println("hello word");
}
}
##2. 定义一个没有返回值,有参数的方法 如下
public class Practice {
public static void main(String[] args) {
print("hello");
print(" world");
}
public static void print(String abc) {
System.out.print(abc);
}
}
##3. 定义一个有返回值,有参数的方法 如下
public class Practice {
public static void main(String[] args) {
System.out.println(add(1,2));
}
public static int add(int x,int y) {
return x + y;
}
}
##4.方法重载 :方法名称相同,参数的类型和个数不同
public class Practice {
public static void main(String[] args) {
System.out.println(add(1,2));
System.out.println(add(3,4,5));
System.out.println(add(1.1, 1.2));
}
//方法一
public static int add(int x, int y) {
return x + y;
}
//方法二
public static int add(int x, int y, int z) {
return x + y + z;
}
//方法三
public static double add(double x, double y) {
return x + y;
}
}
由上述图可以看出 :
- 方法一和方法二参数类型相同但个数却不相同
- 方法一和方法三参数个数相同但类型却不相同
##在使用方法重载的时候要注意一个非常重要的原则:一个方法中的返回值类型一定要相同,不能一个方法中的返回值又有int又有double等
##5. 方法的重写:父类出了同名的函数,这个我们就称作为方法的重写。
-
使用的前提:父类的功能无法满足子类的需求时。
-
方法重写要注意的事项:
1.方法重写时, 方法名与形参列表必须一致。
2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。
4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。 Exception(最坏) RuntimeException(小坏)。 -
当需要在子类中调用父类的被重写方法时,要使用super关键字 如下
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
super.move(); // 在这里使用了super类的方法
System.out.println("狗可以跑和走");
}
}
public class TestDog{
public static void main(String args[]){
Animal dog = new Dog();
dog.move();
}
}
方法重载与方法重构两者之间的区别
-
方法重载:
1、同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型)
3、方法返回值、访问修饰符任意
4、与方法的参数名无关` -
方法重构:
1、有继承关系的子类中
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
3、访问修饰符,访问范围需要大于等于父类的访问范围
4、与方法的参数名无关`
##6.方法递归调用 :一个方法自己调用自己的形式
###特点
- 方法必须有一个递归的结束条件
- 方法在每次递归处理的时候一定要做出一些变更
实现1~10的累加
public class Practice {
public static void main(String[] args) {
System.out.println(sum(10));
}
public static int sum(int num) {
if(num == 1)
return 1;
return num + sum(--num);
}
}
###在开发过程中应尽量减少递归的使用,过多使用的话会出现栈溢出的现象。java的内存分配主要是由堆和栈分配,堆是线程共有的内存空间,栈是线程私有的,栈的内存回收一般就是随着线程的生而生,亡而亡,递归的使用导致的问题恰好就是跟栈内存有关系的;当一个方法被调用的时候,会产生一些跟这个方法相关的信息,例如:方法名,参数,中间变量等等,这些东东是叫做栈帧的,当一个方法执行完毕的时候,这个栈帧才会从栈顶出栈掉,使用递归的时候,会一直往栈内存里入栈栈帧,而java栈内存是有一定的大小限制的,超过栈内存大小的时候,程序就会出现栈异常的异常了。所以在正常的开发过程中尽量禁用递归。另外 出现无限循环的时候也可能会出现栈溢出的异常