JAVA 类定义 class 前为什么必须要有public ?

文件2: <HelloWorldApplet.JAVA >
import java.awt.Graphics ;

public class HelloWorldApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.drawString("Hello world!",5,25 );
}
}
文件1:<ABC.HTML>
<HTML>
<HEAD>
<TITLE>Hello to Everyone!</TITLE>
</HEAD><BODY>
<P>My Java applet says:
<APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25>
</BODY>
</HTML>

class 前必须要有PUBLIC,否则报错:
RuntimeException:
java.lang.reflect.InvocationTargetException.

这是为什么呢?
看了大家的答案, 但有谁真实地能试一下,确实是我说的这样,你要不加PUBLIC关键字,肯定是有报错的。

声明本人有编程经验,对MFC比较了解。JAVA没有接触过。

测试方法:
第一步:
将文件2: <HelloWorldApplet.JAVA >,文件1:<ABC.HTML> COPY到同一个目录下,这个目录要在CLASSPATH环境变量中定义,否则JAVA将找不到用户定义的类:HelloWorldApplet..class
第二步:
对文件2HelloWorldApplet.JAVA先进行编译
javac HelloWorldApplet.java ,生成HelloWorldApplet..class
第三步:
用IE打开ABC.HTML,注:控制面板---JAVA---安全,要设置为“低”,否则IE将不执行JAVA APPLET脚本的。

可以试一下,

public是一个修饰符,类似的还有default(就是前面什么也没有)、protected、private。。
这些东西,是确定了方法的作用域。
例如,用public声明的类以及方法,则可以被任意的包中使用,其集成的子类也可以使用,
而private则不是,private声明的方法,只有在该类中才能够调用,否则会出错。
这四个修饰符的作用于大小为
public >default >protected>private
第二与第三不太确定。一般我是用public以及pivate比较多。。
一楼的话,你最好就不要相信,因为java的所谓的“接口”,跟他说的相差几百万里追问

能试一下吗?

追答

你了解 包 这种东西吗?
上述的四个修饰符,跟 包外、包内、类本身、类的继承的关系相关。。
试就不试了。。你不是想了解这几个修饰符的区别吗??
你没有加public,就是默认的为default,即不写任何东西。
当为default的时候,该类只能是在包内可访问。。。
看你配置那么多东西,肯定是包外调用了。
详细你可以看看
http://zhidao.baidu.com/link?url=CuvLLdYjEvYQJVCYtfhIvy731WA4hnrps8PIKOio0_DDjwgfy0u_xqFGJSSHCimDHbSQ5H2GkIA1RpljuRG2iq
感觉还是有些可以参考的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-24
class前的修饰符是用来控制访问权限的,public表示在任何包里都可访问,protected表示同一包和子类可访问,package(缺省不写时就是这个)表示在同一包内可访问,private表示只有当前类可访问。
根据以上描述,你这个applet没声明成public,java plugin利用反向机制创建这个applet时会调用它的构造函数不被允许,所以抛出这个异常。这个异常在java plugin不认识class文件版本时也可能抛出,但根据你说声明成public时正常,估计不是这个引起的。
第2个回答  推荐于2017-09-05
public只是class的一种修饰词,表示公开的类,既所有的类都可引入使用。还有protected,表示受保护的类,子孙类和本类可引入使用
默认不写,表示同包中和本类中可使用
private,表示私人的,只能在本类中使用
第3个回答  2013-09-24
不是必须的, 使用了 public关键字定义的类 文件名必须和类名一致。 没使用public , 文件名可以不和类名一致
第4个回答  2013-09-24
不是必须要,这算是一个公开的级别吧,private是私有的外部不能调用,public是公用的外部可以调用追问

能试一下吗?