目录
一 、方法的重载
方法的重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数及类型的不同可以完成不同功能的方法调用
public class MethodDemo {
public static void main(String[] args) {
int one = add(10,20);
int two = add(10,20,30);
float three = add(10.3f,13.3f);
System.out.println("add(int x, int y)计算结果为:" + one);
System.out.println("add(int x, int y,int z)计算结果为:" + two);
System.out.println("add(float x, float y)计算结果为:" + three);
}
public static int add(int x, int y){
int temp = 0;
temp = x + y;
return temp;
}
public static int add(int x, int y,int z){
int temp = 0;
temp = x + y + z;
return temp;
}
public static float add(float x, float y){
float temp = 0;
temp = x + y;
return temp;
}
}
从程序中可以发现add()方法被重载了3次,在调用时,程序会根据参数的类型和个数的不同自动进行区分
System.out.println()方法也属于重载方法
辨别:方法的重载一定只是参数上的类型或个数不同,以下代码不属于方法重载
以上代码不属于方法重载,并且编译也不会通过
二 、构造方法
在《类与对象》的代码中,实例化一个对象之后,需要通过Set方法为对象中的属性赋值
其实,我们可以通过 构造方法 在对象实例化时就直接为对象的属性赋值,
实例化对象的语法:类名称 对象名称 = new 类名称(),也就是代码中 Person2 per = new Person2(); 其中的()表示调用了方法,而这个方法就是定义在类中的构造方法。代码如下:
class Person3{ //定义一个Person类
private String name; //声明类的属性
private int age; //声明类的属性
public Person3(String name,int age){ //定义构造方法,初始化对象中的属性值
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0&&age<150){
this.age = age;
}
}
public void tell(){
System.out.println("姓名:" + this.getName() + " 年龄:" + age);
}
};
public class ClassDemo03{
public static void main(String[] args) {
Person3 per = new Person3("Tony",24); //实例化对象时,调用构造方法为属性赋值
per.tell();
}
}
程序运行结果:
三、构造方法的定义
定义构造方法需要注意以下三点:
- 构造方法的名称必须与类名称一致
- 构造方法的声明处不能有任何 返回值 类型的声明
- 不能在构造方法中使用 return 返回一个值
四、自动生成构造方法
构造方法的主要作用就是为类中属性初始化。并且在实例化对象时就会被调用。
在《类与对象》的代码中,并没有定义构造方法,但程序依然能够执行,那是因为,
在JAVA中如果不定义构造方法的话,在编译时,会默认加上一个无参数的,什么都不做的构造方法
类似:Public Person3() {
}
但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上。
如果Person3 类中已经有了一个有参数的构造方法,这时再使用 Person3 per = new Person3();来创建对象的时候就会报错,
所以,当定义了有参数的构造方法后,最好加一个无参数的构造方法.
五、构造方法重载
与普通方法一样,构造方法也可以重载的,只要每个构造方法的参数类型或参数个数不同
class Person4{ //定义一个Person类
private String name; //声明类的属性
private int age; //声明类的属性
public Person4(){ //定义无参构造方法
}
public Person4(String name){ //定义一个参数构造方法
this.setName(name);
}
public Person4(String name,int age){ //定义多个参数构造方法
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0&&age<150){
this.age = age;
}
}
public void tell(){ //类的方法
System.out.println("姓名:" + this.getName() + " 年龄:" + age);
}
};
public class ClassDemo04{
public static void main(String[] args) {
Person4 per = new Person4("Tony",24); //实例化对象时,调用构造方法为属性赋值
Person4 per2 = new Person4("Mark");
per.tell();
per2.tell();
}
}
程序运行结果:
六 、匿名对象
匿名对象就是没有明确定义名字的对象,一般匿名对象只使用一次
class Person3{ //定义一个Person类
private String name; //声明类的属性
private int age; //声明类的属性
public Person3(){
}
public Person3(String name,int age){
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0&&age<150){
this.age = age;
}
}
public void tell(){
System.out.println("姓名:" + this.getName() + " 年龄:" + age);
}
};
public class ClassDemo03{
public static void main(String[] args) {
new Person3("Jony",26).tell(); //匿名对象
}
}
程序运行结果:
new Person3("Jony",26).tell(); 在堆内存中开辟空间,而不存在栈内存的引用,此对象使用一次之后,就等待被垃圾收集机制回收