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. SpringBoot(五) Web Applications: MVC

    统一异常处理 SpringBoot的默认映射 /error 码云: commit: 统一异常处理+返回JSON格式+favicon.ico 文档: 28.1.11 Error Handling 参考 ...

  2. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...

  3. visibilitychange:API详解

    利用页面可见性API搞个怪 继各大站点.博客在用console发招聘.玩游戏.埋彩蛋之后(知乎相关链接),小剧似乎又发现了一个好玩儿的东西,目测会火,利用页面可见性API做些小技俩. 页面可见性是什么 ...

  4. Django之WSGI浅谈

    一.什么是Web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统. 浏览器与服务器之间发起HTTP请求: 1.浏览器发送一 ...

  5. 最好最实用的二次开发教程 cms

    ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...

  6. R中字符串操作

    简介 Stringr中包含3个主要的函数族 字符操作 空格处理 模式匹配 常用函数 在平常的数据分析工作中,经常要用到如下的函数 函数 操作 str_length() 获取字符串长度 str_sub( ...

  7. canvas验证码 - 随机字母数字

    基于canvas制作随机生成数字英文组合验证码效果,点击或刷新会自动重组.输入验证码提交验证效果代码. <div class="verification"> <i ...

  8. python 字符串格式化符号含义及注释

    字符串格式化符号含义 符号 说明 %C 格式化字符及其ASCII码 %S 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) ...

  9. 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题

    笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...

  10. shell_processing

    1.文本处理_2:grep,sed,awk 2.regular_expression 3.Test   一.文本处理_2 1.grep --Linux处理正则表达式的主要程序.正则表达式是一种符号表示 ...