方法重载
- 方法名必须相同
- 形参列表不同(形参数据类型类型或个数或顺序 至少有一样不同),对形参名无要求
- 返回类型无要求
- 访问修饰符列表无要求
这两个方法并没有构成重载,这两个方法还是同一个方法
可变参数
java允许将同一个类中同名同功能但参数个数不同的方法封装成一个方法。
基本语法
访问修饰符 返回类型 方法名(数据类型…形参名)、
public int sum(int a, int b){
return a+b ;
}
public int sum(int a, int b,int c){
return a+b+c ;
}
public int sum(int a, int b,int c,int d){
return a+b+c+d ;
}
这三个方法可以等价为一个方法,利用可变参数的方法。
public int sum(int...nums){
int result=0;
for (int i = 0; i < nums.length; i++) {
result+=nums[i];
}
return result;
}
nums就相当于一个长度可变的数组
Overload o=new Overload();
System.out.println(o.sum(10,20));
System.out.println(o.sum(20,85,11,29));
也可以不带参数,最少接收的参数个数为0
注意细节
- 可变参数可以和普通类型的参数一起放在形参列表
public int sum(String ab,int...nums){
int result=0;
for (int i = 0; i < nums.length; i++) {
result+=nums[i];
}
return result;
}
- 一个形参列表只能出现一个可变参数
作用域
- 局部变量必须赋初值后才能使用,没有默认值
- 全局变量(属性)可以不赋值直接使用,有默认值
构造器
- 构造函数没有返回值,也不能写void
- 一个类可以定义多个构造器,即构造器的重载
- 构造器是完成对象的初始化,不是创建对象
- 在创建对象时,系统会自动调用该类的构造方法
- 如果在类中我们没有自己定义构造器,系统会自动生成一个默认的无参构造器
流程分析
public class Person {
int age=90;
String name="abc";
Person(String aname, int aage){
name=aname;
age=aage;
}
public static void main(String[] args) {
Person d=new Person("刘菱",23);
}
}
Person d=new Person(“刘菱”,23); 执行这条语句发生了什么?
- 首先会把Person.class的信息加载到内存中的方法区中
- 在堆中分配空间地址
- 完成对象初始化
- 默认初始化 age=0;name=null;
- 显示初始化 age=90;name=“abc”;
- 构造器初始化 age=23; name=“刘菱”;
- 将完成对象初始化后的地址返回给对象引用变量d;
this
- 哪个对象调用,this就代表哪个对象
- this关键字可以用来访问本类的属性,方法,构造器
- this用于区分当前类的属性和局部变量
- 访问成员方法的语法: this.方法名(参数列表)
- 访问构造器语法: this(参数列表) 只能在构造器中使用,并且**this(参数列表);**必须放在第一句
- this不能再类定义的外部使用,只能在类定义的方法中使用