tem como eu saber em qual versão eu compilei o meu codigo?
[]´s.
Olá
Anote a caneta na palma da mão! :lol:
Brincadeirinha, use o valor da propriedade java.class.version. Converta este valor para float.
JDK 1.1 --> 45.3
JDK 1.2 --> 46.0
JDK 1.3 --> 47.0
JDK 1.4 --> 48.0
JDK 1.5 --> 49.0
Teste você mesmo:
[code]
import java.util.Properties;
public class ClassVersion {
public static void main(String[] args) throws Exception {
System.out.println(System.getProperty("java.class.version"));
System.out.println(System.getProperty("java.vendor"));
System.out.println(System.getProperty("java.vendor.url"));
System.out.println(System.getProperty("java.version"));
}
}[/code]
Veja mais detalhes em The JavaTM Virtual Machine Specification, CHAPTER 4 The class File Format
[]s
Luca
Na verdade, isso retorna o maior número de versão do formato .class que a VM em execução consegue executar, ou seja, não tem nada a ver com a versão do .class sendo executado.
O jeito de ver isso seria usar algum editor de .class ou fazer um utilitário usando BCEL ou ASM pra extrair isso do bytecode.
Olá
Acho que não entenderam a brincadeira muito menos o link que passei…
[]s
Luca
Olá
Conforme reforcei no post anterior, a resposta da questão estava no link que postei. Mandei testar a propriedade da jvm para ficar claro que a resposta não serviria.
Bem, no link a gente lê que o número grande da versão está no oitavo byte do arquivo .class. Se pode testar isto com facilidade com um programinha como o seguinte que fiz também de brincadeira na hora do almoço:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Luca
*
*/
public class ClassVersion {
public static void main(String[] args) {
if (args.length != 1)
System.out.println("\nUso: ClassVersion qqcoisa.class");
else {
try {
System.out.println("\nVersao da classe = " + version(args[0]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
public static String version(String arq) throws IOException {
/*
JDK 1.1 --> 45.3
JDK 1.2 --> 46.0
JDK 1.3 --> 47.0
JDK 1.4 --> 48.0
JDK 1.5 --> 49.0
*/
InputStream is = new FileInputStream(new File(arq));
byte[] bytes = new byte[8];
is.read(bytes, 0, 8);
is.close();
String versao = null;
switch (bytes[7]) {
case 45:
versao = "1.1";
break;
case 46:
versao = "1.2";
break;
case 47:
versao = "1.3";
break;
case 48:
versao = "1.4";
break;
case 49:
versao = "5.0";
break;
case 50:
versao = "Mustang?";
break;
}
return versao;
}
}
[]s
Luca
Olá
Há algo estranho com a classe que inclui no post anterior. Há uma máquina aqui que quando uso o j2sdk1.4.2_07 para compilar e não uso a opção -target 1.4 (ou 1.3), ela está colocando 0x1E no byte 8 e isto seria 46 = j2sdk 1.2. Não estou entendendo o porque e também não tenho tempo para verificar isto. Mas fica o alerta.
[]s
Luca