Est-il possible de construire un extrait de code en Java qui ferait une hypothétique `` indétectable ?
Pensées qui viennent à l’esprit sont en utilisant par exemple intercepteurs ou la programmation orientée aspect.
Est-il possible de construire un extrait de code en Java qui ferait une hypothétique `` indétectable ?
Pensées qui viennent à l’esprit sont en utilisant par exemple intercepteurs ou la programmation orientée aspect.
Je n'ai pas essayé, donc je ne sais pas si la JVM et à restreindre quelque chose comme cela, mais peut-être que vous pouvez compiler le code qui jette ChuckNorrisException
, mais au moment de l'exécution de fournir une définition de classe d' ChuckNorrisException
qui ne s'étend pas à Lancer.
Mise à JOUR:
Il ne fonctionne pas. Il génère un vérificateur d'erreur:
Exception in thread "main" java.lang.VerifyError: (class: TestThrow, method: ma\
in signature: ([Ljava/lang/String;)V) Can only throw Throwable objects
Could not find the main class: TestThrow. Program will exit.
Mise à JOUR 2:
En fait, vous pouvez obtenir que cela fonctionne si vous désactivez le code octet verifier! (-Xverify:none
)
Mise à JOUR 3:
Pour ceux qui suivent de la maison, voici le script complet:
Créer les classes suivantes:
public class ChuckNorrisException
extends RuntimeException // <- Comment out this line on second compilation
{
public ChuckNorrisException() { }
}
public class TestVillain {
public static void main(String[] args) {
try {
throw new ChuckNorrisException();
}
catch(Throwable t) {
System.out.println("Gotcha!");
}
finally {
System.out.println("The end.");
}
}
}
Compiler les classes:
javac -cp . TestVillain.java ChuckNorrisException.java
Exécuter:
java -cp . TestVillain
Gotcha!
The end.
Commentaire "extends RuntimeException" et recompiler ChuckNorrisException.java
seulement :
javac -cp . ChuckNorrisException.java
Exécuter:
java -cp . TestVillain
Exception in thread "main" java.lang.VerifyError: (class: TestVillain, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects
Could not find the main class: TestVillain. Program will exit.
Exécuter sans vérification:
java -Xverify:none -cp . TestVillain
The end.
Exception in thread "main"
Après avoir réfléchi à cela, j'ai créé avec succès une part insaisissable de l'exception. J'ai choisi de le nommer JulesWinnfield
, cependant, plutôt que de Chuck, parce que c'est un champignon-cloud-maçonnerie-mère-exception à la règle. En outre, il pourrait ne pas être exactement ce que vous aviez à l'esprit, mais il ne peut certainement pas être pris. Observer:
public static class JulesWinnfield extends Exception
{
JulesWinnfield()
{
System.err.println("Say 'What' again! I dare you! I double dare you!");
System.exit(25-17); // And you shall know I am the LORD
}
}
public static void main(String[] args)
{
try
{
throw new JulesWinnfield();
}
catch(JulesWinnfield jw)
{
System.out.println("There's a word for that Jules - a bum");
}
}
Et voila! Exception non interceptée.
Sortie:
exécuter:
Dire "Quoi" encore une fois! Je vous l'osez! Je double osez-vous!
Java Résultat: 8
Construction RÉUSSIE (temps total: 0 secondes)
Quand j'ai un peu plus de temps, je vais voir si je peux pas venir avec quelque chose d'autre, que de bien.
Aussi, vérifiez ceci:
public static class JulesWinnfield extends Exception
{
JulesWinnfield() throws JulesWinnfield, VincentVega
{
throw new VincentVega();
}
}
public static class VincentVega extends Exception
{
VincentVega() throws JulesWinnfield, VincentVega
{
throw new JulesWinnfield();
}
}
public static void main(String[] args) throws VincentVega
{
try
{
throw new JulesWinnfield();
}
catch(JulesWinnfield jw)
{
}
catch(VincentVega vv)
{
}
}
Provoque un débordement de pile - là encore, les exceptions restent non interceptée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.