假设我们有班级
package myTest;
public class a {
public static void main(String[] args) {
b printToConsole = new b();
}
}
我无法修改。我也有班级
package myTest;
public class b {
public static void printThis() {
System.out.println("this is a test");
}
}
我可以修改。我想调用一个(我无法修改)并以某种方式打印到控制台“这是一个测试”。对于当前的类,这显然不起作用,我理解为什么。
摘要:
有没有办法,无需修改,调用a并对控制台进行“这是测试”? (b可以修改)。
答案 0 :(得分:2)
您可以在b
public b() {
System.out.println("this is a test");
}
或来自静态初始化程序
static {
System.out.println("this is a test");
}
(第二个只产生第一个创建的对象的输出)
答案 1 :(得分:2)
将System.out.println("this is a test");
放在b
的默认/无参数构造函数中:
public class b {
public b() {
System.out.println("this is a test");
}
}
答案 2 :(得分:2)
对于当前的课程,这显然不起作用,我理解为什么。
因为类printThis
中的b
方法未在类a
中的任何位置调用,所以它不会被执行。方法不会以某种方式自动运行,必须调用它们。您必须从类a
调用该方法:
b printToConsole = new b();
printToConsole.printThis();
或者你必须将printToConsole
方法的内容放在类b
的构造函数中(类a
然后不必修改)。在创建b
的新实例(类new b();
中的a
语句)时调用构造函数:
public class b {
// Constructor
public b() {
System.out.println("this is a test");
}
}
答案 3 :(得分:2)
是的,你可以通过多种方式实现这一目标: -
使用构造函数的第一种方法
class B
{
public B()
{
System.out.println("This is a test");
}
}
使用匿名阻止的第二种方式
class B
{
{
System.out.println("This is a test");
}
}
第三个是使用静态块
class B
{
static{
System.out.println("This is a test");
}
}
实际上,如果这些块在单个类中声明如下,则执行这些块的优先级如下: -
1. 静态阻止
2. Init Block(匿名阻止)
3. 构造强>
这三个块在运行时通过对象初始化执行。
基本上编译器将 init块复制到构造函数中,它用于多个构造函数之间的共享代码。