zoukankan      html  css  js  c++  java
  • static关键字详解

    首先,要了解一下这些东西的存放位置

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

    还有补充的一点,有这样一个步骤:

    加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载

    一、静态内部类

    为什么只有静态内部类而没有静态外部类?

    答:因为Jvm的类加载器在加载类时,会判断是否有静态变量,静态方法,和静态内部类,如果存在,则将其加载到方法区(方法区中所有东西都只有一个,即不会重复),静态内部类的作用是可以在外部不需要实例化,而通过类名.内部类名直接调用,而外部静态类是没有必要的,因为static的作用时间是类加载时才被加载,而此时外部类已经在被加载,所以这种设计是没有必要的。

    二、静态变量,静态方法

    答:静态方法和静态变量都是在类加载的时候被载入方法区。

  • 相关阅读:
    memcached在大负载高并发网站上的应用(转)
    NHibernate in Action(序,前言,致谢)
    php 数据类型
    w3wp 备忘录
    EF实例化Context
    爬虫程序判断是否已抓URL
    NHibenate in Action(目录)
    C#中静态构造函数的学习
    webservice 无法在网页中进行测试问题
    汉诺塔问题C#
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/5865254.html
Copyright © 2011-2022 走看看