Java实现Package编译和访问

说明

  1. 所有文件都是使用UTF-8编码来写的,请不要用Windows记事本随便打开
  2. Test.java文件中注释的方法说明了该类是不能访问其方法的

文件目录树

  • bin

    • Test1.class
    • Test2.class
    • Test3.class
  • classes
    • X

      • Y

        • A.class
        • B.class
  • lib
    • E.jar

      • S

        • T

          • C.class
          • D.class
  • src
    • A.java
    • B.java
    • C.java
    • D.java
    • Test1.java
    • Test2.java
    • Test3.java
  • Makefile

代码一览

/* A.java */
package X.Y; import java.util.*; public class A { public void sayPublic() {
System.out.println("Hi, " + this.getClass() + ". (public)");
} private void sayPrivate() {
System.out.println("Hi, " + this.getClass() + ". (private)");
} protected void sayProtected() {
System.out.println("Hi, " + this.getClass() + ". (protected)");
} void sayDefault() {
System.out.println("Hi, " + this.getClass() + ". (default)");
}
}
/* B.java */
package X.Y; import java.util.*; public class B { public void sayPublic() {
System.out.println("Hi, " + this.getClass() + ". (public)");
} private void sayPrivate() {
System.out.println("Hi, " + this.getClass() + ". (private)");
} protected void sayProtected() {
System.out.println("Hi, " + this.getClass() + ". (protected)");
} void sayDefault() {
System.out.println("Hi, " + this.getClass() + ". (default)");
}
}
/* C.java */
package S.T; import java.util.*; public class C { public void sayPublic() {
System.out.println("Hi, " + this.getClass() + ". (public)");
} private void sayPrivate() {
System.out.println("Hi, " + this.getClass() + ". (private)");
} protected void sayProtected() {
System.out.println("Hi, " + this.getClass() + ". (protected)");
} void sayDefault() {
System.out.println("Hi, " + this.getClass() + ". (default)");
}
}
/* D.java */
package S.T; import java.util.*; public class D { public void sayPublic() {
System.out.println("Hi, " + this.getClass() + ". (public)");
} private void sayPrivate() {
System.out.println("Hi, " + this.getClass() + ". (private)");
} protected void sayProtected() {
System.out.println("Hi, " + this.getClass() + ". (protected)");
} void sayDefault() {
System.out.println("Hi, " + this.getClass() + ". (default)");
}
}
/* Test1.java */
import java.util.*;
import X.Y.*;
import S.T.*; class Test1 {
public static void main(String[] args) {
A a = new A();
a.sayPublic();
//a.sayPrivate();
//a.sayProtected();
//a.sayDefault(); C c = new C();
c.sayPublic();
//c.sayPrivate();
//c.sayProtected();
//c.sayDefault();
}
}
/* Test2.java */
import java.util.*;
import X.Y.*;
import S.T.*; class Test2 extends B {
public static void main(String[] args) {
Test2 test2 = new Test2();
test2.sayPublic();
//test2.sayPrivate();
test2.sayProtected();
//test2.sayDefault();
}
}
/* Test3.java */
import java.util.*;
import X.Y.*;
import S.T.*; class Test3 extends D {
public static void main(String[] args) {
Test3 test3 = new Test3();
test3.sayPublic();
//test3.sayPrivate();
test3.sayProtected();
//test3.sayDefault();
}
}
/* Makefile */
target:
javac -encoding utf-8 ./src/A.java -d ./classes
javac -encoding utf-8 ./src/B.java -d ./classes
javac -encoding utf-8 ./src/C.java -d .
javac -encoding utf-8 ./src/D.java -d .
jar cvf ./lib/E.jar ./S/*
rm -rf ./S
javac -encoding utf-8 -classpath "./lib/E.jar;./classes;" ./src/Test1.java -d ./bin
javac -encoding utf-8 -classpath "./lib/E.jar;./classes;" ./src/Test2.java -d ./bin
javac -encoding utf-8 -classpath "./lib/E.jar;./classes;" ./src/Test3.java -d ./bin run-Test1:
java -classpath "./bin;./lib/E.jar;./classes;" Test1 run-Test2:
java -classpath "./bin;./lib/E.jar;./classes;" Test2 run-Test3:
java -classpath "./bin;./lib/E.jar;./classes;" Test3 clean:
rm -rf ./bin/*.class
rm -rf ./classes/*
rm -rf ./lib/*.jar

样例代码

传送门:下载

Java实现Package编译和访问的更多相关文章

  1. java带package的编译

    ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "java -cp d:\\TEST com/ ...

  2. Java包package之间调用问题-cmd运行窗口编译运行

    问题:在使用了java包机制(package)后,编译出现错误:找不到或无法加载主类 xxx 的错误提示信息(各种编译不通过) 先给演示结果: 编译:javac -d classes src/a/He ...

  3. Java - 25 Java 包(package)

    Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...

  4. Java学习笔记三十一:Java 包(package)

    Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...

  5. 《 Java 编程思想》CH06 访问权限控制

    访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 重构即重写代码,以使得它更可读,更容易理解,并因此而更具维护性. 在面向对象设计中需要考虑一个基本问题:"如何把 ...

  6. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

  7. Java语言中有4种访问修饰符

    转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...

  8. java之package与import

    我就以package与import开始吧. package的作用其实就是c++的namespace的作用,防止名字相同的类产生冲突,只是实现的机制不一样,java编译器在编译时,直接根据package ...

  9. java 源码编译

    Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(叫“编译器的前段”更准确)——把*.java文件转变成*.class文件的过程:也可能是虚拟机的后端运行期编译器( ...

随机推荐

  1. Hibernate中查询优化策略

    Hibernate查询优化策略 ² 使用延迟加载等方式避免加载多余数据 ² 通过使用连接查询,配置二级缓存.查询缓存等方式减少select语句数目 ² 结合缓存机制,使用iterate()方法减少查询 ...

  2. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  3. VS本地调试 Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储

    vs2017 调试一致都没啥问题,今天莫名报这个错误,感觉好奇怪,网上搜索了半天也没解决,最后看着错误信息感觉很诡异,我本地调试你给我启动远程调试监测器干嘛,localhost也访问不了,ping了一 ...

  4. jedis、jedisPool、jedisCluster的使用方法

    jedis 连接redis(单机): 使用jedis如何操作redis,但是其实方法是跟redis的操作大部分是相对应的. 所有的redis命令都对应jedis的一个方法     1.在macen工程 ...

  5. html打造动画【系列3】- 小猫笑脸动画

    猫咪容器 咱们每次画一个图片,肯定先要确定一个容器,几确定一下图形的位置和大小. <div class="mao_box"> <div class="m ...

  6. html打造动画【系列2】- 可爱的蛙蛙表情

    先感受一下全部表情包: 在开始之前先安利一个知识点:Flex弹性布局 我们一般做水平三列布局都是用的float方法,将每一块浮动显示在同一行.这种方法会导致元素没有原来的高度属性,要用清除浮动来解决空 ...

  7. vue实现上传上删除压缩图片

    <script> import {Config} from '@/config.js' import {mapState} from 'vuex' import {LocalData, t ...

  8. Solo 博客系统 1.7.0 发布 - 新版 MD 编辑器

    本次发布主要是更新了 Markdown 编辑器,加入了全屏.Emoji 自动完成.粘贴时自动转换为 MD 格式的特性.(1.7.0 版本变更记录请看这里) 目前的 Markdown 编辑器有多好用呢? ...

  9. Flutter学习之制作底部菜单导航

    简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面.就是说在界面的底部会有一排的按钮导航.可看下面的图示. 完成图示 程序工程目录 梳理下实现步骤我们需要实现这 ...

  10. zookeeper - java操作

    ZKUtils.java package test; import java.io.IOException; import java.util.concurrent.CountDownLatch; i ...