package yyy;
//使用this调用本类中的成员变量和成员方法
//使用this返回当前对象的引用
//1.可以使用this调用本类的构造方法
//没有使用this
public class Testc{
public static void main(String[] args) {
Person per=new Person();
System.out.println(per.getInfo());
}
}
class Person {
private String name; // 定义name属性
private int age; // 定义age属性
public Person(){
System.out.println("新对象实例化");
}
public Person(String name){
System.out.println("新对象实例化");
this.name=name;
}
public Person(String name,int age){
System.out.println("新对象实例化");
this.name=name;
this.age=age;
}
public String getInfo() {
return "姓名:" + this.name + ",年龄:" + this.age;
}
}
//使用this 1、在使用this关键字调用其他构造方法的时候,this语句只能放在构造方法的首行。
// 2、在使用this调用本类的其他构造方法的时候,至少有1个构造方法不能用this调用,否则会出现递归调用错误。
class Person{ // 定义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 ;// 为类中的age属性赋值
}
public String getInfo(){ // 取得信息的方法
return "姓名:" + name + ",年龄:" + age ;
}
}
public class Testc{
public static void main(String args[]){
Person per1 = new Person("张三",33) ; // 调用构造实例化对象
System.out.println(per1.getInfo()) ; // 取得信息
}
}
//this表示当前对象 ,表示正在调用方法的对象
class Person {
public String getInfo() {
System.out.println("Person类 --> " + this); // 直接打印this
return null ; // 此处返回null,为的是让语法不出错
}
}
public class Testc {
public static void main(String[] args) {
Person per1 = new Person() ;
Person per2 = new Person() ;
System.out.println("MAIN方法 --> " + per1); // 直接打印对象
per1.getInfo() ;
System.out.println("--------------------------") ;
System.out.println("MAIN方法 --> " + per2); // 直接打印对象
per2.getInfo() ;
}
}
//this作为返回值
//当this作为对象的默认引用使用时,程序可以像访问普通引用变量一样来访问这个this引用,
//甚至可以把this当成普通方法的返回。
class Person {
int age;
public Person grow(){
age++;
return this;
}
}
public class Testc{
public static void main(String[] args){
Person per = new Person();
per.age = 100;
per.grow().grow(); //可以连续调用同一方法
System.out.println("age属性值是:" + per.age);
}
}
//对象比较
//生成两个对象,当两个对象中的姓名和年龄完全相等时,则认为对象是相等的。
//String本身就是一个类,若要比较相等,则要判断内容是否相同,必须用equals()方法,
//而age是int型,所以直接用“==”完成。
public class Testc{
public static void main(String args[]){
Person per1 = new Person(“张三”,30) ;
Person per2 = new Person(“张三”,30) ;
// 直接在主方法中依次取得各个属性进行比较
if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
System.out.println("两个对象相等!") ;
}else{
System.out.println("两个对象不相等!") ;
}
}
}
//如果地址相等,则两个对象相等,如果地址不相等,则依次判断每个属性的内容是否相等来判断两个对象是否相等。
public boolean compare(Person per){
// 调用此方法时里面存在两个对象:当前对象、传入的对象
Person p1 = this ; // 当前的对象,就表示per1
Person p2 = per ; // 传递进来的对象,就表示per2
if(p1==p2){ // 判断是不是同一个对象,用地址比较
return true ;
}
// 之后分别判断每一个属性是否相等
if(p1.name.equals(p2.name)&&p1.age==p2.age){
return true ; // 两个对象相等
}else{
return false ; // 两个对象不相等
}
}
public class Testc{
public static void main(String args[]){
Person per1 = new Person(“张三”,30) ; // 声明两个对象,内容完全相等
Person per2 = new Person(“张三”,30) ; // 声明两个对象,内容完全相等
// 直接在主方法中依次取得各个属性进行比较
if(per1.compare(per2)){
System.out.println("两个对象相等!") ;
}else{
System.out.println("两个对象不相等!") ;
}
}
}
this关键字的作用 使用this调用其他构造方法 使用this表示当前对象
最新推荐文章于 2023-02-15 15:37:13 发布