繁体   English   中英

我可以在java的静态方法中使用非静态变量吗?

[英]Can I use non static variable in static method in java?

“用java编写一个程序,声明一个具有一个整数数据成员和两个成员函数 in() 和 out() 的类,以在数据成员中输入和输出数据。”

我目前的代码如下。

import java.util.Scanner; 
public class Operator 
{ 
    static int a;
    public static void input() { 
        Scanner in=new Scanner(System.in); 
        System.out.println("Enter the number:"); 
        a=in.Nextint(); //Here is problem 
    }

    public static void output() { 
        System.out.println("Number is:" + a); 
    }

    public static void main(String[] args) 
    {
        input();
        output();
    } 
}

您似乎对实例变量和局部变量感到困惑。

您始终可以在静态方法中声明一个“局部变量”。 例如 main() 是一个静态函数,我们总是在其中声明变量。

所以你在 input() 函数中创建一个 Scanner 类型的变量“in”是完全没问题的。

但是,您“不能”从静态方法访问实例变量和实例方法。

这篇关于堆栈溢出的帖子给出了完整而完整的答案: 非静态方法可以修改静态变量吗?

就您的代码而言,代码中有一个小错误。 读取整数的函数调用是“nextInt”而不是“Nextint”。 Java 通常使用驼峰式大小写来定义它的所有方法。 所以要小心方法的使用。

修改后的代码应该是这样的:

class Operator
{
    static int a;
    public static void input() { 
        Scanner in=new Scanner(System.in); 
        System.out.println("Enter the number:"); 
        a=in.nextInt(); //this is nextInt and NOT Nextint
    }

    public static void output() { 
        System.out.println("Number is:" + a); 
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        input();
        output();

    }
}

简短的回答 - 没有原因也很简单,也就是说 - 它会违反静态的定义,即可以在其他类中访问而不创建类的对象(也称为实例)。

在此处输入图片说明

但是,如果我们尝试在非静态方法中执行静态变量怎么办? 在这种情况下,是的,我们可以做到。 因为我们必须创建类的实例(对象)才能使用该方法。 所以,这并不违反定义。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM