this关键字的作用与构造方法

封装优化1——this关键字
我们发现 setXxx 方法中的形参名字并不符合见名知意的规定,那么如果修改与成员变量名一致,是否就见名知意
了呢?代码如下:
public class Student { 
private String name; 
private int age; public void setName(String name) {
 name = name; 
    }
public void setAge(int age) { 
age = age; 
    }
 }
经过修改和测试,我们发现新的问题,成员变量赋值失败了。也就是说,在修改了 setXxx() 的形参变量名后,方
法并没有给成员变量赋值!这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏,方法中的变量名,无
法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题。
this的含义
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
this使用格式
this.成员变量名;
使用 this 修饰方法中的变量,解决成员变量被隐藏的问题,代码如下:
public class Student {
 private String name; 
private int age; 
public void setName(String name) {
 //name = name; this.name = name; 
}public String getName() {
 return name; 
}public void setAge(int age) {
 //age = age; this.age = age; 
}public int getAge() { 
return age;
}
}

 

 
封装优化2——构造方法
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,
一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效
构造方法的定义格式
修饰符 构造方法名(参数列表){ 
    // 方法体 
}
构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用
构造方法后,代码如下:
public class Student {
private String name; 
private int age; 
// 无参数构造方法 
public Student() {
} 
// 有参数构造方法 
public Student(String name,int age) {
 this.name = name; this.age = age; 
    }
 }
注意事项
1. 如果你不提供构造方法,系统会给出无参数构造方法。
2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
Studnet类
/*
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对家时,其实就是在调用构造方法。
格式:
public 类名称(参数类型参数名称){
       方法体
}
注意事项:
1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
2.构造方法不要写返回值类型,连void都不写
3.构造方法不能return—个具体的返回值
4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么事情都不做。public Student()
5.一旦编写了至少一个构造方法,那么编译器将不再赠送
6. 构造方法是可以进行重载的
重载:方法名称相同,参数列表不同
 */
public class Studnet {
    private String name;
    private int age;

    public Studnet(){
        System.out.println("无参构造方法执行啦 ");
    }

    public Studnet(String name, int age) {
        System.out.println("全参构造方法执行啦 ");
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

StudentDemo01类

public class StudentDemo01 {
    public static void main(String[] args) {
        Studnet studnet = new Studnet();
        System.out.println("****************");

        Studnet stu2 = new Studnet("赵丽颖",20);
        System.out.println("姓名"+stu2.getName()+",年龄:"+stu2.getAge());
        stu2.setAge(21);
        System.out.println("姓名"+stu2.getName()+",年龄:"+stu2.getAge());

    }
}

 

 

posted @ 2022-06-30 11:41  zj勇敢飞,xx永相随  阅读(45)  评论(0编辑  收藏  举报