java代码在内存后续(static)

前言

如果看这篇时候看不懂,可以先看BZ前面的一篇文章,请点击这里

内存

堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
为了更清楚地搞明白发生在运行时数据区里的黑幕,我们来准备2个小道具(2个非常简单的小程序)。
BZ发现了一篇博文对堆、栈、方法区有很好的解释点击跳转

static细节

类中

1.静态是随着类的加载就加载了,也是随着类的消失而消失了。
2.静态优于对象存在,被对象共享。
3.因为静态先存于内存中无法访问后来的对象的中的数据,所以
静态无法访问非静态。而且内部无法书写this.因为这时对象
有可能不存在,this 没有任何指向。

成员变量和静态变量

静态变量和成员变量的区别
1.所属范围不同。、
静态变量所属于类,成员变量所属对象。
静态变量也称为:类变量:成员变量也称为实例变量

2.调用不同。
静态变量可以被对象和类调用(一般都用类名调用)
成员变量只能被对象调用。
3.加载时期不同
静态变量随着类的加载而加载。
成员变量随着对象的加载而加载。
4.内存存储区域不同。
静态变量存储在方法区(数据共享区)中。
成员变量存储在堆内存中

了解内存,接下理我们就讲道理怎么个执行过程

class Circle{
private double radius;
pirvate static double pi = 3.14;
Cricle (double radius){
this.radius = radius;
}
double getArea(){
return radius*radius*pi;
}
static void show(){
System.out.println(“circle show run..”+pi);
}
}
class CircleDemo{
public static void main(String[] args){
Cricle c= new Circle(4);
c.getArea();
Circle.show();
}
}

运行命令

javac CircleDemo.java
java CircleDemo

  1. 当运行java CricleDemo时,就开始加载类
    加载到方法区(静态区),class CircleDemo
    class CircleDemo{
    CircleDemo{} //构造方法
    }
    当加载到有静态方法和变量时
    就又在方法区(数据共享区、静态区)创建了一个static空间
    CircleDemo{
    main(String[] args){}
    }
  2. 执行主函数(main),
    执行主函数(main),
    里面有new Circle(4);
    再次先加载class Circle(有static的话,同上)
    new 开辟空间,里面有 radius。(没有pi)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于从 PDF 文件中提取目录的问题,可以使用 Java 代码实现。具体实现步骤如下: 1.使用 Apache PDFBox 库解析 PDF 文件,将其读入内存中。 2.利用 PDFBox 提供的工具类 PDDocumentOutline,获取 PDF 文档的大纲信息,包括目录的标题、页码等。 3.遍历 PDF 文档的大纲信息,将其转换为目录树形结构,方便后续处理。 4.将目录信息写入到文本文件中,以便后续使用。 示例代码如下: ``` import java.io.File; import java.io.IOException; import org.apache.pdfbox.cos.COSDocument; import org.apache.pdfbox.exceptions.CryptographyException; import org.apache.pdfbox.exceptions.InvalidPasswordException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentOutline; import org.apache.pdfbox.pdmodel.PDOutlineItem; import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.PDFTextStripperByArea; public class ExtractPdfOutline { public static void main(String[] args) throws InvalidPasswordException, CryptographyException, IOException { File file = new File("example.pdf"); PDDocument document = PDDocument.load(file); PDDocumentOutline outline = document.getDocumentCatalog().getDocumentOutline(); if (outline != null) { PDOutlineItem root = outline.getFirstChild(); printTree(root, 0); } document.close(); } private static void printTree(PDOutlineItem item, int level) { for (int i = 0; i < level; i++) { System.out.print(" "); } System.out.println(item.getTitle() + " - " + item.getPageNumber()); PDOutlineItem child = item.getFirstChild(); while (child != null) { printTree(child, level + 1); child = child.getNextSibling(); } } } ``` 该代码会从当前目录下的 example.pdf 文件中提取目录,并输出目录树形结构。注意,在遍历目录时,可以将信息写入到文本文件中,以便后续使用。 希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值