请教一个问题,关于main方法的问题

学武fiy 2014-10-10 10:16:46
小菜今天学类加载器这部分,在学到运行时包这个概念的时候突发奇想,写下了如下代码,但代码的抛出的错误让我有点不太明白,毕竟对main方法没有深入的研究过,希望各路高手指点。
代码如下
package java.lang;

public class String {

/**
* @param args
*/
String str;

public String(String str){
this.str = str;

}
public static void main(String[] args) {
// TODO Auto-generated method stub

String str = new String("hello");
System.out.println(str);
}
}

错误如下:
错误: 在类 java.lang.String 中找不到主方法, 请将主方法定义为:
public static void main(String[] args)
...全文
310 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
code小生 2014-10-13
  • 打赏
  • 举报
回复
是类名的问题,不能定义为String,String是java中的数据类型。
coffee-time 2014-10-13
  • 打赏
  • 举报
回复
唯9楼和11楼是正解。 Java总是先加载rt.jar下的核心类,然后再加载本地类,接着才是其它类,且当一个类被加载后就不会再加载拥有相同限定名的类。 所以你的执行过程变成了javac lang包下的String.class,而String.class没有main()方法,当然就报找不到main()方法。
日知己所无 2014-10-13
  • 打赏
  • 举报
回复
package topics_390903109;

public class String {

    java.lang.String str;

    public String(java.lang.String str) {
        this.str = str;

    }

    public static void main(java.lang.String[] args) {

        String str = new String("hello");
        System.out.println(str);
    }
}
稍微改动一下,能够运行了……
topics_390903109.String@15ff48b
huanongying131 2014-10-13
  • 打赏
  • 举报
回复
你应该了解一下jvm了 JVM 为了安全问题 当出现和java api 核心类同名类时 会只装载java api 的核心类 而不装载你声明的类 而 java.lang.String类 的确没有 main()方法 所以。。。。。。。。
  • 打赏
  • 举报
回复
classLoader首先会去加载java.lang.String,而不是你写的java.lang.String
tsky9988 2014-10-11
  • 打赏
  • 举报
回复
完整的应该这么写 public class String { public String(java.lang.String str) { super(); this.s =str; } public java.lang.String s; public java.lang.String toString(){ return "this"+" "+s; } public static void main(java.lang.String args[]){ String str=new String("hello world"); System.out.println(str); } }
chaoyong918 2014-10-11
  • 打赏
  • 举报
回复
public class String{
	java.lang.String str;
	public  String(java.lang.String  str){
		this.str = str;
		System.out.println(str);
	}

	public static void main(java.lang.String[] args) {
	// TODO Auto-generated method stub

	String str = new String("hello");
	System.out.println(str.str);	
	}
}
以上代码能够正常运行。你最下面new的str可不是字符串哦,其实是你的String类的对象,在你new对象的时候给构造方法穿了一个字符串“hello”,所以,你要输出的str结果是对象的地址,而你应该输出的是str.str,这个结果才是你以为的系统会给你new出来的字符串“hello”。明白了吗?
a617717 2014-10-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/a617717/article/details/39980181 http://blog.csdn.net/a617717/article/details/39980409 http://blog.csdn.net/a617717/article/details/39980799 http://blog.csdn.net/a617717/article/details/39980777 http://blog.csdn.net/a617717/article/details/39980731 http://blog.csdn.net/a617717/article/details/39980813 http://blog.csdn.net/a617717/article/details/39980707 http://blog.csdn.net/a617717/article/details/39980685 http://blog.csdn.net/a617717/article/details/39980661 http://blog.csdn.net/a617717/article/details/39980757 http://blog.csdn.net/a617717/article/details/39980639 http://blog.csdn.net/a617717/article/details/39980619 http://blog.csdn.net/a617717/article/details/39980607 http://blog.csdn.net/a617717/article/details/39980409 http://blog.csdn.net/a617717/article/details/39980559 http://blog.csdn.net/a617717/article/details/39980181
chaoyong918 2014-10-11
  • 打赏
  • 举报
回复
类名用了java中的关键字String,这样在后面程序中你要用到的String到底是你自己写的还是java中的String类?你要写清楚,java中有规定主方法必须为
public static void main(String[] args){
     
}
除了args可以该,其他不能改!括号中的String指的就是java.lang.String,你要申明!否则就是你自己定义的String了。 还有你有定义String str,这个str是字符串类型吗?不是的,是你的类String类型的,而你的构造方法里面传的和下面new的都是字符串,根本就不相符。 哪里是要字符串类型申明下就好了:
public class String{
	java.lang.String str;
	public  String(java.lang.String  str){
		this.str = str;
	}

	public static void main(String[] args) {
	// TODO Auto-generated method stub

	String str = new String("hello");
	System.out.println(str);	
	}
}
AceShot 2014-10-10
  • 打赏
  • 举报
回复
public class String{
public static void main(java.lang.String[] args) {}
}
这样是可以通过编译和运行的。因为你自己定义了String类,所以main中的String也就成了你自己的类型,不符合main方法的规范,加上全限定名即可
anakin_feng 2014-10-10
  • 打赏
  • 举报
回复
我刚调试了下,觉得还有个可能.应该是public static void main(String[] args) 中的String问题这里的String是你自己的String而不是java自己的String,所以这个不符合主函数的要求..... 应该是这个解释更合理......不过这是我的理解
anakin_feng 2014-10-10
  • 打赏
  • 举报
回复
主要是你的类和java.lang包中String类一样,你想new 你自己的String,而实际上new的是java自己封装好的类,而那个类确实没主函数的
scmod 2014-10-10
  • 打赏
  • 举报
回复
你确定不是因为你把类名弄成了String的缘故么。。。。 这个貌似编译都通不过啊。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧