目录一. static 的基本介绍二. static 修饰成员变量三. static 修饰方法四. static 的注意事项一. static 的基本介绍static 是Java语言中一个非常重要的关键字static 表示静态是Java中的一个修饰符可以修饰成员方法成员变量。二. static 修饰成员变量被 static 修饰的成员变量被称为静态变量一旦被 static 修饰那么该变量会有以下特点1被该类创建的所有对象共享2它不属于对象而是属于该类但可以被该类的对象调用3随着类的加载而加载优于对象存在我们知道static 静态方法是随着类的加载而加载的同样 static 静态变量也是一样随着静态方法而加载并且一同加载到方法区(元空间)。JVM内存主要分方法区虚拟机栈本地方法栈 程序计数器堆五部分static 修饰的静态方法或变量都会加载到方法区想进一步了解的同学可以看我的另一篇文章浅谈JVM内存模型与GC垃圾回收_程序猿ZhangSir的博客-CSDN博客https://blog.csdn.net/m0_70325779/article/details/132622805?spm1001.2014.3001.5501对我们而言则需要着重了解方法区堆虚拟机栈 这三部分这也是面试JVM内存模型常常被问到的知识点堆主要存放对象虚拟机栈运行我们的程序将所需要的方法和方法的局部变量依次进栈出栈方法区存放静态方法信息(修饰符、方法名、返回值、参数等)以及类的所有信息在JDK8以前静态变量和静态方法都存放在方法区中而在JDK8以后将静态变量移入堆中并在堆中单独开辟了一处空间叫静态区专门用来存放静态变量。静态变量和静态方法它会随着类的字节码文件加载而立刻加载到堆中的静态区这也就是为什么静态变量是优先于对象存在因为它在类加载之后马上就会跟着加载到堆中的静态区静态变量被该类所有对象共享那么所有对象都可以调用使用该静态变量调用方式主要分为两种1类名.静态变量(推荐使用的调用方式)2对象.静态变量(这种方法也可以但不推荐)因为静态变量是属于类的不属于某一个对象所有因此使用 类名.静态变量 的调用方式在逻辑上更说得通反之 对象.静态变量 这种调用方式就不太好逻辑上说不通但也可以这样调用。三. static 修饰方法static 不仅可以修饰的成员变量也可以修饰方法一旦方法被 static 修饰那么它就叫静态方法静态方法有以下特点1多用在测试类和工具类中2JavaBean类中很少使用调用方法也很简单如果在静态方法所在的类调用则直接写方法名即可调用如果是调用别的类中的静态方法则可以使用 类名.方法名 的方式调用四. static 的注意事项1静态方法中只能访问静态方法或者静态变量2非静态方法可以访问静态变量和静态方法也可以访问非静态的成员变量和非静态的成员方法3静态方法中没有 this 关键字我们应该知道在成员方法中其实都是有一个隐含的 this 的这个 this 指向调用者的地址值在成员方法中我们可以通过 this 获取到调用此方法的变量的地址值从而获取相应的属性。但是在静态方法中由于静态方法是共享的它不属于某一个对象因此在静态方法中是没有 this 这一概念的。这也是为什么在静态方法中不能调用非静态变量的原因。静态变量和静态方法是在字节码加载之后就马上直接加载到JVM内存中只有静态变量和静态方法加载完成此时对象还尚未创建自然不可以调用对象和对象的相关属性而静态变量与静态方法是一同加载的可以互相调用
static 关键字的用法?
目录一. static 的基本介绍二. static 修饰成员变量三. static 修饰方法四. static 的注意事项一. static 的基本介绍static 是Java语言中一个非常重要的关键字static 表示静态是Java中的一个修饰符可以修饰成员方法成员变量。二. static 修饰成员变量被 static 修饰的成员变量被称为静态变量一旦被 static 修饰那么该变量会有以下特点1被该类创建的所有对象共享2它不属于对象而是属于该类但可以被该类的对象调用3随着类的加载而加载优于对象存在我们知道static 静态方法是随着类的加载而加载的同样 static 静态变量也是一样随着静态方法而加载并且一同加载到方法区(元空间)。JVM内存主要分方法区虚拟机栈本地方法栈 程序计数器堆五部分static 修饰的静态方法或变量都会加载到方法区想进一步了解的同学可以看我的另一篇文章浅谈JVM内存模型与GC垃圾回收_程序猿ZhangSir的博客-CSDN博客https://blog.csdn.net/m0_70325779/article/details/132622805?spm1001.2014.3001.5501对我们而言则需要着重了解方法区堆虚拟机栈 这三部分这也是面试JVM内存模型常常被问到的知识点堆主要存放对象虚拟机栈运行我们的程序将所需要的方法和方法的局部变量依次进栈出栈方法区存放静态方法信息(修饰符、方法名、返回值、参数等)以及类的所有信息在JDK8以前静态变量和静态方法都存放在方法区中而在JDK8以后将静态变量移入堆中并在堆中单独开辟了一处空间叫静态区专门用来存放静态变量。静态变量和静态方法它会随着类的字节码文件加载而立刻加载到堆中的静态区这也就是为什么静态变量是优先于对象存在因为它在类加载之后马上就会跟着加载到堆中的静态区静态变量被该类所有对象共享那么所有对象都可以调用使用该静态变量调用方式主要分为两种1类名.静态变量(推荐使用的调用方式)2对象.静态变量(这种方法也可以但不推荐)因为静态变量是属于类的不属于某一个对象所有因此使用 类名.静态变量 的调用方式在逻辑上更说得通反之 对象.静态变量 这种调用方式就不太好逻辑上说不通但也可以这样调用。三. static 修饰方法static 不仅可以修饰的成员变量也可以修饰方法一旦方法被 static 修饰那么它就叫静态方法静态方法有以下特点1多用在测试类和工具类中2JavaBean类中很少使用调用方法也很简单如果在静态方法所在的类调用则直接写方法名即可调用如果是调用别的类中的静态方法则可以使用 类名.方法名 的方式调用四. static 的注意事项1静态方法中只能访问静态方法或者静态变量2非静态方法可以访问静态变量和静态方法也可以访问非静态的成员变量和非静态的成员方法3静态方法中没有 this 关键字我们应该知道在成员方法中其实都是有一个隐含的 this 的这个 this 指向调用者的地址值在成员方法中我们可以通过 this 获取到调用此方法的变量的地址值从而获取相应的属性。但是在静态方法中由于静态方法是共享的它不属于某一个对象因此在静态方法中是没有 this 这一概念的。这也是为什么在静态方法中不能调用非静态变量的原因。静态变量和静态方法是在字节码加载之后就马上直接加载到JVM内存中只有静态变量和静态方法加载完成此时对象还尚未创建自然不可以调用对象和对象的相关属性而静态变量与静态方法是一同加载的可以互相调用