四、方法
1.方法
函数——>方法
- C、C++中称为函数
- Java中称为方法
方法的四要素:方法返回值类型、方法名称、形式参数、方法体。
2.方法的构造
① **(无参构造器)**默认创建,隐藏的,只要创建类,就会存在无参数构造函数
public Dogs(){
}
先定义,再使用。
实例:
- 注册新账户
- 注册完成后再补充资料
② **(有参构造器)**有参数的构造函数
public Dogs(String name,String variety,int age){
this.name=name;
this.variety=variety;
this.age=age;
}
初始化=定义+使用
实例:
- 在注册账户的同时填写资料
3.方法的重载
- 方法名相同
- 参数个数或参数类型不相同
public static int sum(int x,int y){
return x+y;
}
public static double sum(double x,double y){
return x+y;
}
public static int sum(int x,int y,int z){
return x+y;
}
特点:
- 必须是两个以上同名的方法
- 方法之间的参数组合必须不同(参数的数目不同或参数类型不同)
- 方法的返回值不能作为判断方法之间是否构成重载的依据
好处:
- 简化类调用者的代码,在感觉类有一种自动化调用的功能的同时,并未增加类创建的代码
4.方法的重写
在一个类中,子类对父类中的方法,进行重新实现。
拥有相同的方法名称、返回值、形参列表。
- 子类中的权限大于或等于父类的权限,(修饰符高低:private < 默认修饰符<protected < public)
- 修改方法的权限只能从小范围到大范围
- static修饰的方法,无法被重写。
- 特殊情况:子类不能重写父类被声明为private权限的方法
5.方法参数以及传递
Java语言中,方法中参数的赋值,只采用传值的方式,按照类型又分为:基本数据类型、引用数据类型。
① 基本数据传递:
int x = 5;
System.out.println("调用前:"+x);
change(x);
System.out.println("调用后:"+x);
public static void change(int x){
x = 300;
System.out.println("执行中:"+x);
}
输出:
调用前:5
执行中:300
调用后:5
② 引用数据传递:
calc.mCurrentResult = "调用方法前";
System.out.println("方法调用前:"+calc.mCurrentResult);
change(calc);
System.out.println("方法调用后:"+calc.mCurrentResult);
public static void change(计算器 calc){
calc.mCurrentResult = "调用change方法";
System.out.println("方法执行中:currentResult:"+calc.mCurrentResult);
}
输出:
方法调用前:调用方法前
方法执行中:currentResult:调用change方法
方法调用后:调用change方法
6.递归调用
//计算从1到10的加法和
int sumCount = sum(10);
System.out.println("sumCount is:"+sumCount);
private static int sum(int n){
if(n==1){
return 1;
}else{
return n+sum(n-1);
}
}
五、静态变量和静态方法
静态变量和静态方法完全脱离对象,建立在类的基础上。
在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。
静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java 虚拟机就可以根据类名找到它们。
- static 修饰的成员变量和方法。
- 普通变量和方法从属于对象。
- 静态方法不能调用非静态成员,编译会报错。
1.静态变量
静态变量可以被类的所有实例共享。
//NanG 小区名 静态变量
public static String plot="NanG";
System.out.println("Dogs.plot="+Dogs.plot);
2.静态方法
静态方法中不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。
//injection 打针 静态方法(声明文件中可见,不能被其他文件所用)
public static void injection(){
System.out.println("所有狗狗,月底打针");
}