没有类的java文件_没有公共类的.java文件的Java编译
好的,所以java源文件必须至少有一个公共类,该文件应该被称为"class-name.java"。 很公平。
因此,如果我有一个类,那么以下将编译:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
但是,如果我从上面的代码中删除'public'访问修饰符,那么代码仍会编译。 我只是不明白。 删除它,代码如下:
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
在上面的代码中,由于我删除了public访问修饰符,我的类具有default或package访问权限,即它不能从外部世界访问,只能从包中访问。
所以我的问题是,上面的代码是如何编译的? 在这种情况下,文件HelloWorld.java没有public HelloWorld类(只有一个包私有的HelloWorld.class),因此我的理解不应该编译。
"java源文件必须至少有一个公共类"呃不,它根本不需要任何东西。
a java source file must have at least one public class and the file should be called class-name.java
不正确,顶级类不必声明为public。 JLS声明;
If a top level class or interface type is not declared public, then it may be accessed only from within the package in which it is declared.
请参阅http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285第6.6.1节。
谢谢!所以你是说那个调用main()的人从某种包上下文中调用它?也就是说,调用main()的调用者(可能是JVM)与我的HelloWorld类在同一个包中?只是困惑!所以感谢您花时间回答我的问题。
此外,您可以在java文件中定义多个非公共类。
所以现在我的问题是:HelloWorld是默认类中的包私有类,对不对?所以它应该可以从默认包中访问,但不能从默认包外部访问,对吧?因此,进一步推断,当main()被调用时,它必须从默认包中调用,我是对的吗?或者,调用main()的人与HelloWorld类在同一个包中。对 ?
非公开课有有效用法。因此,当您尝试编译文件时,编译器不会给出错误。
这没什么好奇的。我想这种行为类似于一些C / C ++ - 编译器。
像"void main(){/.../}"这样的代码将由这些编译器正确编译,尽管它不是符合标准的代码。简单地说,编译器将"void"与"int"交换。
我认为类似的行为是由java编译器实现的。
问候,
xong
看来我错了。 =)
主方法就像任何其他方法一样。唯一的区别是它可以使用java命令从命令行调用。即使从命令行看不到main方法,该类仍然可以像任何其他Java类一样使用,并且您的main方法可以由同一个包中的另一个类调用。因此,我认为它编译。
在Java中,main函数在任何意义上都不是特殊的。只有一个终端命令能够调用名为main的静态方法...
所以现在,HelloWorld类具有包私有可访问性。那么,谁调用main(JVM?)现在也必须在同一个包中,对吧?
我直接从java类调用然后是。然而,反思规则略有不同。通过反射,可以调用任何非私有方法。 JVM使用反射来调用main方法。
您可以将非公共类放在文件中,这不是错误而是功能。
你的问题是在包装层面,而不是编译。因为您可以使用非公共类编译此文件,但您无法从外部调用它,因此它不能用作应用程序基类
像这样:
// [+] single file: SomeWrapper.java
public class SomeWrapper {
ArrayList<_privatedatatype> pdt;
}
// [-] single file: SomeWrapper.java
// [+] single file: _PrivateDataType.java
class _PrivateDataType {
// members, functions, whatever goes here
}
// [-] single file: _PrivateDataType.java
谢谢,但我的观点是不添加私有数据类型或任何东西。我的问题是上面的代码是如何编译和/工作的,因为我在这里有一个.java文件,但是里面没有任何公共类。其中唯一的类是包私有类,而不是公共类。
哪里有问题?您可以在同一个包中创建另一个类(具有相同的效果)并使用该包私有类。
同样,我的问题是不在文件中添加任何新类。我只关心包私有访问。
我编辑了代码,它不是文件中的新类,而是包内。
我的问题与你所说的完全不同:)你所说的是正确的,但这不是我想知道的。我只是想知道为什么文件中的包私有类仍然编译。
就像我说的。它编译是因为单个包 - 私有类具有单个文件是有效的。它类似于类的私有成员,具有私有类包。
如果未指定类(或其字段或方法)的访问修饰符,则会为其分配"默认"访问权限。这意味着它只能从同一个包中访问(在本例中是默认包)。
Javabeginner.com网站上有一篇关于这个主题的文章 - 您应该熟悉Java中的访问修饰符,无论是来自本网站还是其他人。
没有类的java文件_没有公共类的.java文件的Java编译相关推荐
- java 删除压缩zip文件_从ZIP存档中删除文件,而无需在Java或Python中解压缩 - java...
从ZIP存档中删除文件,而无需使用Java(首选)或Python解压缩 你好 我使用包含数百个高度压缩的文本文件的大型ZIP文件.解压缩ZIP文件时,可能要花一些时间,并且很容易消耗多达20 GB的磁 ...
- java 读取dat文件_想知道如何从.dat文件中读取对象
所以即时通讯基本上试图做一个"银行"计划. 到目前为止(我认为)我已经获得了将对象写入.dat文件供将来使用的方法,并且我希望在每次启动时将这些对象读入ArrayList,以便您可 ...
- java调用mq发送文件_谁有mq发送接收文件的java代码
mq安装目录下有简单的发送和接收代码,具体在samp目录下有一些不同语言的源代码,可以借鉴. 类介绍: SendMSG:消息发送类. Main():主方法. SendMSG():消息发送方法. 方法描 ...
- matlab java错误_求助:matlab load mat文件出错!java exception occurred:
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 具体错误如下: load('a.mat') ??? Java exception occurred: java.lang.UnsatisfiedLinkE ...
- 用cmd运行python文件_怎么用cmd运行python文件
Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的. 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project.如果我们进 ...
- 反转字符串java实现_反转字符串的几种实现(Java)
反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...
- nio 读取目录所有文件_在NIO.2中使用文件和目录
nio 读取目录所有文件 在先前的文章中,我讨论了文件和目录的创建( 创建文件和目录 )以及选择( 列出和过滤目录内容 ). 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们. 这是 ...
- 知识图谱java实现_知识图谱:neo4j(四)Java API
知识图谱:neo4j(四)Java API 知识图谱:neo4j(四)Java API Neo4j Java API Neo4j 提供 JAVA API 以编程方式执行所有数据库操作.它支持两种类型的 ...
- 三星java面试_【面试问题】三星数据系统(西安)Java面试20190222
面试的问题顺序:前端 ----- 数据库 ---- 后端,一次面试也算是一次学习的机会. 1. 怎么隐藏一个div 答: 2.请求中乱码怎么处理 答: 3. 隔行变色怎么处理 答: 方法一 jQ ...
最新文章
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)可调用对象与function
- Struts2-向值栈中存放数据
- 括号匹配+Java栈
- 线程,代码和数据–多线程Java程序实际运行的方式
- linux相关英文书记,Linux常用软件(英文介绍)
- windows server 2003 IIS下配置PHP
- PostgreSQL备份恢复实现
- 基于JAVA+SpringMVC+MYSQL的求职招聘管理系统
- esri-leaflet入门教程(1)-leaflet介绍
- Hbase面试 描述 Hbase 中 scan 和 get 的功能以及实现的异同.
- Python调用科大讯飞语音合成离线SDK
- 循环输出100以内的素数
- 数值计算实验1 Matlab基础实验
- 阿里巴巴实习生 招聘内推
- HDU - 6287 口算训练 (二分+思维)
- LayoutManager实现翻页动画
- SAI创始人谈美股IPO:做清洁算力领域“特斯拉” 减少碳排放
- ThreadPoolExecutor(五)——线程池关闭相关操作
- [KDL库学习]KDL库安装与使用
- VS F12键失效怎么办?