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

posted @ 2020-05-09 18:37  徐阶  阅读(178)  评论(0编辑  收藏  举报