java this使用方法

this 的局部参数引用

name 和class Student的(String name ,int age)冲突
jvm不知道调用哪一个name
假如直接在Student对象里面定义name name=null
this.name=name;语句的意思是将这个局部变量的name引用上面全局变量的name

public class ThisDemo {
    public static void main(String[] args) {
        Student s = new Student("小明明", 20);
        System.out.println(s);

    }
}
    class Student{
        String name;
        int age;
        public Student(String name,int age){
            //没有this
            //name=name;
            //age=age;
            //有this
           this.name=name;
            this.age=age;

        }
        @Override
        public String toString(){
            return "Student[name="+name+",age="+age+"]";
        }
    }

//为什么加入this后就能区分呢?
//因为this当前代表的是s实例(对象)

关于this的构造方法使用

为Student再添加两个构造器,修改后如下:

    class Student{
        String name;
        int age;
        int id;

        public Student(int id,String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }


        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public Student(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Student [ id=" + id + ", name=" + name + ", age=" + age +"]";
        }
    }

//构造器用法–>this();跟函数一样()中可以写参数
构造器调用一般是这样子用的.不同的构造器中存在相同代码.为了复用性。可以在参数少的构造器中调用参数多的构造器,如下:

class Student{
        String name;
        int age;
        int id;
        public Student(String name, int age, int id) {
            this.name = name;
            this.age = age;
            this.id = id;
            System.out.println("构造器3已调用");
        }
        public Student(String name, int age) {
            this(name,age,0);
            System.out.println("构造器2已调用");
        }

        public Student(String name) {
            this(name,0);//参数不足,就使用参数默认值补全
            System.out.println("构造器1已调用");
        }
        @Override
        public String toString() {
            return "Student [ id=" + id + ", name=" + name + ", age=" + age +"]";
        }
    }

测试结果1:
public static void main(String[] args) {
Student s=new Student(“小明明”);
System.out.println(s);
}

构造器3已调用
构造器2已调用
构造器1已调用
Student [ id=0, name=小明明, age=0]

测试结果2:
public static void main(String[] args) {
Student s=new Student(“小明明”,20);
System.out.println(s);
}

构造器3已调用
构造器2已调用
Student [ id=0, name=小明明, age=20]

使用调用的时候,调用对象参数写的是什么形式(Student s=new Student(,)),使用的时候都是统一调用public Student(String name, int age, int id)这个方法,然后向下使用
总结:这样子可以在参数最多的构造器中编写代表。其他构造器负责调用参数最多的那个构造器就好了

猜你喜欢

转载自blog.csdn.net/qq_37913435/article/details/81226380