关于Java函数调用

时间:2016-12-15 13:13:15

标签: java function methods

有人向我解释当我运行此代码时,在输入第一个键盘输入之前,我没有得到Sysout语句吗?

    import java.util.Scanner;

    public class test1{

            static Scanner scan = new Scanner(System.in);
            static int k = scan.nextInt();

            public static void main(String[] args) {
                setK();
                System.out.println(" K is: " + k);
        }
            public static void setK(){
                System.out.println("Please input K value");
                k = scan.nextInt();
        }
    }

3 个答案:

答案 0 :(得分:3)

static类的test1变量在执行main方法之前初始化。初始化类时会发生这种情况。

因此

static int k = scan.nextInt();

语句在main方法之前执行,并等待输入。输入输入后,main开始运行并调用setK();,打印“请输入K值”。

我不确定这是故意的,因为你的setK()方法似乎是应该读取输入并将其分配给k的方法。因此,请将您的代码更改为:

import java.util.Scanner;

public class test1{

        static Scanner scan = new Scanner(System.in);
        static int k;

        public static void main(String[] args) {
            setK();
            System.out.println(" K is: " + k);
    }
        public static void setK(){
            System.out.println("Please input K value");
            k = scan.nextInt();
    }
}

答案 1 :(得分:1)

这一行

static int k = scan.nextInt();

在类初始化期间运行。它阻塞并等待输入整数。

此代码在main之前运行,因为它是static初始化。它必须在调用类的第一个方法之前完成。此时k具有您输入的第一个值。之后,main调用setK,提示输入其他内容。

您可以通过从= scan.nextInt();的声明中删除初始化(即k部分)来解决此问题。

答案 2 :(得分:0)

也许你期望的行为如下:

package test;

import java.util.Scanner;

public class ScannerTest {

    static Scanner scan = new Scanner(System.in);
    static int k;

    public static void main(String[] args) {
        System.out.println("Please input K value");
        k = scan.nextInt();
        System.out.println(" K is: " + k);
    }
}
顺便说一句,你应该坚持使用Java命名约定。