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