Java 谁调用了一个方法?
我有一个密码:Java 谁调用了一个方法?,java,Java,我有一个密码: abstract void run(); public void start() { Logger log = Logger.getLogger(Test.class.getName()); try { run(); } catch (Exception e) { log.warn(e.getMessage()); } } 我可以执行start(),例如: object1.start(); obje
abstract void run();
public void start() {
Logger log = Logger.getLogger(Test.class.getName());
try {
run();
} catch (Exception e) {
log.warn(e.getMessage());
}
}
我可以执行start()
,例如:
object1.start();
object2.start();
object3.start();
我如何签入
start()
哪个对象(名称对象)启动了方法start()
?没有自动方法;Java中的对象不必有名称
一种解决办法是:
public void start(String name) {
Logger log = Logger.getLogger(name);
}
这是因为记录器可以具有任意名称。许多日志记录者使用类的名称,因为这是一种命名日志记录者的简单+自动的方法。但这不是必须的。没有自动的方法来做到这一点;Java中的对象不必有名称 一种解决办法是:
public void start(String name) {
Logger log = Logger.getLogger(name);
}
这是因为记录器可以具有任意名称。许多日志记录者使用类的名称,因为这是一种命名日志记录者的简单+自动的方法。但这并不是必须的。假设您试图将“object1”、“object2”和“object3”作为名称(不清楚),那么有两件事您应该注意:
- 这些是变量,不是对象。具有不同名称的多个变量可以引用同一对象
- 对象通常没有名称-您可以添加自己的
字段,但必须明确地这样做name
- 这些是变量,不是对象。具有不同名称的多个变量可以引用同一对象
- 对象通常没有名称-您可以添加自己的
字段,但必须明确地这样做name
object2 = object1;
object2.start();
实例现在应该看到名称“object1”
还是“object2”
?两者都是
如果希望对象具有“名称”,请使用自管理字段来存储它
object1.setName("object2");
或者在构造函数中执行相同的操作:
MyObject object1 = new MyObject("object1");
如果要获取字符串“object1”:这在逻辑上是不合理的。这是变量的名称,而不是它引用的对象,并且在运行时不存在。事实上,编译器可能会完全优化它。此外,这是不明确的: 考虑以下代码:
object2 = object1;
object2.start();
实例现在应该看到名称“object1”
还是“object2”
?两者都是
如果希望对象具有“名称”,请使用自管理字段来存储它
object1.setName("object2");
或者在构造函数中执行相同的操作:
MyObject object1 = new MyObject("object1");
看
请参见如果需要,则无法在运行时获取变量的名称 我将在start()方法之外启动日志 然后,start()方法将如下所示:
public void start(Logger log) {
try {
run();
} catch (Exception e) {
log.warn(e.getMessage());
}
}
或者,如果无法更改start()签名:
Logger log;
public void setLogger(Logger log){
this.log = log;
}
public void start() {
try {
run();
} catch (Exception e) {
log.warn(e.getMessage());
}
}
然后:
如果需要,则无法在运行时获取变量的名称 我将在start()方法之外启动日志 然后,start()方法将如下所示:
public void start(Logger log) {
try {
run();
} catch (Exception e) {
log.warn(e.getMessage());
}
}
或者,如果无法更改start()签名:
Logger log;
public void setLogger(Logger log){
this.log = log;
}
public void start() {
try {
run();
} catch (Exception e) {
log.warn(e.getMessage());
}
}
然后:
引用调用方法的当前实例。。你可以玩它..试着使用这个.className();这应该适合您。@Rohit,
此
仅指当前实例。他的方法是公开的,可以在外部调用。你的评论完全偏离了主题。你到底想知道关于这个对象的什么信息?你可以在创建对象时设置一个名称字段并设置它。使用它来标识对象。引用调用方法的当前实例。。你可以玩它..试着使用这个.className();这应该适合您。@Rohit,此
仅指当前实例。他的方法是公开的,可以在外部调用。你的评论完全偏离了主题。你到底想知道关于这个对象的什么信息?你可以在创建对象时设置一个名称字段并设置它。使用它来标识对象。