Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法调用Java字符串函数,因为它';它不是静止的_Java_String_Methods_Static Methods - Fatal编程技术网

无法调用Java字符串函数,因为它';它不是静止的

无法调用Java字符串函数,因为它';它不是静止的,java,string,methods,static-methods,Java,String,Methods,Static Methods,让我进一步解释。我有一个字符串函数(称为StringReversion),它返回一个反转的字符串,函数中没有错误。但是,当我尝试从main函数中使用System.out.println()打印时,它给出了一个错误“无法从类型StringReverse静态引用非静态方法StringReversion(string s)” 我尝试给我的StringReversion添加一个static修饰符,但这样做之后,它给了我运行时错误 我的代码是这样的: public class StringReverse

让我进一步解释。我有一个字符串函数(称为StringReversion),它返回一个反转的字符串,函数中没有错误。但是,当我尝试从main函数中使用
System.out.println()
打印时,它给出了一个错误“无法从类型StringReverse静态引用非静态方法StringReversion(string s)”

我尝试给我的StringReversion添加一个
static
修饰符,但这样做之后,它给了我运行时错误

我的代码是这样的:

public class StringReverse {

    public String stringReversal(String s){

        if(s == null){
            return null;
        }

        else if(s.length()% 2 == 0){
            int size = s.length();

            for(int i =0; i<s.length(); i++){
                s.replace(s.charAt(i), s.charAt(size));
                size--;
                if(i == (s.length()/2) || size==0)
                    break;
            }
        }

        else{
            for(int i =0; i<s.length(); i++){
                int size = s.length();

                s.replace(s.charAt(i), s.charAt(size));
                size--;

                if(i == ((s.length()/2) +1) || size==0 )
                    break;
            }
        }

        return s;
    }

    public static void main(String[] args) {
        String str = "Hello";
        String rev = stringReversal(str);

        System.out.println();
    }

}
公共类StringReverse{
公共字符串字符串反转(字符串s){
如果(s==null){
返回null;
}
如果(s.length()%2==0),则为else{
int size=s.length();

对于(int i=0;i这是因为您的主方法是静态的,但它所在的类不是静态的。为了调用非静态方法,您需要创建该类的实例。或者,可以将该方法设置为静态的,但为了引用它,您需要在调用中包含类名(好像使用类本身就像使用包含方法的对象一样-见下文)

此问题有三种解决方案:

  • 创建该类的实例并从对象调用该方法(推荐)
  • 将方法设为静态并使用StringReverse.StringReversion()
  • 使类和方法保持静态

发生这种情况是因为您的主方法是静态的,但它所在的类不是静态的。为了调用非静态方法,您需要创建该类的实例。或者,可以将该方法设置为静态的,但为了引用它,您需要在调用中包含类名(好像使用类本身就像使用包含方法的对象一样-见下文)

此问题有三种解决方案:

  • 创建该类的实例并从对象调用该方法(推荐)
  • 将方法设为静态并使用StringReverse.StringReversion()
  • 使类和方法保持静态

发生这种情况是因为您的主方法是静态的,但它所在的类不是静态的。为了调用非静态方法,您需要创建该类的实例。或者,可以将该方法设置为静态的,但为了引用它,您需要在调用中包含类名(好像使用类本身就像使用包含方法的对象一样-见下文)

此问题有三种解决方案:

  • 创建该类的实例并从对象调用该方法(推荐)
  • 将方法设为静态并使用StringReverse.StringReversion()
  • 使类和方法保持静态

发生这种情况是因为您的主方法是静态的,但它所在的类不是静态的。为了调用非静态方法,您需要创建该类的实例。或者,可以将该方法设置为静态的,但为了引用它,您需要在调用中包含类名(好像使用类本身就像使用包含方法的对象一样-见下文)

此问题有三种解决方案:

  • 创建该类的实例并从对象调用该方法(推荐)
  • 将方法设为静态并使用StringReverse.StringReversion()
  • 使类和方法保持静态

您必须实例化类来调用对象成员,或者您需要将函数设置为静态,这表明它不是面向对象范例的一部分

在你的情况下,你可以这样做

StringReverse sr = new StringReverse();
String rev = sr.stringReversal("hello");
或者以不同的方式声明您的方法

public static String stringReversal(String s)
事实上,类名StringReverse本身听起来不像某种对象,因此第二种方法是首选的


更深层次的问题是Java如何处理OO和入口函数的混淆。Java主要是一种OO语言,所以大多数时候一切都应该是对象或对象的成员。但是当你告诉VM运行一些Java代码时,必须有一个开始的地方,这是主要的方法。必须有一个主要的method和它必须在某个类下,但它实际上与包含它的类无关。在main方法中,你要么通过实例化对象并调用它们的成员(方法1)开始你的OO生活,要么通过将其他静态成员作为过程调用(方法2)在意大利面世界停留一段时间.

你必须实例化你的类来调用对象成员,或者你需要使你的函数是静态的,这表明它不是面向对象范例的一部分

在你的情况下,你可以这样做

StringReverse sr = new StringReverse();
String rev = sr.stringReversal("hello");
或者以不同的方式声明您的方法

public static String stringReversal(String s)
事实上,类名StringReverse本身听起来不像某种对象,因此第二种方法是首选的


更深层次的问题是Java如何处理OO和入口函数的混淆。Java主要是一种OO语言,所以大多数时候一切都应该是对象或对象的成员。但是当你告诉VM运行一些Java代码时,必须有一个开始的地方,这是主要的方法。必须有一个主要的method和它必须在某个类下,但它实际上与包含它的类无关。在main方法中,你要么通过实例化对象并调用它们的成员(方法1)开始你的OO生活,要么通过将其他静态成员作为过程调用(方法2)在意大利面世界停留一段时间.

你必须实例化你的类来调用对象成员,或者你需要使你的函数是静态的,这表明它不是面向对象范例的一部分

在你的情况下,你可以这样做

StringReverse sr = new StringReverse();
String rev = sr.stringReversal("hello");
或者以不同的方式声明您的方法

public static String stringReversal(String s)
事实上,类名StringReverse本身听起来不像某种对象,因此第二种方法是首选的

您遇到的更深层次的问题是,Java通常如何处理OO和入口函数