• Java关键字--static,this,final,super(持续更新)


    this , static

    1.没有static关键字的方法被称为“实例方法”,没有static关键字的变量被称为“实例变量”,要想访问“实例变量”,必须通过“引用”的方式

    2.this是一个引用,this是一个变量,this变量保存了内存地址指向自身,this存储在JVM堆内存Java对象空间的内部(类似于python中的self,C语言中指向自身结构体的指针)

    3.每一个对象中都有一个this变量,100个Java对象中有100个this变量,每一个都不同

    4.this可以出现在“实例方法”当中,this指向当前正在执行这个动作的对象。(this代表当前对象,其内存存储的是当前对象在堆内存中的地址)

    5.this在多数情况下可以省略不写

    6.this不能使用在带有static关键字的方法中,this也不能使用在main方法中(如果要在main方法中调用”实例方法“或”实例变量“,请参考6)

    7.在带有static关键字的方法中不能”直接“访问“实例变量”和“实例方法”,会报错

      --如何在带有static关键字的方法中访问“实例变量”和调用“实例方法”呢?

        *先创建对象(new),通过引用来调用”实例方法“和”实例变量“

          具体可参阅:http://www.bubuko.com/infodetail-1147449.html?__cf_chl_jschl_tk__=e171f5d8831389c23982da9712a863c1ee6a4c51-1589014713-0-AZXihhcs0HbIfFgvYPt_0FNc_i7LwoQOLQfhoPaXY5aBgjb1Tr-JTlPQ6qmNjq9AizVHc-hkPwo4c8ySnGQmIoLdkCiYtYE29iZ1-_oP7uRG0lysjqYpdJPY8SG23HR_6vMioaH7al7-tfDOlwukBD4UcWP74-zL7MTt80PIHexb1HlP6i05ekYdpcFlMXyhJiti5GlmfO9Kedb4Iart3J2Iha-SV_yL-oTUE60aqFhJHRz5sJ9HgxGF1BtpN6ek-8FUBrVL0q7Vjv2qO9PDHtDnaAtaCXJVN1knnOiFu7EN_UauoZ5zuoZCBnWAXr9-Yw

        *可以理解为带有static关键字的方法中连this都没有,何谈this所指向的对象中含有的实例变量和实例方法

    8.所谓main方法,其实是由Java JVM来调用的方法,是多米诺骨牌的第一张牌。例如在Java中JVM是这样调用的:(假设类名是ThisTest)

      ThisTest . main ( String[ ] ) (因为main方法有static修饰符,直接调用即可)

    9.this可以用在哪里:

      1.可以使用在实例方法中,代表当前对象【语法格式:this . 】

      2.可以使用在构造方法中,在当前的构造方法中调用其他的构造方法【语法格式:this(实参);】

        *this()这种语法只能出现在构造函数第一行

    10.所有static修饰的所有元素都是类级别的特征,和具体的对象无关。可以用“ 类名 . ”的方式访问,当然也可以用引用 . 的方式访问(myeclipse会警告,不推荐这样使用)。如果通过引用 . 的方式来访问static相关元素,哪怕引用所指向的是null,也不会引发空指针异常的错误。因此访问静态的数据不需要对象的存在。

    11.什么时候成员变量声明为实例变量呢?

      --所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化。【不同对象的这个属性具体的值不同】。此时,开辟的变量是在堆内存对象的内部

    12.什么时候成员变量声明为静态变量呢?

      --所有对象都有这个属性,并且所有对象的这个属性的值是一样的,建议定义为静态变量,以节省内存开销。

        *静态变量在类加载的时候初始化,内存在方法区中内存中开辟。访问的时候不需要创建对象,直接使用“ 类名 . 静态变量名”的方式进行访问

    final

    转载自:https://blog.csdn.net/u012723673/article/details/80580011

      *注:1,实例变量有默认值 + final修饰的变量一旦赋值不能重新赋值

          综合考虑,Java语言最终规定实例变量使用final修饰之后,必须手动赋值,不能采用系统默认值。

        2,final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为“常量”。Java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接。比如:GUO_JI

          这是考虑了final不可二次赋值,static修饰的变量会储存在方法区内存中,

        3,final修饰的引用类型,该引用不可以指向其他的Java对象。但是final修饰的引用,该引用指向的对象的属性是可以修改的。换言之,final其实只是将字面值和变量进行绑定。

        4,java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接。比如说“国籍”,写法为:“GUO_JI”

    super

    1.super不是引用类型,super中存储的不是内存地址,super指向的也不是父类对象。

    2.super代表的是当前子类对象中的父类型特征。(可以理解为子类对象中包含的父类对象)

    3.super可以用在什么地方?

      成员方法和构造方法

    成员方法中的使用:

      语法:super . 方法名

    构造方法中的使用:

      语法(实参);

      作用:通过子类的构造方法去调用父类的构造方法。

      语法规则:一个构造方法第一行如果没有this( ) ;也没有显示的去调用super( );系统会默认调用super( ) (所以在Java中只要是创建Java对象,如果不写构造方法也不继承父类,那么程序其实是会隐晦地去执行调用object基类中的无参数构造方法)

      注意:&1.  super(......);和this(......)不能共存

          &2. super(......);和this(......)一样,只能放在构造方法的第一行;

          &3. super(......);调用了父类中的构造方法,但是并不会创建父类对象

    4.补充阅读:

      https://blog.csdn.net/u012518665/article/details/80353225

  • 相关阅读:
    内存警告
    倒影效果
    设计模式六大原则
    设计模式
    GCD线程
    字符串颜色值转换
    下划线按钮
    电池栏上弹窗
    项目发布相关
    UINib xib加载
  • 原文地址:https://www.cnblogs.com/RosemaryJie/p/12859415.html
Copyright © 2020-2023  润新知