All,
新人一枚,在学习过程中出现如题的问题,Java 包Java SE Development Kit8 Update51.
程序如下:
public class TestConstruct {
public static void main(String[] args) {
Person p=new Person(12);
p.show("Java construct test display");
}
}
class Person
{
public Person(int x)
{
a=x;//use constructor parameter x to initial private variable "a "
System.out.println("Constructor method be called...");
System.out.println("a="+a);
}
public void show(String msg)
{
System.out.println(msg);
}
private int a;
}
无法正常编译过,
报错位置Class Person, 原因: The type Person is already defined.
运行报错:
Exception in thread "main" java.lang.NoSuchMethodError: Person.(I)V
at TestConstruct.main(TestConstruct.java:5)
感谢有此经验人员分享解决方案。
个人猜想:
1.eclipase 可能无法兼容重复性使用此同类下 类名称 Person,因为第一个程序调用Class Person没有出现此问题。
2. 可能安装包的兼容性不够或未部份内容丢失。
一般在项目依赖比较复杂或者java运行的环境有问题时同一类型的jar包有不同版本存在,本质上说是JVM找不到某个类的特定方法,也就是说JVM加载了错误版本的类。
出现该问题的情形一般有一下几种:
1、项目依赖复杂。不使用maven管理项目依赖时更容易出现该问题。
&......
答案就在这里:java.lang.NoSuchMethodError问题处理
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
哥们,你Person不设成public 你能访问到吗?
我把你的代码放到一个java类里面 编译没有问题 运行也没有问题
补充此问题:
第一个程序,在此环境下正常:
程序如下:
public class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person();
p1.name =" XX";
p1.age=1001;
p1.talk();
}
}
class Person
{
String name;
int age;
void talk()
{
System.out.println("My name is "+name +" ,This year is "+ age+"'s old");
}
}
我怀疑中是否eclipase无法兼容。
问题已找到并解决;;
原因:同类名称在同一个src中会无法重复性使用,软件会默认为此类已经被定义。
解决方法,把同一个Src中的程序类名称Person进行更改成Person1 (同程序相同类名称全部更改)、Person2......
经验:Esciplse 软件有此Bug,另外个人对软件及版本理解能力出现偏差。
感谢以上朋友的热心帮助 ,谢谢!