miracle just wanna be better

Static静态分析

2019-10-31


layout: post title: static subtitle:
date: 2019-10-31 categories: 面试题 author: miracle catalog: true tags: - static关键字 —

static关键字会修饰java类,方法,变量,代码块方法

static关键字基本概念

方便在没有创建对象的情况下调用
被static关键字修饰的不需要创建对象调用,直接通过类名就可以去访问.

static关键字修饰类

java中static一般用来修饰成员变量或函数.有一种特殊用法使用static修饰内部类,普通类不允许声明为static,只有内部类才行.

public class TestStatic {
	public static class InnerClass{
		InnerClass(){
			System.out.println("------------静态内部类----------");
		}
		public void InnerMethod(){
			System.out.println("------------静态内部方法---------");
		}
	}
	public static void main(String[] args) {
		//直接通过StaticTest类名访问静态内部类InnerClass
		InnerClass inner=new TestStatic.InnerClass();
		//静态内部类可以和普通类一样使用
		inner.InnerMethod();
	}
}

如果没有static修饰,只能先new出外部类对象,通过外部类new出内部类对象

static修饰方法

可以通过类名来调用

public class StaticMethod {
	public static void test(){
		System.out.println("-------静态方法-------");
	}
	public static void main(String[] args) {
		StaticMethod.test();
	}
}

static修饰变量

被static修饰的成员变量叫做静态变量,或类变量,说明这个变量是属于这个类的,而不是属于对象,没有被static修饰的成员变量叫做实例变量,说明这个变量属于某个具体的对象

static修饰代码块

类初始化的顺序

  • 父类静态变量
  • 父类静态代码块
  • 子类静态变量
  • 子类静态代码块
  • 父类普通变量
  • 父类普通代码块
  • 父类构造函数
  • 子类普通变量
  • 子类普通代码块
  • 子类构造函数

深入分析static

静态变量存放在方法区中,是被所有线程共享的

堆区:

  1. 存储的全部都是对象,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令)
  2. jvm只有一个堆区(heap)是被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区:
  3. 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用,对象都存放在堆区中
  4. 每个栈中的数据都是私有的,其他栈不能访问
  5. 栈分为3部分:基本类型变量区,执行环境上下文,操作指令区 方法区:
  6. 又叫静态区,跟堆一样,被所有线程共享.方法区包含所有的class和static变量
  7. 方法区中包含的都是在整个程序中永远唯一的元素,如class和static变量

调用

堆内存中的成员变量随着对象的消失而消失,静态变量是所有线程共享,所以不会消失.

特点:

  1. static是一个修饰符,用于修饰成员.static修饰的成员变量称为静态变量
  2. static修饰的成员被所有的对象共享
  3. static优先于对象存在,static的成员随着类加载就存在
  4. static修饰的成员可以类名直接调用
  5. static修饰的数据是共享数据

成员变量和静态变量的区别

  1. 生命周期不同

成员变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失消失

  1. 调用方式不同

成员变量只能被对象调用,静态变量可以被对象和类名调用

  1. 数据存储位置不同

成员变量存储在堆的对象中
静态变量存储在方法区的静态区

注意

  1. 静态方法只能访问静态成员(非静态既可以访问静态,也可以访问非静态)
  2. 静态方法中不可以使用this或super
  3. 主函数是静态的

下一篇 注解

Comments

Content