Java编译错误(已编辑)?

Java编译错误(已编辑)?,java,Java,我在运行时遇到这个错误:这是由于private关键字引起的。如果我移除它,它就会工作。谢谢 package helloworld; public class Helloworld { public static void main(String[] args) { private int n; n = 25; System.out.println("hi"+n

我在运行时遇到这个错误:这是由于private关键字引起的。如果我移除它,它就会工作。谢谢

    package helloworld;
    public class Helloworld {
               public static void main(String[] args) {
               private int n; 
               n = 25;
               System.out.println("hi"+n);       
            }
}
错误:发生JNI错误,请检查您的安装并重试
线程“main”java.lang.ClassFormatError中出现异常:类helloworld/helloworld中的方法“”具有非法签名”(Ljava/lang/Object;)Lprintln
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:763)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
在java.net.URLClassLoader.access$100(URLClassLoader.java:73)
在java.net.URLClassLoader$1.run(URLClassLoader.java:368)
在java.net.URLClassLoader$1.run(URLClassLoader.java:362)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:361)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
在sun.launcher.LaunchHelper.checkAndLoadMain(LaunchHelper.java:495)中
/Users/rafi/Library/Caches/NetBeans/8.2/executor snippets/run.xml:53:Java返回:1
生成失败(总时间:1秒)

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

将n声明为字符串,然后打印出n怎么样?

一些基本理论:

实例
:用一种简单的方式,它可以解释为类的一个副本将包含它的所有特性

静态变量
:属于类的变量

实例变量
:属于实例的变量

局部变量
:属于特定方法的变量

现在重要的是

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

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

要创建类的新实例,请将“new”关键字用作

    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)
这里test是实例的名称

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

局部变量不能标记为私有、受保护或公共 它们是声明它们的方法或块的本地对象,在其外部的任何地方都不可见

您将收到一个错误,因为您已将局部变量标记为private



尝试删除“import java.lang”检查是否有效,但如果使用private关键字声明任何内容,则会出现另一组错误:这不是答案。这甚至不是有用的评论。请删除它。你能告诉我为什么我在使用访问修饰符时出错吗访问修饰符(private、public、protected)是在实例/类变量上指定的。int n是一个局部变量,只能在main方法中访问。所以声明它不带private可以解决这个问题。是的,在我阅读的教科书中,他们使用private on string,int等。。。因此,其他类也可以访问它。只有那个类才能访问它。所以我应该能够将它声明为private。如果您想将n声明为private,请将其声明为实例变量。公共类Helloworld{private static int n;public static void main(String[]args){n=25;System.out.println(“hi”+n);}噢,是的,谢谢。我明白我现在做错了什么
<class-name> <instance-name> = new <class-name>();
Test test = new 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);
    }
}