一、static

static关键字的作用可以用一句话描述,即:方便在没有创建对象的情况下进行调用,包括变量和方法。

1、如果在声明变量的时候使用了static关键字,那么这个变量被称为静态变量。静态变量只在类加载的时候获取一次内存空间,这使得静态变量很节省内存空间。

package com.example.rookie.staticdemo;

/**
 * @author 
 * @date 2021/9/7 10:58
 */
public class Student {

    //姓名
    private String name;

    //年龄
    private int age;

    //学校名称
    //private String school = "理工大学";

    private static String school = "理工大学";
}

假设理工大学录取一万名新生,那么在创建一万个Student对象的时候,所有字段(name、age、school)都会获取到一块内存,学生的姓名和年纪不尽相同,但都属于理工大学,如果每创建一个对象,school这个字段都要占用一块内存的话就很浪费,因此最好将schoo字段设置为static,这样就只占用一块内存,而不是一万块。

 2、成员变量、静态变量

package com.example.rookie.staticdemo;

/**
 * @author
 * @date 2021/9/7 11:10
 */
public class Counter {

    private int count = 0;

    public Counter() {
        count++;
        System.out.println(count);
    }

    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        Counter c3 = new Counter();
    }
}

我们创建一个成员变量count,并在构造函数中让它自增,因为成员变量会在创建对象的时候获取内存,因此每一个对象都会有一个count的副本, count值不会随着对象的增多而递增。

 输出结果:

java 方法加锁 静态变量 java定义静态变量的关键字_内存空间

package com.example.rookie.staticdemo;

/**
 * @author
 * @date 2021/9/7 11:15
 */
public class StaticCounter {

    private static int count = 0;

    public StaticCounter() {
        count++;
        System.out.println(count);
    }

    public static void main(String[] args) {
        StaticCounter s1 = new StaticCounter();
        StaticCounter s2 = new StaticCounter();
        StaticCounter s3 = new StaticCounter();
    }
}

由于静态变量只会获取一次内存空间,所以任何对象对它的修改都会得到保留,所以每创建一个对象,count的值就会加1. 

 

java 方法加锁 静态变量 java定义静态变量的关键字_java 方法加锁 静态变量_02

 三、this、super

package com.example.rookie.staticdemo;

/**
 * @author
 * @date 2021/9/7 16:27
 */
public class ThisMethod {

    void out() {
        System.out.println("Hello Word!");
    }

    ThisMethod getResult() {
        return this;
    }

    public static void main(String[] args) {
        ThisMethod tm = new ThisMethod();
        tm.getResult().out();
    }
}

输出结果为:

java 方法加锁 静态变量 java定义静态变量的关键字_内存空间_03

getResult()方法返回了this关键字,指向的是new ThisMethod()这个对象,所以可以紧接着调用out()方法,达到了链式调用的目的,也是this关键字非常经典的一种用法。        

 需要注意的是:this关键字作为方法的返回值的时候,方法的返回类型为类的类型。

四、final

被final修饰的变量无法重新赋值,换句话说,final变量一旦初始化,就无法更改。 

被final修饰的方法无法被重写。

被final修饰的类无法被继承,假如这个类的一些方法存在一些问题的话,我们就无法通过重写的方式去修复它。

final修饰的成员变量必须有一个默认值,否则编译器会提醒没有初始化。

 final和static一起修饰的成员变量叫做常量,常量名必须大写。

private static final String NAME = "TEST";

五、instanceof

判断对象是否符合指定的类型,结果要么为true,要么为false。

通常我们是这样使用操作符的:

package com.example.rookie.demo;

/**
 * @author
 * @date 2021/9/8 9:20
 */
public class InstanceofDemo {

    public static void main(String[] args) {
        Object obj = "sdada";
        //先判断类型
        if (obj instanceof String) {
            //然后强制转换
            String s = (String) obj;
            //然后才能使用
        }
    }
}