Java编译错误(已编辑)?
我在运行时遇到这个错误:这是由于private关键字引起的。如果我移除它,它就会工作。谢谢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
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);
}
}