java的新手,我目前依靠大量输出消息来跟踪活动。我想要一种干净利落的方法,以使“半冗余”代码尽可能不明显。
最初,我正在这样做:(请注意System.out.println语句。)
package hamburger;
...
public class Hamburger extends Application {
...
public static void main(String args[]){
System.out.println("---> hamburger.Hamburger.main");
...
String [] drink = {"pepsi"};
NoCoke.onlypepsi(drink);
... ...
public class NoCoke
public static void main(String args[]){
System.out.println("---> hamburger.NoCoke.main");
...
static void justpepsi(String... commandIn){
System.out.println("---> hamburger.NoCoke.justpepsi");
...
try{ to get coke anyway...
当然,当我四处移动或重命名内容时,所有这些文字都必须进行更新,因此我开始使用以下三行来动态地执行操作:
public class Hamburger
public static void main(String[] args) {
String nameClass = new Throwable().getStackTrace()[0].getClassName();
String nameMethod = new Throwable().getStackTrace()[0].getMethodName();
System.out.println("---> "+nameClass+"."+nameMethod);
public class NoCoke
public static void main(String args[]){
<AND HERE>
public static void justpepsi(String... commandIn){
<AND HERE>
工作正常:
---> hamburger.Hamburger.main
---> hamburger.NoCoke.main
---> hamburger.NoCoke.justpepsi
但是我讨厌它的外观,占用空间等。
在Java中是否有类似“复制书”的内容? -包含可执行代码的文档可以放在任何地方?还是有一个过程可以将代码定义为可以在构造函数中声明的“字符串”之类的东西,例如:
StringThing nameMessageRoutine = new (whatever...) StringThing
"String nameClass = new Throwable()...<etc>...
System.out.println('---> '+nameClass+'.'+nameMethod);'"
...我可以像这样“导入”或“引用”:
public class Hamburger extends Application {
public static void main(String args[]){
import: nameMessageRoutine; //outside of the package member
public class NoCoke
public static void main(String args[]){
reference: nameMessageRoutine; //defined in the constructor
答案 0 :(得分:1)
此方法打印有关调用位置的信息:
static void printCurrent() {
final StackTraceElement ste = new Throwable().getStackTrace()[1];
String methodName = ste.getMethodName();
String className = ste.getClassName();
String lineNum = ""+ste.getLineNumber();
System.out.println(className + ", " + methodName + ", Line " + lineNum);
}
例如:
package randomTest;
public class MainClass {
public static void main(String[] args) {
printCurrent();
}
}
输出为
randomTest.MainClass, main, Line 131
编辑: 我知道这并不能完全回答问题,但是它确实实现了跟踪代码活动的最终目标。要回答这个问题(按照标题),在纯Java中无法自动将例程插入标记的位置。