JAVA基础-1:包与访问权限

包名与全限定名

    如果说存在于文件系统中的JAVA代码文件就像是一栋栋房屋,那么包路径就是这些房屋门牌号,JVM在扫描classpath下的文件,并将package名+class名拼接作为该类的全限定名(门牌号),格式如packageName.className,路径使用英文半角句号分割。

放代码:

PS E:\opt\applog\learn\scope> Get-Content .\Scope.java
package learn.scope;

public class Scope {

  public static void main(String[] args) {
      System.out.println("Hello world");
  }
}
PS E:\opt\applog\learn\scope> javac -encoding UTF-8 Scope.java
PS E:\opt\applog\learn\scope> java -classpath . Scope                                                                   
错误: 找不到或无法加载主类 Scope
PS E:\opt\applog\learn\scope> java -classpath . learn.scope.Scope    
错误: 找不到或无法加载主类 learn.scope.Scope
PS E:\opt\applog\learn\scope> cd ../../
PS E:\opt\applog> java -classpath . learn.scope.Scope
Hello world
PS E:\opt\applog> java -classpath . Scope
错误: 找不到或无法加载主类 Scope

    classpath的作用是指定类文件存在的路径,jvm会扫描这些路径和文件,然而在运行的时候,类名必须使用全限定名,且当前位置一定要是包的根路径,即从当前路径可以根据类的全限定名找到类文件。这也是jvm在保证类名不会重复的手段之一。
    经过这次联系,明确了jvm加载类时的路径问题及类的包名对于类的重要性。

访问权限

    介绍完包和全限定名,与之相关的访问权限问题就随之而来。JAVA中的访问权限有以下几种

  1. public
  2. protected
  3. 默认(无声明)
  4. private
public protected 默认 private
同一个类文件
相同包中子类
相同包中非子类
不同包中的子类
不同包中的非子类

    此访问权限规则同样适用于继承时子类访问父类方法的场景

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。