精华内容
下载资源
问答
  • java this关键字的使用

    2021-04-09 17:07:27
    java this关键字的使用 /** * this关键字的使用 */ public class Student { //成员变量 private int sno; //学号 private String name; //姓名 private String sex; //性别 private double score; //分数 ...

    java this关键字的使用

    /**
     * this关键字的使用
     */
    public class Student {
        //成员变量
        private int sno;    //学号
        private String name;    //姓名
        private String sex;     //性别
        private double score;   //分数
    
        //构造方法
        public Student(){
        }
    
        public Student(int sno,String name,String sex){
            this.sno = sno;
            this.name = name;
            this.sex = sex;
        }
    
        public Student(int sno,String name,String sex,double score){
            this(sno,name,sex);
            this.score = score;
        }
    
        //成员方法
        public void study(){
            this.shout();
            shout();
            System.out.println("代码之路任重而道远!");
        }
    
        public void shout(){
            System.out.println("好好学习,天天向上!");
        }
    
        public void show(){
            System.out.println(sno+"\t"+this.name+"\t"+sex+"\t"+this.score);
        }
    
        public static void main(String[] args) {
            Student stu = new Student(7,"田七","男",100);
            stu.study();
            stu.shout();
            stu.show();
            Student stu2 = new Student();
        }
    }

    执行代码如下:

    展开全文
  • Java this 关键字的使用方法详解构造方法中的this关键字构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个类有多个构造方法,可以...

    Java this 关键字的使用方法详解

    构造方法中的this关键字

    构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个类有多个构造方法,可以在一个构造方法中通过this(paras…)来调用其他的构造方法。

    使用this来调用其他构造方法有如下几个约束。

    1) 只能在构造方法中通过this来调用其他构造方法,普通方法中不能使用。

    2) 不能通过this递归调用构造方法,即不能在一个构造方法中通过this直接或间接调用该构造方法本身。

    例如:

    class test {

    test() {

    this(1);

    }

    test(int a){

    this();

    }

    test(int a, int b) {

    this(1, 2);

    }

    }

    test()方法中调用了test(int)构造方法,而test(int)构造方法又调用了test()构造方法,构成递归调用。test(int, int)中调用了自身,也构成了递归调用。都是不允许的。

    3) 通过this调用其他构造方法必须放在构造方法的第一行中执行。由于super调用父类的构造函数也必须放在构造方法的第一行中执行,因此,通过this和super调用构造方法不能同时出现一个构造方法中。也不能在一个构造方法中多次调用不同的构造方法。

    在构造方法中也可以使用this关键字来访问本类中的成员变量和成员函数。其用法和非构造方法中的this关键字相同。

    非构造方法中的this关键字

    在Java中可以通过通过this关键字来调用类中的成员变量和方法。其用法是。

    1) this.xxx; 访问类中的成员变量xxx

    2) this.yyy(paras…); 访问类中的成员方法yyy

    3) this; 当前类对象的引用

    this关键字访问类的成员变量和成员函数时不受访问权限的控制,可以访问本类中所有的成员变量和方法,包括private的成员变量和方法。也可以通过this访问本类的static成员,不过由于static成员可以通过类名直接访问,如果通过this来访问会有“The static field ××× should be accessed in a static way”的警告信息。不能在类的static成员或static块中使用this。

    继承关系下的this关键字

    在继承关系下,父类中的this关键字并不总是表示父类中的变量和方法。this关键字的四种用法如前文所述,列举如下。

    1) this(paras…); 访问其他的构造方法

    2) this.xxx; 访问类中的成员变量xxx

    3) this.yyy(paras…); 访问类中的成员方法yyy

    4) this; 当前类对象的引用

    对第一种,无论子类是否有相同参数的构造方法,this(paras…);访问的始终是父类中的构造方法。

    对第二种,无论子类是否有覆盖了该成员变量,this.xxx;访问的始终是父类中的成员变量。

    对第三种,如果子类重写了该成员方法,则this.yyy(paras…);访问的是子类的成员方法,如果子类没有重写该成员方法,则this.yyy(paras…);访问的是父类的成员方法。

    对第四种,this始终代表的是子类的对象。

    例如:

    public class ClassTest {

    public static void main(String[] args) {

    Child child = new Child();

    child.show();

    }

    }

    class Parent {

    public String str;

    Parent(){

    this(1);

    }

    Parent(int a) {

    this.str = "Parent";

    this.show();

    }

    public void show() {

    System.out.println(this.str);

    }

    }

    class Child extends Parent {

    public String str;

    Child() {

    }

    Child(int a) {

    str = "Child";

    }

    public void show() {

    System.out.println(str);

    super.show();

    }

    }

    main()函数中有两条语句,new Child()和child.show()。

    第一条语句new Child()时要执行Child类的构造方法,但是Child类是Parent类的子类,因此会先执行Parent类的构造方法。Child类的无参构造函数中没有使用super和this来调用父类或本类中的其他的构造方法,因此会调用父类的无参构造函数。在父类的无参构造函数Parent()中调用了执行了this(1),此调用表示执行父类中有一个整数参数的构造方法,虽然子类中也有一个有一个整数参数的构造方法,但是并不会被执行。父类中有一个整数参数的构造方法执行this.str=”Parent”,这里的this.str代表的是父类中的成员变量str,虽然子类中也有一个成员变量str,但是并不会被赋值。将父类中的成员变量str赋值为”Parent”后,接着执行了this.show(),虽然父类中有一个show()方法,但由于子类重写了show()方法,所以this.show()执行的子类的show()方法。子类的show()方法首先执行了打印str的操作,此时打印的显然是子类中的str,子类的str没有被赋值,因为打印null。接着子类的show()方法执行了super.show(),即调用了父类的show()方法,在父类的show()方法中执行了打印this.str的操作,this.str同样代表父类中的成员变量str,因此打印”Parent”。

    第二条语句child.show()先是执行子类的show()方法,子类的show()先是打印了子类的str值(null),然后执行了父类的show()打印了父类的str值(”Parent”)。

    两条语句的打印结果为null, Parent, null, Parent。

    如果将第一条语句改为new Child(1),则执行的是子类的有一个整数参数的构造方法,仍然是先执行父类的无参构造方法,初始化父类的str为”Parent”,然后执行子类的show(),子类的show()打印子类的str值(null),然后执行父类的show(),父类show()打印父类的str值(”Parent”),然后执行子类的构造方法将子类的str初始化为”Child”。 第二条语句child.show()先是执行子类的show()方法,子类的show()先是打印了子类的str值(”Child”),然后执行了父类的show()打印了父类的str值(”Parent”)。

    两条语句的打印结果为null, Parent, Child, Parent。

    super和this的异同

    super在一个类中用来引用其父类的成员,它是在子类中访问父类成员的一个桥梁,并不是任何一个对象的引用,而this则表示当前类对象的引用。在代码中Object o = super;是错误的,Object o = this;则是允许的。

    super关键字的作用在于当子类中覆盖了父类的某个成员变量,或者重写了父类的某个成员方法时还能够访问到父类的成员变量和成员方法。如果子类中没有重写父类的成员变量和成员方法,则子类会继承父类的所有非private的成员变量和成员方法。这时在子类中无论通过this来访问成员和通过super来访问成员,结果都是一样的。

    super.getClass()和this.getClass()

    getClass()是Object类定义的一个final方法,所有Java类的getClass()都继承自Object类。如前文所述,如果子类没有重写父类的某个成员方法,那么通过super来访问还是还是通过this来访问结果都是一样的。因此,super.getClass()和this.getClass()结果是一样的。Object类的getClass()方法返回的是该对象的运行时类,一个对象的运行时类是该对象通过new创建时指定的类。因此,super.getClass()和this.getClass()返回的都是new对象时指定的类。

    例如:

    public class ClassConstructorTest {

    public static void main(String[] args) {

    Child child = new Child();

    child.show();

    }

    }

    class Parent {

    private Parent mSelf;

    Parent(){

    mSelf = this;

    }

    public void show() {

    System.out.println(this.getClass().getName());

    System.out.println(super.getClass().getName());

    System.out.println(mSelf.getClass().getName());

    }

    }

    class Child extends Parent {

    public void show() {

    System.out.println(this.getClass().getName());

    System.out.println(super.getClass().getName());

    super.show();

    }

    }

    打印的类名都是Child。

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • Java this关键字的使用

    2019-06-12 20:12:00
    this关键字主要使用在下面三种情况: 1.解决局部变量与成员变量同名问题; 2.解决方法参数与成员变量同名问题; 3.用来调用该类另一个构造方法。 特别注意:Java语言规定,this关键字只能用在非static方法...

    this关键字表示对象本身。

    this关键字主要使用在下面三种情况:

    1.解决局部变量与成员变量同名的问题;

    2.解决方法参数与成员变量同名的问题;

    3.用来调用该类的另一个构造方法。

    特别注意:Java语言规定,this关键字只能用在非static方法(实例方法和构造方法中),不能用在static方法中。

    一、局部变量与成员变量同名,此时局部变量会隐藏成员变量

    public Employee(String name, int age, double salary) {
            this.name = name;
            this.age = age;
            this.salary = salary;
        }

    二、方法参数与成员变量同名

    public void setName(String name) {
            this.name = name;
        }

    三、用来调用该类的另一个构造方法

     public Employee() {
            this("李明",25,3000);
    
        }

    注意:前提条件是:在同一个类中一个构造方法调用另一个构造方法。

       如果在构造方法中调用了另一个构造方法,则this语句必须是第一条语句。

    展开全文
  • 主要介绍了Java this 关键字的使用方法详解的相关资料,希望通过本文能帮助到大家,让大家彻底理解掌握这部分内容,需要的朋友可以参考下
  • Java提供了一个this关键字this关键字总是指向调用该方法对象。根据this出现位置不同,this作为对象默认引用有两种情形。构造器中引用该构造器正在初始化对象。在方法中引用调用该方法对象。this关键字...
    5a7f9af6d966acf42df71188d775b212.png

    Java提供了一个this关键字,this关键字总是指向调用该方法的对象。根据this出现的位置的不同,this作为对象的默认引用有两种情形。

    1. 构造器中引用该构造器正在初始化的对象。
    2. 在方法中引用调用该方法的对象。

    this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或者实例变量。假设定义了一个Person类,这个Person对象的eat()方法需要调用它的move()方法,则如何做呢?是否应该定义如下的Person类呢?

    public class Person {

    //定义一个move()方法

    public void move(){

    System.out.println("正在执行move()方法");

    }

    //定义一个eat()方法,eat()方法需要借助move()方法

    public void eat(){

    Person p = new Person();

    p.move();

    System.out.println("正在执行eat()方法");

    }

    public static void main(String[] args) {

    //创建Person对象

    Person p = new Person();

    //调用Person的eat()方法

    p.eat();

    }

    }

    运行结果为:

    正在执行move()方法

    正在执行eat()方法

    以上这种方式确实能够做到在eat()方法里调用move()方法,但从main()方法里的程序中可以看出,一共创建了两个对象:main()方法里创建一个对象;eat()方法里创建一个对象。可是真的需要创建两个对象吗?答案是否定的!因为当程序调用eat()方法时一定会提供一个Person对象,而不需要重新创建一个Person对象了。

    因此需要在eat()方法中获得调用该方法的对象,通过this关键字就可以满足这个需求。

    this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的类型只能是当前类:只有当这个方法被调用时,它所代表的对象才被确定下来:谁在调用这个方法,this就代表谁。

    将上面的Person类中的eat()方法改为一下这种方式更合适:

    //定义一个eat()方法,eat()方法需要借助move()方法

    public void eat(){

    //使用this引用调用eat()方法的对象

    this.move();

    System.out.println("正在执行eat()方法");

    }

    上述程序中eat()方法需要依赖于move()方法,现实中这种依赖情形非常常见,例如写字方法需要拿笔的方法,这种依赖都是同一个对象两个方法之间的依赖。因此,Java允许对象的的一个成员直接调用另一成员,可以省略this前缀。也就是说,上面的程序可以改为如下形式:

    public void eat(){

    move();

    System.out.println("正在执行eat()方法");

    }

    另外一种情形是:this关键字可用于构造器中作为默认引用,由于构造器是直接使用new关键字来调用,而不是使用对象来调用的,所以this在构造器中代表该构造器正在初始化的对象。例如下面的程序:

    public class Person {

    //定义一个名为age的成员变量

    public int age;

    //构造器

    public Person() {

    //在构造器里定义一个age变量

    int age = 0;

    //使用this代表该构造器正在初始化的对象

    //下面的代码将会把该构造器正在初始化的对象的age成员变量设为3

    this.age = 3;

    }

    public static void main(String[] args) {

    //使用new Person()创建的对象的age成员变量都将被设为3

    //下面代码输出3

    System.out.println(new Person().age);

    }

    }

    与普通方法类似的是,大部分时候,在构造器中访问其它成员变量和方法时都可以省略this前缀,但如果构造器中有一个与成员变量同名的局部变量,又必须在构造器中访问这个被覆盖的成员变量,则必须使用this前缀。如上面程序所示。

    当this作为对象的默认引用使用时,程序可以像访问普通引用变量一样来访问这个this引用,甚至可以把this当成普通方法的返回值。请看下面程序:

    public class Person {

    public int age;

    public Person grow() {

    age ++;

    return this;

    }

    public static void main(String[] args) {

    Person p = new Person();

    //可以连续调用同一个方法

    p.grow().grow().grow();

    System.out.println("p对象的age的值是:"+p.age);

    }

    }

    运行结果为:

    p对象的age的值是:3

    从上面的程序可以看出,如果在某个方法中把this作为返回值,则可以多次连续调用同一个方法,从而使得代码更加的简洁。但这种方式容易造成实际意义的模糊,例如上面的group()方法,用于表示对象的生长,即age变量的值加1,实际上不应该有返回值。

    最后需要强调一点:静态成员不能直接访问非静态成员,即static修饰的方法不能访问不适用static修饰的普通方法。对于static修饰的方法而言,可以使用类直接调用该方法,如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法中不能使用this引用。

    展开全文
  • * 当方法局部变量和类成员变量重名时候,根据就近原则,优先使用局部变量 * 如果需要访问本类中局部变量,需要使用格式 * this.成员变量名 */ public class Person { String name; //自己名字 //...
  • JAVA this关键字的使用

    2013-02-27 22:57:50
    this 指向内幕对象 */ class PersonDemo { public static void main(String[] args) { Person p = new Person("lisi",20); } } class Person { private String name; private int age
  • 按照官方正规的解释,this关键字的意义被解释为“指向当前对象的引用”。这个解释非常准确并且很精炼,但它太过学术化了,导致很多初学者有点读不懂,更谈不上深入理解它的意义。本文将用大白话的形式帮助初学Java的...
  • 大家好,我是乐字节小乐,从本文开始将会给大家讲述Java继承,一下是Java继承知识图谱:一、 this关键字在类方法定义中使用的this关键字代表使用该方法对象引用。this 即”自己”,代表对象本身,谁调用...
  • Java this 关键字的使用方法详解构造方法中的this关键字构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个类有多个构造方法,可以...
  • 1、当局部变量和成员变量重名时候,在方法中使用this表示成员变量以示区分实例:class Demo{String str = "这是成员变量";void fun(String str){System.out.println(str);System.out.println(this.str);this.str =...
  • java的学习中,当接触到类这一章时候,就会避免不了接触到this关键字。首先,this关键字指向是当前对象引用作用: this.属性名称 指是访问类中成员变量,用来区分成员变量和局部变量(重名问题) class ...
  • 回复《电子书》有我为大家特别筛选海量免费书籍资料this 也是Java一个关键字,在《Java编程思想》第四版第五章5.4小节对 this 关键字是这样介绍this 关键字只能在方法内部使用,表示对“调用方法那个...
  • 其次,在使用方法内属性时候,也包含了一个this关键字,可以使用也可以不使用。this可以看作一个变量,它值是当前对象引用。this关键字只能在方法内部使用,表示对“调用方法那个对象”...
  • Java this关键字的使用(在构造方法中)this还有另外一种用法,使用在构造方法第一行(只能出现在第一行,这是规定,记住就行),通过当前构造方法调用本类当中其它的构造方法,其目的是为了代码复用。调用时的语法格式...
  • 构造方法01构造方法构造方法:类中一种特殊方法,也叫构造器,可以对创建对象进行初始化。注意事项:构造方法没有返回值方法名必须与类名一致,可以重载不允许创建完对象后手动调用构造方法示例:一个类可以没有...
  • this关键字用来访问本类内容,super关键字用来访问父类内容。 用法: 1.在本类成员方法中,访问本类成员变量。 2.在本类成员方法中,访问另一个成员方法。 3.在本类构造方法中,访问本类另一个构造方法...
  • this关键字主要有三个应用: (1)this调用本类中属性,也就是类中成员变量; (2)this调用本类中其他方法; (3)this调用本类中其他构造方法,调用时要放在构造方法首行。应用一:引用成员变量Public Class ...
  • Java中, this关键字比较难理解,它作用和其词义很接近。 它在方法内部使用,即这个方法所属对象引用; 它在构造器内部使用,表示该构造器正在初始化对象。 this 可以调用类属性、方法和构造器 什么时候...
  • 今天在上课时,冉冉大妹纸拉着我问:小...不是吧,不是吧,听说你学了很久的Java,不会连this关键字都不知道吧!我:会啊,那还不简单,等我慢慢给你讲来(giao,把握住机会,加分项啊这可是,必须说出点什么)好了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,564
精华内容 1,825
热门标签
关键字:

javathis关键字的使用

java 订阅