• 关于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:ookcom	est>javac Example1.java
    
    D:ookcom	est>java Example1
    错误: 找不到或无法加载主类 Example1
    

      

      

      二部分的报错的原理:

      编译器在编译源文件时,不检查目录结构。如果编译的类中不依赖于其他包,就不会出现编译错误。但是最终程序无法运行,因为虚拟机找不到类文件。

      将二部分的代码不做任何修改,修改进入的类的名称,在类名前加上package,javac和java都可以正常执行

    D:ook>javac com/test/Example1.java
    
    D:ook>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:ook>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:ook>javac Example.java
    
    D:ook>java Example
    test
    hello~
    

     

     

  • 相关阅读:
    fopen和open的区别
    vc代码缩进
    防止u盘中autorun的一个小方法
    判断单链表是否有环
    四色原理
    Log4j的使用
    Ant学习笔记
    关于Oracle Exp00003问题的解决方法
    装机小记
    用iframe做编辑器
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/10207728.html
Copyright © 2020-2023  润新知