无法调用Java字符串函数,因为它';它不是静止的
让我进一步解释。我有一个字符串函数(称为StringReversion),它返回一个反转的字符串,函数中没有错误。但是,当我尝试从main函数中使用无法调用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
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和入口函数