Java 为什么可以';我调用我在该类中的类中定义的方法

Java 为什么可以';我调用我在该类中的类中定义的方法,java,arrays,class,methods,return,Java,Arrays,Class,Methods,Return,我正在尝试使用ArrayStack创建回文查找器类。我基本上已经知道了怎么做,但我想知道为什么不能在类中调用popStr()方法。代码如下所示: 公共类回文查找器{ private static StackInt pCheck=new ArrayStack(); 私有静态字符串pString; 私有静态字符串验证字符串; 公共回文查找器(字符串pString){ 回文查找器.pushStr(pString.toLowerCase()); PalindromeFinder.verifyString

我正在尝试使用ArrayStack创建回文查找器类。我基本上已经知道了怎么做,但我想知道为什么不能在类中调用popStr()方法。代码如下所示:

公共类回文查找器{
private static StackInt pCheck=new ArrayStack();
私有静态字符串pString;
私有静态字符串验证字符串;
公共回文查找器(字符串pString){
回文查找器.pushStr(pString.toLowerCase());
PalindromeFinder.verifyString=pString.popStr();
}
公共静态无效pushStr(字符串pushString){
对于(int i=0;i

“PalindromeFinder.verifyString=pString.popStr();”的行”给我一个错误,说“找不到符号”。符号:方法popStr();位置:字符串类型的变量pString。'有人知道为什么会发生这种情况吗?我只想能够得到popStr()的返回值,并在布尔语句中使用它来确定pString和verifyString是否相等

以下行不正确:

PalindromeFinder.verifyString = pString.popStr();
pString
是一个
字符串
,因此不能对其调用方法
popStr()
。(
popStr()
不是在
String
类上定义的方法。它是您的方法之一。)

使用

PalindromeFinder.verifyString = popStr();
代替

PalindromeFinder.verifyString = pString.popStr();

更改构造函数后,可以直接调用方法
popStr()

除此之外,在类中将所有方法和实例变量声明为静态对我来说没有意义(这违背了OOP的目的)。如果您出于某种原因这样做,那么请注意,您的类的所有实例都将共享可能导致数据丢失的变量,例如,如果您声明了两个实例

PalindromeFinder p1=new PalindromeFinder("some string 1");
PalindromeFinder p2=new PalindromeFinder("some string 2"); //data given by p1 is now lost since the variable that stores the passed parameter is static in the class and is overwritten by value in p2. 

“popStr”是在同一类中创建的方法。然后你可以直接调用MethodThank,所以你是说,通过使所有方法和实例都是静态的,如果我使多个回文查找器对象,那么这些对象的实例变量将相互覆盖?实例变量不会相互覆盖,但静态变量和方法存在于类级别。这意味着无论您创建了多少实例,在类级别上总会有一个静态变量的副本可用,这基本上就是static关键字的概念。因此,创建新实例并引用变量将导致所有实例共享它们。您可以从所有变量和方法中删除static关键字,并且您的程序应该可以正常运行(只需进行一些小的更改,如删除CLASS_NAME.static_方法调用并将其替换为普通方法调用),如果不需要创建实例,例如,输出仅依赖于参数的实用程序方法(如
Math
类中的实用程序方法),或者,如果您希望在所有实例之间共享一个公共(全局)变量,例如实例计数器,它统计创建的实例数。谢谢。我犯了一个非常愚蠢的错误。我感谢你的纠正!
public PalindromeFinder(String pString){
    PalindromeFinder.pushStr(pString.toLowerCase());
    PalindromeFinder.verifyString = popStr();
}
PalindromeFinder p1=new PalindromeFinder("some string 1");
PalindromeFinder p2=new PalindromeFinder("some string 2"); //data given by p1 is now lost since the variable that stores the passed parameter is static in the class and is overwritten by value in p2.