关于package,import,和“找不到可以加载的主类”报错之间的关系
正在回顾java基础
目录结构如下:

一
以下代码,进入Example所在的文件夹, javac和java都不会报错
public class Example{
public static void main(String[] args){
System.out.println("test1");
}
}
二
以下代码,进入Example1所在的文件夹,javac不会报错,java会提示找不到主类
package com.test;
public class Example1{
public static void main(String[] args){
System.out.println("test1");
}
}
D:\book\com\test>javac Example1.java D:\book\com\test>java Example1
错误: 找不到或无法加载主类 Example1
三
二部分的报错的原理:
编译器在编译源文件时,不检查目录结构。如果编译的类中不依赖于其他包,就不会出现编译错误。但是最终程序无法运行,因为虚拟机找不到类文件。
将二部分的代码不做任何修改,修改进入的类的名称,在类名前加上package,javac和java都可以正常执行
D:\book>javac com/test/Example1.java D:\book>java com.test.Example1
test1
四
修改Example和Example1的代码,在Example中引用Example1这个类;
import com.test.Example1;
public class Example{
public static void main(String [] args){
System.out.println("test");
Example1 ex = new Example1();
ex.sayHello();
}
}
package com.test;
class Example1{
public void sayHello(){
System.out.println("hello~");
}
}
执行时会报错,说Example1不是公共的
D:\book>javac Example.java
Example.java:1: 错误: Example1在com.test中不是公共的; 无法从外部程序包中对其进行访问
import com.test.Example1;
五,
四报错的原因,是包的作用域。public可以被任意类使用,private只能被定义他们的类使用,不指定的可以被同一个保重的所有方法访问。
但是不同package之间,需要声明public字段,才可以跨包使用。
在Example1的代码中,将类定义为public,这样com.test包以外的类才可以引用
package com.test;
public class Example1{
public void sayHello(){
System.out.println("hello~");
}
}
执行是OK的
D:\book>javac Example.java D:\book>java Example
test
hello~
关于package,import,和“找不到可以加载的主类”报错之间的关系的更多相关文章
- webpack编译sass报错找不到module /css-loader/index.js... || 安装node-sass报错
今天无论在家还是在公司,安装node-sass总是失败,或安装成功了,使用webpack编译sass报错,说找不到module,按照提示的错误我找了node_modules下的css-loader,发 ...
- import com.sun.org.apache.xerces.internal.impl.dv.util.Base64报错
该类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用.但是在eclipse中直接使用却找不到该类. 以下是解决方法步骤: Properties-->JavaBulid Path ...
- oracle11g,安装失败,提示找不到文件,win7 64位下报错
提示: 未找到文件 E:\app\Administrator\product\11.2.0\dbhome_5\owb\external\oc4j_applications\applications\W ...
- Spring:Spring项目多接口实现类报错找不到指定类
spring可以通过applicationContext.xml进行配置接口实现类 applicationContext.xml中可以添加如下配置: 在application.properties中添 ...
- Spring中通过变量和import标签来控制加载哪些bean
需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean.在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到. 在spr ...
- 执行文件异常报错:ImportError: attempted relative import with no known parent package
这个问题困扰了我很久了,网上的解决方法都很一致,找来找去都是一样的解决方法,在导入包的文件和执行文件加入 1 print('__file__={0:<35} | __name__={1:< ...
- 在typescript中import第三方类库clipboard报错
一.问题 在实际开发项目中就遇到了这样的问题,需要在Vue+Typescript项目中添加复制文本的功能,就找了clipboard插件,先是新建了一个新的项目用来实验看看是否好用,都写好了以后发给别人 ...
- 之前的Android项目报错,新建Android项目报错,代码中找不到错误解决方案
打开一年前的东西,结果发现里面的android项目全部有个红叉,也找不到错误.新建一个项目也报错,首先确定自己的环境应该没问题,然后通过查看网上的资料,发现可能是debug的keystore到期啦. ...
- WebForm发布提示:无法加载或找不到oracle.dataaccess文件
出错提示: 在32位错做系统的开发机上引用了第三方插件(oracle的dataaccess)完成的项目,将发布的程序拷贝到64位的服务器上进行发布时提示无法加载或找不到dataaccess文件. 错误 ...
随机推荐
- java 线程池 ---- newSingleThreadExecutor()
class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...
- Android View的重绘过程之Layout
博客首页:http://www.cnblogs.com/kezhuang/p/ View绘制的三部曲,测量,布局,绘画现在我们分析布局部分测量部分在上篇文章中已经分析过了.不了解的可以去我的博客里找一 ...
- 谈谈git以及如何关联github
git :一款免费.开源的分布式代码版本管理控制系统 记录当前产品代码的所有版本信息,包括历史修改信息 方便快速回退到某一个具体的版本 方便团队协作开发 可检测代码冲突.合并代码等 1.利用 git ...
- SQL Server中将多行数据拼接为一行数据(一个字符串)
表A中id与表B中aid为一对多的关系 例如: 表A: id name a1 tom a2 lily a3 lucy 表B: id aid value b1 a1 B1 b2 a1 B2 b3 a2 ...
- Microsoft Deployment Toolkit build 8456
MDT build 8456的重大变化摘要. 支持的配置更新 Windows ADK for Windows 10,版本1809 Windows 10,版本1809 Configuration Man ...
- 史上最全的Spring-Boot-Starter开发手册
1.前面的话 我们都知道可以使用 SpringBoot 快速的开发基于 Spring 框架的项目.由于围绕 SpringBoot 存在很多开箱即用的 Starter 依赖,使得我们在开发业务代码时能够 ...
- Git使用注意事项
第一次用git时push时,突然想到我没有设置ssh key,却也可以push代码到自己仓库,那我本地登陆的账号Git是存在哪儿了呢? Git本地账户凭证管理 在第一次push到远程仓库时,git会提 ...
- vmware workstation安装教程以及其中出现的错误解决方法
VMware Workstation 安装教程 1 下载好虚拟机,然后运行,点击下一步 2 选择我接受,下一步 3 选择安装的位置,可以自己选择,也可以默认不更改,这个无影响(图中I:\下面的VM ...
- modelsim10.1a安装破解说明
安装包网盘下载链接:https://pan.baidu.com/s/1X9kUUXMCoikyjCQ_HKdD5g 提取码:3lfd 1.下载文件解压找到"modelsim-win32-10 ...
- 说说我心中的Linux系统
我不知道在阅读此篇文章的你,是一个什么样的人,或许你只是偶然看到此篇文章的路人,或许是对linux有兴趣但没接触过linux的圈外人,或许是已经入行没多久的菜鸟,或许是喜欢linux却学习不下去预备放 ...