有没有办法从Java中不包含main的类打印到控制台?

时间:2014-02-22 20:39:29

标签: java

假设我们有班级

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可以修改)。

4 个答案:

答案 0 :(得分:2)

您可以在b

的构造函数中调用print语句
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块复制到构造函数中,它用于多个构造函数之间的共享代码。