static 关键字
这些都是java中比较基础的东西,在此记录一下算是自己掌握了的知识。基础不牢,地动山摇。学知识就像打仗一样,需要有很多的武将、谋士。我很喜欢新三国里面的曹操,他用人十分了得,并且胸怀大志,手下有许多精兵强将,文臣谋士,最终在乱世中取得一席之地。我把学知识掌握知识当成在招兵买马,每一个兵马将来必有它的用途。尤其喜欢赵云,有一句话说得好:子龙浑身都是胆,所以暂且把名字改成mc常山赵子龙. 哈哈哈哈....名字而已 不用过多在乎。好了,接下来谈谈对这个知识的理解吧!
static被称为静态修饰符。静态就是指:在编译后所分配的内存会一直存在,知道程序退出内存才会释放这个空间,只要程序在运行,那么这块内存就会一直存在。
在java中,static主要有四种使用情况:成员变量、成员方法、代码块和内部类。(static不能用来修饰局部变量)
1.成员变量:用static修饰的变量叫做静态变量,没用sattic修饰的变量叫实例变量。
静态变量属于类,静态变量所在类被加载的时候这个静态变量会被分配内存空间,就可以使用了。静态变量的使用方式有两种:"类.静态变量"和"对象.静态变量",一般常用“类.静态变量”。
实例变量属于对象。只有在对象被创建的时候才会被分配内存空间,才能被使用。它只能通过"对象.实例变量" 的方式引用。
2.成员方法:java中分为被static修饰的方法 和没有被static修饰的方法
用static修饰的方法是类方法,不需要创建实例就能调用,通过“类名.方法名”就可以调用。任何的实例也都可以调用。
而非static方法是对象的方法,只有对象被创建后才能使用。
static方法中,不能使用this和super关键字,不能调用非static方法。不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
3.static静态代码块:是在类中独立于成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,jvm加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照她们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
这里贴一个例子:
执行结果:4 1 3 2
分析:在执行开始,先要寻找到main方法,因为main方法是程序的入口,但是在执行main方法之前,必须先加载TestOne类,而在加载TestOne类的时候发现TestOne类继承自Base类,因此会转去先加载Base类,在加载Base类的时候,发现有static块,便执行了static块。在Base类加载完成之后,便继续加载TestOne类,然后发现TestOne类中也有static块,便执行static块。在加载完所需的类之后,便开始执行main方法。在main方法中执行new TestOne()的时候会先调用父类的构造器,然后再调用自身的构造器。
4.静态内部类:当一个内部类前面用static修饰时,我们称之为静态嵌套类或者说静态内部类。
在静态内部类中只可以访问外部类的静态变量和静态方法。如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。由于没有使用过静态内部类,具体的作用也是特别清楚,这里只是知道有这个东东。。。
内部类在Android中应用的非常多,学Android的必须要了解!
5.关于static的一些用法和例子:
单例设计模式:
static一个很重要的用途就是实现单例设计模式。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:
static和final一块用表示什么?
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!对于变量,表示一旦给值就不可修改,并且通过类名可以访问。对于方法,表示不可覆盖,并且可以通过类名直接访问。
static和private一块用表示什么?
private 修饰的只能本类中使用,而static修饰的所有类共享
所以 表示该变量或方法只能在当前这个类中带有static修饰的静态函数中被调用。
差不多就这些吧。。。。如果面试的时候被问到static的问题, 回答了以上四点应该说算是比较好的回答了 加油吧!O(∩_∩)O~ 努力!