java的this关键字的使用和注意事项

一、this关键字的使用说明

1、概述
this代表它所在函数所属对象的引用。 简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
2、this关键字主要有三个应用
(1)调用本类中的属性,也就是本类的成员变量
    Public Class Student { 
     String name; //定义一个成员变量name
     private void SetName(String name) { //定义一个参数(局部变量)name
     	 this.name=name; //将局部变量的值传递给成员变量
     }
    }

(2)this调用本类中的其他方法

    public class Student { //定义一个类,类的名字为student。 
    public	String  name(){
    	return "jaingheng";
    }
    public String getName(){
    	this.name();
    }
    }

(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

    public class Student { //定义一个类,类的名字为student。 
     public Student() { //定义一个方法,名字与类相同故为构造方法
      	this(“Hello!);
     		}
     public Student(String name) { //定义一个带形式参数的构造方法
     }
    }

注意点:
在使用this关键字调用其他关键字的时候,有以下限制:
1)this()调用其他构造方法的语句只能放在构造方法(在其他普通方法里是不行的)的首行;
2)在使用this调用其他构造方法的时候,至少有一个构造方法是不用this调用的。(必须要有结尾,不能无限期的调用下去,循环递归调用);
如下就会出错:

    package methoud;
    class Person{        // 定义Person类
        private String name ;        // 姓名
        private int age ;            // 年龄
        public Person(){    // 无参构造
            System.out.println("新对象实例化") ;
        }
        public Person(String name){
            this.name = name ;
            this() ;// 调用this()方法只能放在构造方法首行
        }
        public Person(String name,int age){    // 通过构造方法赋值
            this(name) ;// 调用有一个参数的构造方法
            this.age = age ;// 为类中的age属性赋值
        }
        public String getInfo(){    // 取得信息的方法
            this() ;// 其他普通方法不能调用this()方法
            return "姓名:" + name + ",年龄:" + age ;
        }
    };
    public class ThisDemo04{
        public static void main(String args[]){
            Person per1 = new Person("张三",33) ;    // 调用构造实例化对象
            System.out.println(per1.getInfo()) ;    // 取得信息
        }
    };

(4)使用this关键字调用当前对象。

    class Person{        // 定义Person类
        public String getInfo(){    // 取得信息的方法
            System.out.println("Person类 --> " + this) ; // 直接打印this
            return null ; // 为了保证语法正确,返回null
        }
    };
    public class ThisDemo06{
        public static void main(String args[]){
            Person per1 = new Person() ;    // 调用构造实例化对象
            Person per2 = new Person() ;    // 调用构造实例化对象
            System.out.println("MAIN方法 --> " + per1) ;    // 直接打印对象
            per1.getInfo() ;    // 当前调用getInfo()方法的对象是per1
            System.out.println("MAIN方法 --> " + per2) ;    // 直接打印对象
            per2.getInfo() ;    // 当前调用getInfo()方法的对象是per2
        }
    };
运行结果:
    MAIN方法 --> methoud.Person@2a139a55
    Person类 --> methoud.Person@2a139a55
    MAIN方法 --> methoud.Person@15db9742
    Person类 --> methoud.Person@15db9742

可见,用this调用的是当前对象,与直接per1,per2是一样的效果。
(5)对象的比较

    class Person{        // 定义Person类
        private String name ;    // 姓名
        private int age ;        // 年龄
        public Person(String name,int age){
            this.setName(name) ;
            this.setAge(age) ;
        }
        public void setName(String name){    // 设置姓名
            this.name = name ;
        }
        public void setAge(int age){        // 设置年龄
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    public class ThisDemo07{
        public static void main(String args[]){
            Person per1 = new Person("张三",30) ;    // 声明两个对象,内容完全相等
            Person per2 = new Person("张三",30) ;    // 声明两个对象,内容完全相等
            // 直接在主方法中依次取得各个属性进行比较
            if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
                System.out.println("两个对象相等!") ;
            }else{
                System.out.println("两个对象不相等!") ;
            }
        }
    };

运行结果:

两个对象相等!

你可能感兴趣的:(javase)