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

Java基础_0309:this关键字的更多相关文章

  1. Java基础-标识符与关键字

    Java基础-标识符与关键字 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是标识符 标识符就是程序员在编写程序时,给类,变量,方法等起的名字. 二.标识符的命名规则 1& ...

  2. Java基础语法(1)-关键字与保留字

    title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...

  3. Java基础系列--static关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...

  4. Java基础(五) final关键字浅析

    前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提 ...

  5. 【Java基础】final关键字总结

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  6. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量 ...

  7. 03 java 基础:注释 关键字 标识符 JShell

    Java 10 中已有 Jshell 工具,方便用户在其中直接输入相关 java 代码. 注释:java 中分为单行注释 //   多行注释 /*   */   文档注释 /**  */ 关键字:在 ...

  8. java基础之super关键字

    一.在java里面,对于super关键字通常有两种用法: 1. 用在子类的构造方法里(初始化用),主要是调用父类的默认构造方法,如果父类有不止一个构造方法,可以通过super指定具体的构造函数,比如 ...

  9. 【Java基础】static关键字相关

    static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用thi ...

随机推荐

  1. B1018. 锤子剪刀布

    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N( ...

  2. TestNg 9. 参数化测试-DataProvider参数化

    首先利用@DataProvider(name = "XXX")的属性,将name的值XXX 传递给 @Test(dataProvider = "XXX") 看以 ...

  3. 漫谈php框架之中间件

    市面上常见的php框架有很多,最近因为有技术需求,所以对常见的php框架的中间件进行了一些了解.各个框架尽管在目标上对php框架的定义大同小异,但是在实现方式上却各有不同,且看下文: 定义 首先什么是 ...

  4. okhttp 内网可以有,但外网访问数据返不回来,代码一样

    :1.问题点在于 下图红框里写成 text/html了,需要改成application/json,造成的问题有:unexpected end of stream  这个是406错误:加上日志之后okh ...

  5. Error:Failed to resolve: :Base:

    这个问题是变通了一下,原来是: //implementation(name: "Base", ext: "aar") 修改成: implementation f ...

  6. Httpclient超时timeout设置

    一:连接超时:connectionTimeout 1:指的是连接一个url的连接等待时间. 二:读取数据超时:soTimeout 1:指的是连接上一个url,获取response的返回等待时间. Fo ...

  7. Js封装的动画函数实现轮播图

    ---恢复内容开始--- 效果图说明:当鼠标移到哪一个按钮上的时候会自动跳转到某一张图片上,并且按钮会以高亮显示 项目目录结构 用到的js封装的animate()动画         function ...

  8. win命令大全

    Windows系统:开始--运行--命令大全 Nslookup-------IP地址侦测器                       explorer-------打开资源管理器 logoff--- ...

  9. python异步编程之asyncio(百万并发)

      前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板,如最 ...

  10. IDEA常用快捷键整理(Mac OS X版本)

    最近eclipse把我弄疯了!各种提示没有!烦,果断用了IDEA. 一.前提 IDEA版本:IntelliJ IDEA 15.0.3 Keymaps:Mac OS X 二.视图切换快捷键 1.cmd ...