mw91816

天行健,君子以自强不息

导航

java关键字

一. static

用法: 是一个修饰符,用于修饰成员(成员变量,成员函数)--> 类,方法,块,字段

    当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调:类名.静态成员

存在: 方法区,共享区,数据区(非堆内存、栈内存的另一个存储区),Static块

  static{     

    //代码   

  }

  Static块 仅在该类被加载时被执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行

特点: 

  1,生命周期属于类级别,随着类的加载而加载,也就是说静态会随着类的消失而消失(直到JVM关闭),说明他的生命周期最长

  2,只加载一次,优先于对象的存在(静态先存在,对象后存在。)

  3,全局唯一,被所有对象所共享,任何一次的修改都是全局性的影响,

  4,可以直接被类名调用,使用方式上可以不依赖于实例对象 --> 方便在没有创建对象的情况下来进行调用(方法/变量)

  5,静态方法的使用效率比非静态方法的效率高

  6,在静态方法中不能访问类的非静态成员变量和非静态成员方法

 

  由于静态static不依赖于任何对象就可以进行访问,因此对于静态来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。

并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

非静态方法既可以访问静态也可以访问非静态。

  内部类中不能存在static修饰的成员,因为static随着类加载产生,内部类依附于宿主类,系统加载:宿主类-->静态-->内部类,而内部类的静态是随着

内部类加载产生,与加载类就加载static矛盾,所以内部类中不能存在static修饰.

 

 

二. synchronized

指" 这是 被锁住(同步)的, 同一时刻只有一个'人'能用 "

用法: 是一个修饰符,用于修饰 1.对象  2.方法  3.块{...} 

  1. 同步普通的方法,锁的是当前类的实例对象 this.

    private synchronized void test() { }

  2. 同步静态方法,锁的是当前类的字节码对象 Class.

    private synchronized static void test2() { }

  3. 同步块(方法内的锁),锁的是 {} 中的指定的对象。

    private synchronized void test3() {  synchronized (TestSynchr.class) { }  }

特点: 使代码变得"先来后到", 即 同一时间内只有一个线程能够访问被锁/被同步的代码,而且只有当该线程执行完代码后,其他线程才能继续访问

 

 

三. final

指"这是不可变的"

用法: 是一个修饰符,用于修饰 1. 类,  2. 方法 3.变量 4.方法参数

特点:

  1. 当修饰类时, 被修饰的类不能被继承, (因为继承会可能改变父类方法或属性)

  2. 当修饰方法时, 被修饰的方法不能被重写 (重写/覆盖: 子类和父类即同名同参)

  3. 当修饰变量时, 被修饰的属性不能被重新赋值, 只能赋值一次, 是个常量

       4. 当修饰的变量为引用变量时, 只限定了引用变量的引用不可变,即不能指向其他对象,但是引用的对象的值是可以被重新赋值的,

   即只能限定引用对象,而无法限定引用对象的值

  5. 当修饰参数时, 被修饰的参数在方法内不能被重新赋值

 

static和final一块用表示什么 ?
static final用来修饰成员变量和成员方法,在内存中只占据一段不能改变的存储空间, 可简单理解为"全局常量"
1. 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 
2. 对于方法,表示不可覆盖,并且可以通过类名直接访问。

 

 

四. volatile

 

五. this

posted on 2018-12-21 23:36  mw91816  阅读(87)  评论(0编辑  收藏  举报