this关键字主要有三个作用

1.调用本类中的属性。

 public class TextThis {
public static void main(String[] args){
Person p1 = new Person();
p1.getInfo();
}
} class Person{
String name;
int age;
public Person(String n, int a){
name = n;
age = a;
}
public String getInfo(){
System.out.println();
return null;
}
}

上述程序可以正常运行,但是构造方法中形参名称对于我们来说不便于识别,那我们可不可以这样呢?

 public class TextThis {
public static void main(String[] args){
Person p1 = new Person();
p1.getInfo();
}
} class Person{
String name;
int age;
public Person(String name, int age){ //将形参名称和类中属性名称一致,这样可以便于我们识别。
name = name; //但是这个程序可以正常运行吗?显然是不能的,这个里的
age = age; //name = name 都是形参变量本身,相当于自己给自己赋值
} //这是不行的。
public String getInfo(){
System.out.println();
return null;
}
}

这时我们就以用this关键字来实现在构造方法中调用类的属性。

 public class TextThis {
public static void main(String[] args){
Person p1 = new Person();
p1.getInfo();
}
} class Person{
String name;
int age;
public Person(String name, int age){
this.name = name; //name起来么加了this就代表这个属性是类中的属性,后面的name是形参。
this.age = age; //这样就没有问题了
}
public String getInfo(){
System.out.println();
return null;
}
}

2.调用构造方法。

例如

 public class TextThis {
public static void main(String[] args){
Person p1 = new Person("hcf", 21);
p1.getInfo();
}
} class Person{
String name;
int age;
public Person(){
System.out.println("调用了无参的构造方法Person()"); //无参的构造方法被调用就会打印出此语句。
}
public Person(String name, int age){
this(); //通过this()调用无参的构造方法。
this.name = name; //此代码运行完我们会发现,打印出了“调用了无参的构造方法...”
this.age = age; /说明我们实现了通过this()调用了构造方法。
}
public String getInfo(){
System.out.println(name +"\n" + age);
return null;
}
}

3.代表当前对象

 public class TextThis {
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1); //打印p1的地址
p1.getInfo(); //调用p1中的getInfo()方法,打印当前this的地址
System.out.println(p2); //打印p2的地址
p2.getInfo(); //调用p2中的getInfo()方法,打印当前this的地址。 }
} class Person{
public String getInfo(){
System.out.println(this); //this代表当前对象,例如调用p1.getInfo()方法,此时打印的this就是p1
return null; //同理,调用p2.getInfo()方法,打印的this就是p2.
} //所以该代码运行后,p1和p1.getInfo();输出的结果是相同的,
} //p2和P2.getInfo()方法输出的结果也是相同的。

1.5(java学习笔记)this关键字的更多相关文章

  1. Java学习笔记18---final关键字修饰变量、方法及类

    英语里final这个单词大家都知道是"最终的"意思,其实还有一个意思是"不可更改的".在Java里,final关键字作"不可更改的"来解释更 ...

  2. Java学习笔记——static关键字与静态的使用方法

    static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ...

  3. java学习笔记11-static关键字

    如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...

  4. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  7. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  10. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

随机推荐

  1. 定时导出用户数据(expdp,impdp)

    一 定时导出数据: #!/bin/bash############################################################################### ...

  2. 移动端去掉a标签点击时出现的背景

    之前做移动端的Portal时,手机上测试,点击a标签总是出现一个背景框 在CSS中添加 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);就可以了 a:act ...

  3. 解读dbcp自动重连那些事

    转载自:http://agapple.iteye.com/blog/791943 可以后另一篇做对比:http://agapple.iteye.com/blog/772507 同样的内容,不同的描述方 ...

  4. javascript实现瀑布流效果(固定宽度)

    HTML代码: <div id="content"> <div class="box"> <div class="img ...

  5. 粉刷匠(bzoj 1296)

    Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...

  6. 【洛谷 P4168】[Violet]蒲公英(分块)

    题目链接 题目大意:给定\(n\)个数和\(m\)个求区间众数的询问,强制在线 这题我\(debug\)了整整一个下午啊..-_- 从14:30~16:45终于\(debug\)出来了,\(debug ...

  7. bzoj 1060 贪心

    设根到每个叶子节点的距离为dis,比较容易的看出来,我们需要把这颗树的所有叶子节点的值都变成其中最大的内个,我们设为max,那么对于一颗子树来说,设其中dis值最大的为x,我们需要将这个子树根节点和子 ...

  8. 查询ubuntu系统版本相关信息

    查询ubuntu系统版本相关信息 sky@sky-virtual-machine:~$ cat /etc/issueUbuntu 12.04.5 LTS \n \l proc目录下记录的当前系统运行的 ...

  9. Linux内核设计与实现读书笔记(8)-内核同步方法【转】

    转自:http://blog.chinaunix.net/uid-10469829-id-2953001.html 1.原子操作可以保证指令以原子的方式执行——执行过程不被打断.内核提供了两组原子操作 ...

  10. Android系统是一个基于BInder通信的C/S架构

    Android系统基本上可以看作是一个基于Binder通信的C/S架构.他有服务器端和客户端.比如自己开发一个程序,肯定是基于Activity的而Activity就是作为客户端,他的服务器端就是Act ...