Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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初学者问题:下面的代码有什么问题? 公共类函数 { 公共静态void main(字符串参数[]) { 系统输出println(功率(3,2)); 系统输出println(功率(3,2)); 系统输出打印LN(电源(2)); } 公共长功率(int m) { 返回m*m; } 公共长功率(整数m,整数n) { 长积=1; 对于(inti=1;i_Java_Non Static - Fatal编程技术网

Java初学者问题:下面的代码有什么问题? 公共类函数 { 公共静态void main(字符串参数[]) { 系统输出println(功率(3,2)); 系统输出println(功率(3,2)); 系统输出打印LN(电源(2)); } 公共长功率(int m) { 返回m*m; } 公共长功率(整数m,整数n) { 长积=1; 对于(inti=1;i

Java初学者问题:下面的代码有什么问题? 公共类函数 { 公共静态void main(字符串参数[]) { 系统输出println(功率(3,2)); 系统输出println(功率(3,2)); 系统输出打印LN(电源(2)); } 公共长功率(int m) { 返回m*m; } 公共长功率(整数m,整数n) { 长积=1; 对于(inti=1;i,java,non-static,Java,Non Static,,如错误消息所述,静态方法(main)不能在没有对象实例的情况下调用非静态方法(power) 您应该将power方法设置为静态 解释 普通类方法与类的实例相关联。 例如,只能在String实例上调用。在没有String实例的情况下调用startsWith是没有意义的 有时,您会希望创建一个不需要类实例的方法。 例如,不会对Integer实例调用。仅仅为了调用Integer.parseInt而必须创建Integer实例是没有意义的 这些方法称为static方法 main是static方法的一个示例

,如错误消息所述,静态方法(
main
)不能在没有对象实例的情况下调用非静态方法(
power

您应该将
power
方法设置为静态

解释 普通类方法与类的实例相关联。
例如,只能在
String
实例上调用。在没有String实例的情况下调用
startsWith
是没有意义的

有时,您会希望创建一个不需要类实例的方法。
例如,不会对
Integer
实例调用。仅仅为了调用
Integer.parseInt

而必须创建
Integer
实例是没有意义的 这些方法称为
static
方法


main
static
方法的一个示例。由于它不是在
函数的实例上调用的,所以它不能调用实例方法。(因为没有实例可以调用它们)

您是从
static
方法(main)调用实例方法的。您需要将您的
power
方法设置为静态,或者在
main
中,创建
函数的一个实例
类并调用
函数。power()

这正是它所说的

静态方法不需要类的实例。您只需执行
MyClass.staticMethod()
。非静态方法(或实例方法)操作类的实例。因此:

public static void main(String args[])
{
  // Create an object
  Function f = new Function( );

  System.out.println(f.power(3,2));
  System.out.println(f.power(3,2));
  System.out.println(f.power(2));
}
无法调用非静态方法,因为它实际上不存在。非静态方法仅在其所属类的实例上下文中被调用时才存在


您的解决方案是使
power
成为一个静态方法。

这是初学者常见的困惑来源。仅仅因为一个方法是公共的,并且与
main
方法在同一个类中,并不意味着您可以随时调用它。因为
main()
是一个静态方法,它没有可调用方法的对象

您可以通过两种不同的方式进行更正:

  • 使两种
    power
    方法
    static
    。对于非常小的程序,这是最简单的方法

    static
    的意思是不必构造对象来调用方法。如果从另一个类调用静态方法,它看起来像
    Math.function(x)
    ,但由于这些静态方法在同一个类中,所以看起来就像
    function(x)

  • 创建
    函数
    类的对象,并在其上调用
    power
    方法。对于较大的程序,通常会这样做,但在这里它没有真正的意义

    作为参考,这看起来像:

    MyClass myClass = new MyClass();
    myClass.instanceMethod();
    
  • 一个快捷的经验法则(没有完整的背景说明)是静态方法/函数不能调用非静态方法/函数,因此您想从主函数调用的任何东西都需要在它前面有static关键字

    核心问题是Java是一种面向对象的语言,静态与非静态需要相当多的面向对象的先决知识。Java的缺点之一是,它确实需要初学者在学习时跳过一些这类知识,这一切都源于Java和o的面向对象本质一旦你理解了OO,一切都会就绪(语言设计者做出的决定不一定是最好的,但它们是合乎逻辑的)


    如果我不去解释什么是静态的话,我希望你不会觉得这很高人一等。我可以告诉你,这不是一个特别困难的概念,但它只是依赖于一些OO概念的构建块和一次过早的解释尝试(无论如何,是我做的)可能会让您感到厌烦。

    因此,需要明确的是,另一种解决方法是将方法标记为静态(请记住,您不能从静态方法调用非静态方法,如main,但可以从非静态方法调用静态方法):

    公共类函数
    {
    公共静态void main(字符串参数[])
    {
    系统输出println(功率(3,2));
    系统输出println(功率(3,2));
    系统输出打印LN(电源(2));
    }
    公共静态长功率(int m)
    {
    返回m*m;
    }
    公共静态长功率(int m,int n)
    {
    长积=1;
    
    对于(int i=1;i这就是问题所在。没有正确的缩进!另一点……这不是错误,但编码
    String[]args
    比编码
    String[]
    更容易接受(尽管它们实际上是相同的)…@froadie:你会接受
    字符串…args
    ?我相信,通过解释静态调用和非静态调用以及它们不兼容的原因,操作会更好。哦,有一个名为function的类?这是新的和有趣的。让我查一下!是的,在操作中。
    MyClass myClass = new MyClass();
    myClass.instanceMethod();
    
    Function f = new Function();
    
    System.out.println(f.power(3,2));
    System.out.println(f.power(3,2));
    System.out.println(f.power(2));
    
    public class Function
    {
       public static void main(String args[])
       {
          System.out.println(power(3,2));
          System.out.println(power(3,2));
          System.out.println(power(2));
       }
       public static long power(int m)
       {
          return m*m;
       }
       public static long power(int m,int n)
       {
          long product=1;
          for(int i=1;i<=n;i++)
          {
              product=product*m;
          }
          return product;
       }
    }