Java编译错误(已编辑)?

时间:2017-02-13 18:56:58

标签: java

    package helloworld;
    public class Helloworld {
               public static void main(String[] args) {
               private int n; 
               n = 25;
               System.out.println("hi"+n);       
            }
}

我在运行时遇到此错误:这是由私有关键字引起的。如果我删除它是有效的。感谢

    Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Method "<error>" in class helloworld/Helloworld has illegal signature "(Ljava/lang/Object;)Lprintln;"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
/Users/rafi/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

3 个答案:

答案 0 :(得分:2)

import语句只能用于指定包中的类。但是java.lang是一个包。编译器隐式导入java.lang中的类,可以从代码中省略它。

答案 1 :(得分:0)

一些基本理论:

Instance:以简单的方式,可以将其解释为您班级的所有功能。

Static variable:属于类

的变量

Instance variable:属于实例的变量

Local variable:属于特定方法的变量

现在重要的事情

该类的每个实例都有自己的所有实例变量的副本,但所有实例变量只共享一个静态变量副本 实例。 其他静态方法也属于该类,因此不能更改任何实例变量的值 不知道实例。

所以我们可以说 静态方法可以直接调用其他静态方法 实例方法可以直接调用静态方法 实例方法可以直接调用其他实例方法 但 对于静态方法来调用任何实例方法或使用任何实例变量,我们需要一个实例 可以将此实例传递给方法,也可以使用新实例。

要创建班级的新实例,请使用“new”关键字

<class-name> <instance-name> = new <class-name>();

Test test = new Test();

这里test是实例的名称

进一步回答你的问题 变量可以在方法内声明,但它们只能是方法的本地变量。 它们不会被视为实例变量。

本地变量不能标记为私有,受保护或公开 它们是声明它们的方法或块的本地,并且在它之外的任何地方都不可见。

您收到错误是因为您已将本地变量标记为私有

public class Test {


    private static int m;// this is a static variable

    private int n;// this is an instance variable

    public static void main(String[] args) throws Exception {

        printM();//no need for any instance as printM() is static


//      since 'n' is an instance variable it cannot be used without an instance inside a static method
//      creating instance
        Test test = new Test();
        test.printN();//instance is need to call printN()
    }

    private static void printM() {
        m = 25;
        System.out.println("hi from static method 'm' is: " + m);
    }

    private void printN() {
        n = 15;
        System.out.println("hi from instance method 'n' is: " + n);
    }
}

答案 2 :(得分:-2)

如何将n声明为字符串然后打印出来?