zoukankan      html  css  js  c++  java
  • this的用法

    this常见的用法有两种:

    1.用this调用成员变量和成员函数

    class Person
    {
    	String name ; 
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }
    

      

    class Test
    {
    	public static void main(String args[])
    	{
    		Person p1 = new Person();
    		p1.name = "zhangsan";
    		p1.talk();
    	}
    }
    

      编译后执行Test,打印出“my name is zhangsan”

      this是一个对象,代表调用了"this所在函数的"那个对象,比如上面,p1.talk()调用了talk(),this就代表p1。this.name相当于p1.name。

      this一般不加也可以,比如上面第一段函数中的this。但是当成员变量参数名一致的时候就必须加this,比如下面这种情况:

    class Person
    {
    	String name ; 
    	void talk(name)
    	{
    		System.out.println("my name is" + name);
    	}
    }
    

      注意这里是没有加this的;这个时候如果在Test里的talk函数里传入“zhangsan1”,如下:

    class Test
    {
    	public static void main(String args[])
    	{
    		Person p1 = new Person();
    		p1.name = "zhangsan";
    		p1.talk(zhangsan1);
    	}
    }
    

      编译执行Test后打印出来的就是"my name is zhangsan1"。就是说默认传给了参数。如果要传递给成员变量的name,就要加this。

      同样,this作为对象,可以调用成员函数

    2.this调用构造函数

    class Person
    {
    	String name ; 
    	int age ; 
    	String address ; 
    	
    	Person()
    	{
    		System.out.println("无参数构造函数");
    	}
    	Person(String s1 , int a , String s2)
    	{
    		name = s1 ; 
    		age = a ; 
    		address = s2 ; 
    	}
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }
    

      用了this,上面就可以这样写:

    class Person
    {
    	String name ; 
    	int age ; 
    	String address ; 
    	
    	Person()
    	{
    		System.out.println("无参数构造函数");
    	}
    	Person(String name , int age , String address)
    	{
    		this.name = name ; //第一个name是成员变量,第二个name是参数
    		this.age = age ; 
    		this.address = address ; 
    	}
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }
    

      或者当你不需要给所有的成员变量赋值,比如只需给name 和 age赋值,可以加一个构造函数:

    class Person
    {
    	String name ; 
    	int age ; 
    	String address ; 
    	
    	Person()
    	{
    		System.out.println("无参数构造函数");
    	}
    	Person(String name , int age)
    	{
    		this.name = name ; 
    		this.age = age ; 
    	}
    	Person(String name , int age , String address)
    	{
    		this.name = name ; //第一个name是成员变量,第二个name是参数
    		this.age = age ; 
    		this.address = address ; 
    	}
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }
    

      但是这样存在重复代码,这时候可以用this的第二种用法:

    class Person
    {
    	String name ; 
    	int age ; 
    	String address ; 
    	
    	Person()
    	{
    		System.out.println("无参数构造函数");
    	}
    	Person(String name , int age)
    	{
    		this.name = name ; 
    		this.age = age ; 
    	}
    	Person(String name , int age , String address)
    	{
    		this(name , age);
    		this.address = address ; 
    	}
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }

        this调用哪一个构造函数,根据this()中传入的参数个数和类型来决定,比如调用无参构造函数只要写this();即可。注意,这种用法要求对this的调用必须是第一条语句。这样产生了一个矛盾,能不能在三个参数的构造函数里同时调用其他两个构造函数?在this(name , age );之前写一个this();是不可以的。但是可以在第二个构造函数里面写一个this();,形成一个接力形式。也就是:

    class Person
    {
    	String name ; 
    	int age ; 
    	String address ; 
    	
    	Person()
    	{
    		System.out.println("无参数的构造函数");
    	}
    	Person(String name , int age)
    	{
                    this();
    		this.name = name ; 
    		this.age = age ; 
                    System.out.println("两个参数的构造函数");
    	}
    	Person(String name , int age , String address)
    	{
    		this(name , age);
    		this.address = address ; 
                    System.out.println("三个参数的构造函数");
    	}
    	void talk()
    	{
    		System.out.println("my name is" + this.name);
    	}
    }
    

      如此一来,用一个Test来调用:

    class Test
    {
        public static void main(String args[])
        {
            Person p = new Person("Zhangsan" , 20 , "Beijing");
        }
    }

    打印出的是:

    无参数的构造函数

    两个参数的构造函数

    三个参数的构造函数

    (为什么可以直接打印出这三句话呢?见“构造函数”)

    (end)

  • 相关阅读:
    完全卸载Android Studio(卸载得干干净净)
    每日生活总结1
    求解协方差矩阵
    每天一个linux命令:ifconfig命令 临时修改重启后恢复原样
    每天一个linux命令(58):telnet命令
    每天一个linux命令:pwd命令
    每天一个linux命令(38):cal 命令
    每天一个linux命令:scp命令
    login shell与non-login shell的区别
    linux下重要的网络配置文件
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3411424.html
Copyright © 2011-2022 走看看