zoukankan      html  css  js  c++  java
  • java中this 和 super关键字的作用

    emmmmmm也真的是好久没有写过java了,
    因为项目需要, 最近又必须重新拾起来了,虽然好多东西也都忘得差不多了....

    然后发现 竟然把super和this傻傻分不清....

    开个帖子记录一下:

    一、this关键字主要有三个应用:

     (1)this调用本类中的属性,也就是类中的成员变量;
     (2)this调用本类中的其他方法;
     (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。


     应用一
    1 Public Class Student { 
    2  int age; //定义一个成员变量int
    3  private void SetAge(int name) { //定义一个参数(局部变量)int
    4   this.age=age; //将局部变量的值传递给成员变量
    5  }
    6 }  
     

         这时候,我们程序有俩name  作为区分,this.name的强调是特指局部变量的name

    而我们通过this.name=name  来表示  将成员变量传递给局部变量

    应用二:调用类的构造方法
    
    1 public class Student { //定义一个类,类的名字为student。 
    2  public Student() { //定义一个方法,名字与类相同故为构造方法
    3   this(“Hello!”);
    4  }
    5  public Student(String name) { //定义一个带形式参数的构造方法
    6  }
    7 }
    this关键字除了可以调用成员变量之外,还可以调用构造方法。
    在一个Java类中,其方法可以分为成员方法和构造方法两种。
    构造方法是一个与类同名的方法,在Java类中必须存在一个构造方法。
    如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时候会自动添加一个没有形式参数的构造方法。
    这个构造方法跟普通的成员方法还是有很多不同的地方。
    如构造方法一律是没有返回值的,而且也不用void关键字来说明这个构造方法没有返回值。
    而普通的方法可以有返回值、也可以没有返回值,程序员可以根据自己的需要来定义。不过如果普通的方法没有返回值的话,
    那么一定要在方法定义的时候采用void关键字来进行说明。其次构造方法的名字有严格的要求,即必须与类的名字相同。
    也就是说,Java编译器发现有个方法与类的名字相同才把其当作构造方法来对待。
    而对于普通方法的话,则要求不能够与类的名字相同,而且多个成员方法不能够采用相同的名字。在一个类中可以存在多个构造方法,这些构造方法都采用相同的名字,只是形式参数不同。
    Java语言就凭形式参数不同来判断调用那个构造方法。 在上面这段代码中,定义了两个构造方法,一个带参数,另一个没有带参数。
    构造方法都不会有返回值,不过由于构造方法的特殊性,为此不必要在构造方法定义时带上void关键字来说明这个问题。
    在第一个没有带参数的构造方法中,使用了this(“Hello!”)这句代码,这句代码表示什么含义呢?在构造方法中使this关键字表示调用类中的构造方法。
    如果一个类中有多个构造方法,因为其名字都相同,跟类名一致,那么这个this到底是调用哪个构造方法呢?
    其实,这跟采用其他方法引用构造方法一样,都是通过形式参数来调用构造方法的。如上例中,this关键字后面加上了一个参数,那么就表示其引用的是带参数的构造方法。
    如果现在有三个构造方法,分别为不带参数、带一个参数、带两个参数。那么Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。从上面示例中可以看出,this关键字不仅可以用来引用成员变量,而且还可以用来引用构造方法。 不过如果要使用这种方式来调用构造方法的话,有一个语法上的限制。
    一般来说,利用this关键字来调用构造方法,只有在无参数构造方法中第一句使用this调用有参数的构造方法。否则的话,翻译的时候,就会有错误信息。这跟引用成员变量不同。如果引用成员变量的话,this关键字是没有位置上的限制的。如果不熟悉这个限制的话,那么还是老老实实的采用传统的构造方法调用方式为好。虽然比较麻烦,但是至少不会出错。
  • 相关阅读:
    ECMall模板开发文档
    ECmall错误:Call to a member function get_users_count() on a non-object
    剖析ECMALL的登录机制
    分析ECMall的注册与登录机制
    ECMall的MySQL数据调用的简单方法
    ECMall系统请求跳转分析
    Ecmall系统自带的分页功能
    ECMall注册机制简要分析
    [Ecmall]ECMALL目录结构设置与数据库表
    [ecmall]Ecmall 后台添加模板编辑区
  • 原文地址:https://www.cnblogs.com/EEEE1/p/8352870.html
Copyright © 2011-2022 走看看