gpt4 book ai didi

java - 如何消除原始类型并不使用局部变量

转载 作者:行者123 更新时间:2023-12-01 11:22:57 24 4
gpt4 key购买 nike

我有一个简单的示例代码:

class Test {
void method(boolean boo){
String b;
int a=0;
try
{
java.awt.image.BufferedImage image=null;
new Thread().sleep(1000);
javax.swing.JOptionPane.showMessageDialog(null,"test");
java.io.File file=new java.io.File("C:\\file.png");
boolean boo=file.exists();
if(boo==true)
image=javax.imageio.ImageIO.read(file);
}
catch(InterruptedException e){}
}
}

基本上我必须使用 BCEL 来访问字节代码并达到我的目标。所以,我尝试创建简单的代码:

import org.apache.bcel.Repository;
import org.apache.bcel.classfile.*;

class javap
{
public static void main(String[]args)
{
try
{
JavaClass jc = Repository.lookupClass("Test");
ConstantPool constantPool = jc.getConstantPool();
Method [] method=jc.getMethods();
for (Method m : method)
{
LocalVariableTable lvt=m.getLocalVariableTable();
LocalVariable[] lv=lvt.getLocalVariableTable();
for(LocalVariable l : lv)
{
System.out.println(l.getName()+" : "+l.getSignature());
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

结果:

local variable : this --> LTest;
local variable : image --> Ljava/awt/image/BufferedImage;
local variable : file --> Ljava/io/File;
local variable : boo --> Z
local variable : ex --> Ljava/lang/Exception;
local variable : this --> LTest;
local variable : a --> I

如何消除已检索到的基本类型,例如 a 作为 intboo 作为 boolean 检索,以及如何检索未使用的局部变量,例如 String b

-谢谢-

最佳答案

关于检索未使用的局部变量:我运行了您的代码,我发现 LocalVariableTable 似乎不包含未使用的字符串。当我通过初始化“使用”它时,该变量将被添加到表中。我搜索并根据this thread JIT(或者可能是编译器?因为它是创建字节码的人)优化代码并从字节码中完全删除未使用的 var。

关于java - 如何消除原始类型并不使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com