移动互联网市场运营推广策划案
static关键字
当一个变量前面有了static这个修饰符,内存会为它分配唯一的一块存储空间。
程序跑起来的时候,变量就存在在内存里了。谁要用它,就去访问一下它所在的内存。
1.修饰
public class Test {
public void update(){
System.out.println(\"update\");
}
public static class InnerClass{
public static void add(){
System.out.println(\"============= 内部类 静态add方法=============\");
}
public void delete(){
System.out.println(\"============= 内部类 delete方法 =============\");
}
}
public static void main(String args){
Test.InnerClass.add();
InnerClass innerClass = new Test.InnerClass();
innerClass.delete();
Test test =new Test();
test.update();
}
}2.修饰方法;
3.修饰变量常量;
4.静态代码块;
static特点:
1,随着类的加载而加载,也就是说静态会随着类的消失而消失,说明他的生命周期最长
2,优先于对象的存在。(静态先存在,对象后存在。)
3,被所有对象所共享
4,可以直接被类名调用
静态类作用:
1.静态类。常见形式作为一般工具类
2.缓存:提前将数据保存到对象中,其实就是加载到内存中,提高效率
3.计数,统计相关的应用
在多线程中使用静态方法是否有线程安全问题?
在多线程中使用同一个静态方法时,每个线程使用各自的实例字段(instance field)的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用实例字段(instance field),不会引起安全性问题。但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问的方式进行安全处理。
静态方法如果没有使用静态变量,则没有线程安全问题。
因为静态方法内声明的变量,每个线程调用时,都会新创建一份,而不会共用一个存储单元。比如这里的tmp,每个线程都会创建自己的一份,因此不会有线程安全问题;
静态变量,由于是在类加载时占用一个存储区,每个线程都是共用这个存储区的,所以如果在静态方法里使用了静态变量,这就会有线程安全问题
final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。
final的特点
1 .final修饰类不可以被继承,但是可以继承其他类。
2.l final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。
3.l final修饰的变量称为常量,这些变量只能赋值一次。
4.l 引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改。