• Java基础_0309:this关键字


    this简介

    在Java中this可以完成三件事情:表示本类属性、表示本类方法、当前对象(只是先介绍概念)

    调用本类属性

    在一个类中定义的方法中可以直接访问类中的属性,但是很多时候有可能会出现方法参数名称与属性名称重复的情况,所以此时就需要利用“this.属性”的形式明确的指明要调用的是类中的属性而不是方法的参数。

    使用this关键字明确的表示访问类中的属性

    class Book {
    	private String title;
    	private double price;
    	public Book(String title, double price) {
    		this.title = title;	// this.属性表示的是本类属性,这样即使与方法中的参数重名也可以明确定位
    		this.price = price;	// this.属性表示的是本类属性,这样即使与方法中的参数重名也可以明确定位
    	}
    	// setter、getter略
    	public String getInfo() {
    		return "书名:" + title + ",价格:" + price;
    	}
    }
    public class TestDemo {
    	public static void main(String args[]) {
    		Book book = new Book("Java开发", 89.2);
    		System.out.println(book.getInfo());
    	}
    }
    程序执行结果:
    书名:Java开发,价格:89.2
    
    

    调用本类方法

    在一个类之中,可以使用this调用两种方法(普通方法、构造方法),而在要调用本类方法也就分为两种形式:

    • 调用本类普通方法

    在之前强调过,如果现在要调用的是本类方法,则可以使用“this.方法()”调用;

    • 调用本类构造方法
      在一个构造中要调用其他构造使用“this()”调用

    范例:调用本类普通方法

    
    class Book {
    	private String title;
    	private double price;
    	public Book(String title, double price) {
    		this.title = title;
    		this.price = price;
    	}
    	public void print() {
    		System.out.println("更多课程请访问:www.yootk.com") ;
    	}// setter、getter略
    	public String getInfo() {
    		this.print() ;	// 调用本类方法
    		return "书名:" + title + ",价格:" + price;
    	}
    }
    public class TestDemo {
    	public static void main(String args[]) {
    		Book book = new Book("Java开发", 89.2);
    		System.out.println(book.getInfo());
    	}
    }
    程序执行结果:
    更多课程请访问:www.yootk.com(“this.print()”语句执行结果)
    书名:Java开发,价格:89.2
    
    

    调用构造方法

    class Book {
    	private String title;
    	private double price;
    	public Book() {
    		System.out.println("一个新的Book类对象产生。");// 把这行语句想象成20行代码
    	}
    	public Book(String title) {
    		this() ;	// 调用本类无参构造方法
    		this.title = title;
    	}
    	public Book(String title, double price) {
    		this(title) ;			// 调用本类有一个参数的构造方法
    		this.price = price;
    	}// setter、getter略
    	public String getInfo() {
    		return "书名:" + this.title + ",价格:" + this.price;
    	}
    }
    public class TestDemo {
    	public static void main(String args[]) {
    		Book book = new Book("Java开发", 89.2);
    		System.out.println(book.getInfo());
    	}
    }
    
    程序执行结果:
    一个新的Book类对象产生。
    书名:Java开发,价格:89.2
    
    

    构造方法实例

    定义一个雇员类(编号、姓名、工资、部门),在这个类里面提供有四个构造方法:

    • 无参构造:编号为0,姓名为无名氏,工资为0.0,部门设置为“未定”;
    • 单参构造(传递编号):姓名为“临时工”,工资为800.0,部门为后勤;
    • 双参构造(传递编号、姓名):工资为2000.0,部门为技术部;
    • 四参构造。
    class Emp {
    	private int empno;
    	private String ename;
    	private double sal;
    	private String dept;
    	public Emp() {
    		this(0, "无名氏", 0.0, "未定");	// 调用四参构造
    	}
    	public Emp(int empno) {
    		this(empno, "临时工", 800.0, "后勤部");	// 调用四参构造
    	}
    	public Emp(int empno, String ename) {
    		this(empno, ename, 2000.0, "技术部");	// 调用四参构造
    	}
    	public Emp(int empno, String ename, double sal, String dept) {
    		this.empno = empno;
    		this.ename = ename;
    		this.sal = sal;
    		this.dept = dept;
    	}
    	public String getInfo() {
    		return "雇员编号:" + this.empno + ",姓名:" + this.ename + ",工资:" + this.sal
    				+ ",部门:" + this.dept;
    	}// setter、getter略
    }
    
    public class TestDemo {
    	public static void main(String args[]) {
    		Emp ea = new Emp();
    		Emp eb = new Emp(7369);
    		Emp ec = new Emp(7366,"ALLEN");
    		Emp ed = new Emp(7355,"KING",5000,"财务部");
    		System.out.println(ea.getInfo());
    		System.out.println(eb.getInfo());
    		System.out.println(ec.getInfo());
    		System.out.println(ed.getInfo());		
    		
    	}
    }
    程序执行结果:
    雇员编号:0,姓名:无名氏,工资:0.0,部门:未定
    雇员编号:7369,姓名:临时工,工资:800.0,部门:后勤部
    雇员编号:7366,姓名:ALLEN,工资:2000.0,部门:技术部
    雇员编号:7355,姓名:KING,工资:5000.0,部门:财务部
    

    表示当前对象

    this关键字在应用的过程之中有一个最为重要的概念 —— 当前对象,而所谓的当前对象指的就是当前正在调用类中方法的实例化对象

    直接输出对象

    class Book {
    	public void print() {	// 调用print()方法的对象就是当前对象,this就自动与此对象指向同一块内存地址
    		System.out.println("this = " + this);// this就是当前调用方法的对象
    	}
    }
    public class TestDemo {
    	public static void main(String args[]) {
    		Book booka = new Book();	// 实例化新的Book类对象
    		System.out.println("booka = " + booka);// 主方法中输出Book类对象
    		booka.print();// 调用Book类的print()方法输出,此时booka为当前对象
    		System.out.println("---------------------------");
    		Book bookb = new Book();// 实例化新的Book类对象
    		System.out.println("bookb = " + bookb);// 主方法中输出Book类对象
    		bookb.print();// 调用Book类的print()方法输出,此时bookb为当前对象
    	}
    }
    
    程序执行结果:
    booka = com.xusan.Book@7852e922
    this = com.xusan.Book@7852e922
    ---------------------------
    bookb = com.xusan.Book@4e25154f
    this = com.xusan.Book@4e25154f
    
    
    
  • 相关阅读:
    logback
    GC
    常用JVM配置参数
    JVM
    linux
    简单的webService 实例
    [转载]Java 工程师成神之路
    ActiveMQ 在mac 上的安装与运行
    subline3 + emmet 加快前端开发效率
    Spring WebMVC 4.1.4返回json时导致的 406(Not Acceptable)
  • 原文地址:https://www.cnblogs.com/xuwei1/p/8358063.html
Copyright © 2020-2023  润新知