this关键字的使用8/22

实质就是:this代表当前对象目录:  1.this(name) 调用同一个类中参数为   public Person(String name)这个构造方法   2.this.say() 同一个类中,某一个方法调用非static的say()方法   3.this.name //当前对象的name属性   4.比较两个对象是否相等 first:进行地址比较  second:进行内容比较


class Person {
    private String name;
    private int age;
    /*至少保证一个没有this调用构造方法,保证递归调用的出口*/
    public Person() {
        System.out.println("*** 一个新的Person类对象被实例化******");
    }

    public Person(String name) {
        this(); // 调用无参构造
        this.name = name;
    }

    public Person(String name, int age) {
        this(name); // 调用有一个参数的构造,这句话调用的是灰色部分的函数
        this.age = age;
    } // setter、getter略

    /*自己写的*************************/
    public Person(double haha){
        System.out.println("只进行输出操作");
    }
    public Person(int age){
        this(10.21);
        this.age = 10;
        this.name="lcy";
    }
    /********************************/

    public String getInfo() {
        return "姓名:" + this.name + ",年龄:" + this.age;
    }
}

public class Test {
    public static void main(String args[]) {
        Person per = new Person("张三", 20);
        System.out.println(per.getInfo());

        *** 一个新的Person类对象被实例化******
        姓名:张三,年龄:20

        Person per1 = new Person("张四");
        System.out.println(per1.getInfo());

        *** 一个新的Person类对象被实例化******
        姓名:张四,年龄:0

        Person per2 = new Person(100000000);
        System.out.println(per2.getInfo());

        只进行输出操作
        姓名:lcy,年龄:10
    }
}
/**  相互调用构造方法在new对象的时候
    构造方法:调用其他构造使用“this()”调用。
    例如:现在一个类之中存在了三个构造方法(无参、有一个参数、有两个参数),
    但是不管使用何种构造方法,都要求在实例化对象产生的时候输出一行提示信息:
    “一个新的类对象被实例化”(假设这个信息等于50行代码)
 */
_________________________________________________________
this表示当前对象
当前对象指的是当前正在调用本类方法的操作对象,下面首先来验证一下。
class Demo {
    private int filed =100;
    public void say(){
        System.out.println(123456);
    }
    public void print() {
        System.out.println("当前对象:" + this);
        this.say();
        System.out.println(this.filed);
    }
}

public class Test {
    public static void main(String args[]) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
        System.out.println(demo1);
        demo1.print();
        System.out.println(demo2);
        demo2.print();

    }
}

[email protected]
当前对象:[email protected]
123456
100

[email protected]
当前对象:[email protected]
123456
100

程序中Person类中定义了一个compare方法,此方法的主要功能就是专门完成两个对象的比较操作,在比较时,首先进行地址的比较,如果两个对象的地址一样,则肯定是同一个对象,而如果地址不相等,则将一个个属性依次进行比较。对象比较操作在开发中是一个重要的概念,要重点掌握
class Person {
  private String name ;
  private int age ;
  public Person(String name,int age) {
  this.name = name ;
  this.age = age ;
}
// 一个类可以接收本类引用
// 接收完成之后可以直接调用本类中的私有操作
public boolean compare(Person per) {
if (per == null) {
return false ; // 直接返回false
}
if (this == per) { // 地址相同
return true ;
}
// 这样一来在compare()方法之中有两个对象:传入的Person,另外一个是this
if (this.name.equals(per.name)
&& this.age == per.age) {
return true ;
}
return false ; //其他情况
}
public void setName(String name) {
this.name = name ;
}
public void setAge(int age) {
this.age = age ;
}
public String getName() {
return this.name ;
}
public int getAge() {
return this.age ;
}
}
public class TestDemo {
public static void main(String args[]) {
Person per1 = new Person("张三",20) ;
Person per2 = new Person("张三",20) ;
if (per1.compare(per1)) {
System.out.println("是同一个对象。") ;
} else {
System.out.println("不是同一个对象。") ;
}
}
}
时间: 2024-12-21 04:09:16

this关键字的使用8/22的相关文章

Static(静态)关键字

通过函数改变内部属性的值: 1 <?php 2 3 class Human{ 4 public $name; 5 protected $height; 6 public $weight; 7 private $isHungry = true; 8 9 } 10 11 12 class NbaPlayer extends Human{ 13 14 public $team="Bull"; 15 public $playerNumber="23"; 16 17 p

Android应用开发工程师职业学习路线

描述 一个出色的Android开发工程师应该掌握哪些必要技能呢?我想应该掌握如下几个方面: 1. 语言基础,语言基础应该掌握C语言开发和Java语言开发,有人会问学习Android开发还要学习C语言吗?是这样的.Android底层是由C语言和C++来实现并运行Linux平台上,上层应用才是Java语言实现的,我们经常通过Java JNI的方式来调用C和C++,如果不会C语言就不知道如何使用JNI,如何调用底层C和C++实现 2. Android 基本组件及编程思想,虽然Android应用由Jav

StyleCop中有一些官方自己写好的检测规则下面就是英文的解释

在StyleCop中有一些官方自己写好的检测规则下面就是英文的解释 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释 3.SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释 4.SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的

StyleCop——默认的规则

在StyleCop中有一些官方自己写好的检测规则下面就是英文的解释 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释 3.SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释 4.SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的

【StyleCop】StyleCop规则汇总

所有规则的翻译(基于版本4.7.44.0): 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释 3.SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释 4.SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的关键字不能有错误) 5

JavaScript、Dom和jQuery

1 var obj=document.getElementById('t1') 2 3 obj.innerText 4 5 obj.innerHTML 1.javascript 插入代码如下: 1 <script type="text/javascript"> 2 var name="server"; //#局部变量 3 age=18; /*#全局变量*/ 4 //for 5 var names=['alex','tony','rain']; 6 for

StyleCop学习笔记——默认的规则

在StyleCop中有一些官方自己写好的检测规则下面就是英文的解释 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释 3.SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释 4.SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的

高德地图根据关键词坐标拾取小工具

今天早上在写代码的时候,需要用到地图坐标拾取工具,我们用的是搞的地图,在高德地图API官方网站中没有找到相关的坐标拾取工具.在网上找到这么个小工具,与大家分享下! CSS 1 html { background-color: #fff; } 2 body, div, h1, h2, h3, h4, ul, li, form, input, dl, dt, dd, p { margin: 0; padding: 0; font-family: 微软雅黑; } 3 h3 { +font-size:1

C#代码规范和质量检查工具

代码风格检查:StyleCop The StyleCop tool provides warnings that indicate style and consistency rule violations in C# code. The warnings are organized into rule areas such as documentation, layout, naming, ordering, readability, spacing, and so forth. Each w