this 关键字
什么是this
java虚拟机会给每个对象分配this,代表当前对象。
使用this解决前面变量命名问题
public class ss{
public static void main(String[] args){
Dog p1=new Dog("aaa",9);
p1.info();
}
}
class Dog {
String name;
int age;
//如果我们构造器的形参,能够直接写成属性名,就更好了
//但是出现了一个问题,根据变量的作用域原则
//构造器的name是局部变量,而不是属性
//构造器的age是局部变量,而不是属性
//==>引出this关键字来解决
public Dog(String name,int age){//构造器
//this.name就是当前对象的属性name
this.name = name;//谁在调用这个构造器,this就是谁的对象
//this.age就是当前对象的属性age
this.age = age;
}
public void info(){//成员方法,输出属性X信息
System.out.println(name + "\t" + age + "\t");
}
}
简单地说,哪个对象调用,this就代表哪个对象。
通过hashcode来验证
public class ss{
public static void main(String[] args){
Dog dog1 = new Dog("大狗",3);
System.out.println("dog1的hashcode=" + dog1.hashCode());
//dog1调用了info()方法
dog1.info();
}
}
class Dog{
public String name;
public int age;
public Dog(String name, int in_age){
this.name = name;
this.age = in_age;
}
public void info() {
System.out.println(this.name + "\t" + this.age
+"\t"+"当前对象的hashCode是:"+ this.hashCode());
}
}//使用hashCode()看看对象的情况
this的注意事项和使用细节
- this关键字可以用来访问本类的属性、方法、构造器
- this用于区分当前类的属性和局部变量
- 访问成员方法的语法:this.方法名(参数列表);
- 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
- this不能在类定义的外部使用,只能在类定义的方法中使用。
public class ss{
public static void main(String[] args){
T t1 = new T();
t1.f2();
T t2= new T();
t2.f3();
}
}
class T{
String name ="Jack";
int num= 100;
//细节:访问成员方法的语法:this:方法名(参数列表);
//注意只能在构造器中使用(即只能在构造器中访问另外一个构造器)
//注意︰访问构造器语法:this(参数列表);必须放置第一条语句
//4
public T(){
//这里去访问 T(String name,int age)构造器
this("jack",100);
System.out.println( "T()构造器");
}
public T(String name,int age){
System.out.println("T(String name,int age)构造器");
}
//this关键字可以用来访问本类的属性
public void f3(){
//传统方式,就近原则 此处访问的是当前局部变量
//如果 此处添加 String name="smith" 那么此处便会输出Smith
System.out.println( "name=" + name + " num=" +num);
//也可以使用this访问属性
System.out.println("name=" + this.name + " num=" + this.num);
}
//3
public void f1(){
System.out.println("f1() 方法..");
}
public void f2() {
System.out.println("f2() 方法..");
//调用本类的f1
//第一种方式
f1();
//第二种方式
this.f1();
}
}
定义Person类,里面有name、age属性,并提供compareTo比较方法,
用于判断是否和另一个人相等,提供测试类TestPerson用于测试,
名字和年龄完全一样,就返回true,否则返回false
public class TestPerson{
public static void main(String[] args){
Person p1 = new Person( "mary",20);
Person p2 = new Person( "mary", 0);
System.out.println("p1和p2比较的结果="+ p1.compareTo(p2));
}
}
/*定义Person类,里面有name、age属性,并提供compareTo比较方法,
用于判断是否和另一个人相等,提供测试类TestPerson用于测试,
名字和年龄完全一样,就返回true,否则返回false
*/
class Person{
String name;
int age;
//构造器
public Person(String name,int age){
this.name = name;
this.age = age;
}
//compareTo比较方法
public boolean compareTo( Person p){//p2传入p
//名字和年龄完全一样
// if(this.name.equals(p.name) && this.age == p.age){
//return true;
// }else {
//return false;
// }
return this.name.equals(p.name)&& this.age == p.age;
}
}