博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的静态内部类
阅读量:6803 次
发布时间:2019-06-26

本文共 1579 字,大约阅读时间需要 5 分钟。

  hot3.png

    在学静态内部类的时候产生了一个疑问,静态内部类到底存放在哪里了?

    Java中的内存有一块地址叫静态代码区所有静态类都是放在这里的,静态类随JVM启动后就在那,不会说程序停止了,它就被垃圾回收器回收,而new是实例化的命令,它会在java中的内存中的堆区,创建一个对象,注意它们的位置,一个是在静态代码区,一个是在堆区,new出来的对象,一旦程序运行完,它就会被垃圾回收器回收。

    下面解释下静态代码区

    首先看下方法区(代码区)

    方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。

    方法区存放的信息包括:

      1 类的基本信息:

  •     每个类的全限定名
  •     每个类的直接超类的全限定名(可约束类型转换)
  •     该类是类还是接口
  •     该类型的访问修饰符
  •     直接超接口的全限定名的有序列表

    2 已装载类的详细信息:

  1. 运行时常量池:

    在方法区中,每个类型都对应一个常量池,存放该类型所用到的所有常量,常量池中存储了诸如文字字符串、final变量值、类名和方法名常量。它们以数组形式通过索引被访问,是外部调用与类联系及类型对象化的桥梁。(存的可能是个普通的字符串,然后经过常量池解析,则变成指向某个类的引用)

  2. 字段信息:

    字段信息存放类中声明的每一个字段的信息,包括字段的名、类型、修饰符。

    字段名称指的是类或接口的实例变量或类变量,字段的描述符是一个指示字段的类型的字符串,如private A a=null;则a为字段名,A为描述符,private为修饰符

  3. 方法信息:

    类中声明的每一个方法的信息,包括方法名、返回值类型、参数类型、修饰符、异常、方法的字节码。

    (在编译的时候,就已经将方法的局部变量、操作数栈大小等确定并存放在字节码中,在装载的时候,随着类一起装入方法区。)

在运行时,JVM从常量池中获得符号引用,然后在运行时解析成引用项的实际地址,最后通过常量池中的全限定名、方法和字段描述符,把当前类或接口中的代码与其它类或接口中的代码联系起来。
  1. 静态变量:

    这个没什么好说的,就是类变量,类的所有实例都共享,我们只需知道,在方法区有个静态区,静态区专门存放静态变量和静态块。

  2. 到类classloader的引用:到该类的类装载器的引用。
  3. 到类class的引用:虚拟机为每一个被装载的类型创建一个class实例,用来代表这个被装载的类。

 

  由此我们可以知道反射的基础:

在装载类的时候,加入方法区中的所有信息,最后都会形成Class类的实例,代表这个被装载的类。方法区中的所有的信息,都是可以通过这个Class类对象反射得到。我们知道对象是类的实例,类是相同结构的对象的一种抽象。同类的各个对象之间,其实是拥有相同的结构(属性),拥有相同的功能(方法),各个对象的区别只在于属性值的不同。
    同样的,我们所有的类,其实都是Class类的实例,他们都拥有相同的结构-----Field数组、Method数组。而各个类中的属性都是Field属性的一个具体属性值,方法都是Method属性的一个具体属性值。

 

在运行时,JVM从常量池中获得符号引用,然后在运行时解析成引用项的实际地址,最后通过常量池中的全限定名、方法和字段描述符,把当前类或接口中的代码与其它类或接口中的代码联系起来。

参考资料:

1.http://zhidao.baidu.com/link?url=fPFHee1b0yBDxwi3-FCjhkliA-qtprLjqtcqDiTZM5k-G3Q3YynS4kK5Jj5C1PvTSGnBSr52-9KjhLYjQnZx1_

2.http://blog.csdn.net/peterwin1987/article/details/7571808

转载于:https://my.oschina.net/hosee/blog/416657

你可能感兴趣的文章
MDSF:如何使用GMF来做TOGAF建模工具
查看>>
Spring Security简介
查看>>
打造一流的研发中心
查看>>
MCollective架构篇3-Puppet插件的部署及测试
查看>>
配置GNS使用CRT连接
查看>>
Java:集合类性能分析
查看>>
cms无法登陆
查看>>
JavaScript中事件处理
查看>>
VSTO 向office文档中插入内容
查看>>
【百度地图API】关于如何进行城市切换的三种方式
查看>>
How to provide highlighting with Spring data elasticsearch
查看>>
MongoDB 游标
查看>>
即将搭载人工智能芯片的华为Mate10,究竟会为业界带来什么?
查看>>
Android实现登录小demo
查看>>
AgentWeb是基于Android WebView一个功能完善小型浏览器库
查看>>
开放数据中心联盟推8个云计算应用模型
查看>>
学习数据分析的“里程碑”是什么?
查看>>
数据科学与DevOps之间的差距还有救吗?
查看>>
信息化一周回顾:金融业大数据十大趋势
查看>>
Http、TCP/IP协议与Socket之间的区别
查看>>