在Java void方法调用中

时间:2009-11-27 15:43:20

标签: java

在java中有一种从构造函数调用void方法的方法。我尝试这样的东西,但得到一条错误消息,编译器无法找到符号方法printThis(java.lang.String):

public class Date{

public Date(String inString){

  String s = inString;

   String b;


     b.printThis(s);

}


public void printThis(getString)

{

System.out.printf(System.out.printf( new SimpleDateFormat("MM/dd").format(new SimpleDateFormat("MM/dd").parse(getString) ) );

}

5 个答案:

答案 0 :(得分:3)

你想要printThis(s) - 编译器正在String实例上寻找一个不存在的printThis方法。

答案 1 :(得分:2)

如下所示,代码中存在大量错误。这些是我发现的。

public class Date{

问题:您缺少包声明意味着它将在默认包中。这是个坏主意。

问题:您使用的类名与标准类库中常用的类相同。这是一个坏主意。

public Date(String inString){
    String s = inString;
    String b;
    b.printThis(s);

错误:代码尝试调用名为printThis(...)的String API中的方法。没有这样的方法。您应该摆脱b,只需致电printThis(s)

错误:代码尝试使用未初始化的本地(b),这会产生编译错误(如果您通过将b的类型更改为某些内容来“修复”上一个错误有一个printThis方法。

问题:如果构造函数有可能在子类中被重写,那么构造函数调用正在构造的对象的方法是不好的做法。问题是在超类初始化完成之前,可能会在对象上调用重写方法(来自子类)。可以安全地拨打staticprivate方法。

}

public void printThis(getString) {

错误:声明中存在语法错误。将getString更改为String getString

问题:参数名称的选择是(IMO)无意义的。什么是“获取字符串”???

    System.out.printf(System.out.printf( 
        new SimpleDateFormat("MM/dd").format(
        new SimpleDateFormat("MM/dd").parse(getString) ) );

错误:编译错误:括号不平衡。

错误:编译错误:printf的第一个参数必须是StringLocale。在您的代码中,外部调用中的第一个参数是PrintStream实例。

错误:System.out.printf(System.out.printf(是荒谬的。您几乎肯定应该只使用System.out.printlnSystem.out.print。如果您使用printf方法,则必须使用PrintStream javadocs中指定的语法提供格式字符串。 (这与日期格式使用的语法不同!!!)

}

错误:缺少'}'来完成课程。

问题:您的代码风格需要大量工作。如果你能发誓圣经上没有其他人曾经必须阅读你的代码(!),那么我认为它没问题。否则,这种东西是不可接受的。如果这是作业,我会直接给你50%的分数,因为没有尝试让风格正确。

答案 2 :(得分:1)

您已将printThis()用作String的方法。如果您想打印您想要的日期

printThis(s);

使用与JDK库类相同的类名(Date)通常不是一个好主意

答案 3 :(得分:0)

以下几行不起作用:

String b;
    b.printThis(s);

上述代码正在尝试在名为printThis的{​​{1}}对象上调用String方法。

由于b方法不存在,编译器会返回错误消息,说明找不到该方法。

可能的目的是:

String.printThis

以上将调用当前实例的printThis(s); 方法。

答案 4 :(得分:0)

你得到的错误是因为你试图在对象b上调用printThis(),这是一个String。你想要:

public Date(String inString) {
  printThis(inString);
}

仅供参考,通常不建议将类命名为与JDK类相同(如Date)。你对inString所做的任务也没有真正实现。也许你的代码是对你正在做的事情的简化,但我认为无论如何我都会提到它。