java的static和final关键字

在做面试题的时候,发现经常遇到static和final相关的问题,虽然不是很难,但有时候总是容易搞混,现在再重新记录一下。

static关键字

在java中,被static修饰的变量叫做静态变量(类变量),方法叫做静态方法。这些实例和方法被类的所有实例所共享。
常常容易搞混的是静态变量和实例变量,那么这两者的区别在于:
1.静态变量实质是一个全局变量,在类加载的时候,在内存中分配一个内存空间存放该静态变量,那么该类的所有实例都可以操作这个内存空间,即所有实例共享此静态变量。可以直接通过类名来访问,也可以用类实例来访问但不推荐。
2.对于实例变量,每创建一个实例,就会为实例变量分配一个内存,而这些实例变量在内存中是互不影响的。

static方法不能调用非静态成员:在Java中,静态方法不能调用非静态方法、以及应用非静态成员变量,因为在java中,被static修饰的方法和类变量,是先于实例变量存在的,那么当类没有初始化时,就不存在实例变量,也就没有分配内存了。

非静态方法可以调用静态方法:实例化后的方法,通过对象自身可以引用静态方法。

在static方法中不能使用this:因为this是类对象的自身引用,需要类初始化类对象之后才能引用,即实例化后分配内存之后才可以使用this。
static方法必须是实现的,即不能被abstract修饰。
所有java的main方法必须是static的,这样在未初始化才能被外部调用。
Note:类未实例化时,需要访问类的内部方法的时候,可以使用java的反射机制

final关键字

1.final修饰的方法不能被重写
2.final修饰的变量不能被修改
3.final变量只能被赋值一次。

对于被static和final同时修饰的变量,可以理解为全局变量,通过类名可以直接访问,方法则不能被重写,可以直接访问。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 455评论 0 0
  • Java关键字final 在设计程序时,出于效率或者设计的原因,有时候希望某些数据是不可改变的。这时候可以使用fi...
    狮_子歌歌阅读 757评论 1 4
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,686评论 0 11
  • 杭州高温天气终于告一段落,下午和越同学办好事情,正好在龙翔桥附近。遂商量西湖边骑自行车。所以临时又注册了摩拜单车,...
    我在左你靠右阅读 424评论 0 4