this可以:
观察一段程序
class Person{
private String name ;
private int age ;
public Person(){}
public Person(String n,int a){
name = n ;
age = a ;
}
public String getInfo(){
return "Name is " + name + " Age is " + age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
分析:当前类中的构造方法的核心目的在于:为类中的name
和age
两个属性进行初始化。
public Person(String n,int a)
中的n
和a
究竟是什么? public Person(String name,int age){
name = name ;
age = age ;
}
this
。class Person{
private String name ;
private int age ;
// this.属性:当前对象(方法)中的属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getInfo(){
return "Name is " + this.name + " Age is " + this.age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
class Person{
private String name ;
private int age ;
public Person(){}
public Person(String name,int age){
setName(name) ;
setAge(age) ;
}
// this.属性:当前对象(方法)中的属性
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public String getInfo(){
return "Name is " + this.name + " Age is " + this.age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
/*
Person per = new Person() ;
per.getName("Dexter") ;
per.getAge(20) ;
System.out.println(per.getInfo()) ;
// 或者
Person per = new Person("Dexter",20) ;
System.out.println(per.getInfo()) ;
*/
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
众所周知,类的方法有:
class Person{
private String name ;
private int age ;
// this.属性:当前对象(方法)中的属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
this.print() ; // 本类的普通方法不加也不影响使用,但是好的习惯是加上
}
public void print(){
System.out.println("调用本类普通方法") ;
}
public String getInfo(){
return "Name is " + this.name + " Age is " + this.age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
class Person{
private String name ;
private int age ;
// 现在希望不管调用哪个构造方法都要求执行一段信息输出
public Person(){ //
System.out.println("调用本类构造方法") ;
}
public Person(String name){
this.name = name ;
System.out.println("调用本类构造方法") ;
}
public Person(String name,int age){
this.name = name ;
this.age = age ;
System.out.println("调用本类构造方法") ;
}
public String getInfo(){
return "Name is " + this.name + " Age is " + this.age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
System.out.println(new Person().getInfo()) ;
System.out.println(new Person("Dexter").getInfo()) ;
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
class Person{
private String name ;
private int age ;
// 现在希望不管调用哪个构造方法都要求执行一段信息输出
public Person(){ //
System.out.println("调用本类构造方法") ;
}
public Person(String name){
this() ; // 调用本类的无参构造
this.name = name ;
}
public Person(String name,int age){
this(name) ; // 调用本类的一个参数构造
this.age = age ;
}
public String getInfo(){
return "Name is " + this.name + " Age is " + this.age ;
}
}
public class ThisDemo {
public static void main(String args[]) {
System.out.println(new Person().getInfo()) ;
System.out.println(new Person("Dexter").getInfo()) ;
System.out.println(new Person("Dexter",20).getInfo()) ;
}
}
this()
的调用必须是构造器中的第一个语句。this()
调用构造方法的时候请留有出口。
this()
调用别的构造方法,否则会产生递归构造器调用。在一个类的使用中肯定会产生若干个对象,程序类不会记住具体有多少个对象产生了,它唯一可能知道的就是当前正在操作本类的对象是哪一个。
范例:观察当前对象
class Person{
}
public class ThisDemo {
public static void main(String args[]) {
Person per1 = new Person() ;
System.out.println("【main方法】" + per1) ;
}
}
class Person{
public void method() {
System.out.println("【方法】" + this) ;
}
}
public class ThisDemo {
public static void main(String args[]) {
Person per1 = new Person() ;
System.out.println("【main方法】" + per1) ;
per1.method() ; // per1这个对象调用了method()方法,则this = per1
System.out.println("***********************") ;
Person per2 = new Person() ;
System.out.println("【main方法】" + per2) ;
per2.method() ; // per2这个对象调用了method()方法,则this = per2
System.out.println("***********************") ;
}
}
阿里云【名师课堂】Java面向对象开发35 ~ 37:this关键字
原文:https://www.cnblogs.com/playerone/p/13081832.html