1.5(java学习笔记)this关键字
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关键字的更多相关文章
- Java学习笔记18---final关键字修饰变量、方法及类
英语里final这个单词大家都知道是"最终的"意思,其实还有一个意思是"不可更改的".在Java里,final关键字作"不可更改的"来解释更 ...
- Java学习笔记——static关键字与静态的使用方法
static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ...
- java学习笔记11-static关键字
如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
随机推荐
- B. Light It Up 思维题
Recently, you bought a brand new smart lamp with programming features. At first, you set up a schedu ...
- Virtualization solutions on Linux systems - KVM and VirtualBox
Introduction Virtualization packages are means for users to run various operating systems without &q ...
- java三
1,深复制与浅复制 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 深复制:被复制对象 ...
- BZOJ 4514: [Sdoi2016]数字配对
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1606 Solved: 608[Submit][Statu ...
- Vijos 1232 核电站问题
核电站问题 描述 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 现在,请你计算:对于给定的N和M,求不发生爆炸的放置核物 ...
- Django【进阶】序列化
关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 方案一:serializers 1 2 3 4 5 fromdjango.cor ...
- 链接加载文件gcc __attribute__ section
在阅读源代码的过程中,发现一个头文件有引用: /** The address of the first device table entry. */ extern device_t devices[] ...
- RabbitMQ消息队列(五): 主题分发
1. 主题(Topics): fanout模式只能进行简单的广播,direct模式虽然在过滤上进行了一定的提升,但是不能支持复杂的条件, 比如我们的日志消息,现在不仅要知道消息级别,也要知道消息来源. ...
- [ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- 使用echarts展示线状图信息的时候数据部分数据因为x轴的数据显示不全而隐藏的问题
在使用echarts来展示数据时,因为数据很多的原因导致x轴显示不全,然后有些数据也隐藏在图表中,所以这个时候我们要在 series 中设置一个属性,让所有的数据都能够展示出来,这里我们需要添加的属性 ...