Java实现Package编译和访问
Java实现Package编译和访问
说明
- 所有文件都是使用UTF-8编码来写的,请不要用Windows记事本随便打开
- Test.java文件中注释的方法说明了该类是不能访问其方法的
文件目录树
- bin
- Test1.class
- Test2.class
- Test3.class
- classes
- X
- Y
- A.class
- B.class
- Y
- X
- lib
- E.jar
- S
- T
- C.class
- D.class
- T
- S
- E.jar
- 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编译和访问的更多相关文章
- java带package的编译
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "java -cp d:\\TEST com/ ...
- Java包package之间调用问题-cmd运行窗口编译运行
问题:在使用了java包机制(package)后,编译出现错误:找不到或无法加载主类 xxx 的错误提示信息(各种编译不通过) 先给演示结果: 编译:javac -d classes src/a/He ...
- Java - 25 Java 包(package)
Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...
- Java学习笔记三十一:Java 包(package)
Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...
- 《 Java 编程思想》CH06 访问权限控制
访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 重构即重写代码,以使得它更可读,更容易理解,并因此而更具维护性. 在面向对象设计中需要考虑一个基本问题:"如何把 ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
- Java语言中有4种访问修饰符
转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...
- java之package与import
我就以package与import开始吧. package的作用其实就是c++的namespace的作用,防止名字相同的类产生冲突,只是实现的机制不一样,java编译器在编译时,直接根据package ...
- java 源码编译
Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(叫“编译器的前段”更准确)——把*.java文件转变成*.class文件的过程:也可能是虚拟机的后端运行期编译器( ...
随机推荐
- java 将页面指定区域截图并上传到服务器
controller层: /** * 上传获取到的收据图片 * @param request * @param data 获取到的图片 * @return */ @RequestMapping(val ...
- Django(四):model
一.创建model django.db.models是django自带的创建数据库的ORM. 在models.py中以继承models.Model创建表后,需要在setttngs中确保添加了当前应用, ...
- 使用css实现炫酷的横屏滚动效果
炫酷的横屏滚动效果css实现 DEMO: https://codepen.io/kobako/pen/BxVLLm 我们对滚动条都不陌生.平时浏览的网页,进度条通常是垂直方向的,内容从上往下排列.但是 ...
- C# 运算符 ++在前与++在后实例分析。
首先记住计算技巧“++在前先+1,++在后后+1”. static void Main(string[] args) { int i = 10; Console.WriteLine(i);//此时i的 ...
- Kriging插值计算
参考论文: http://people.ku.edu/~gbohling/cpe940 # -*- coding: utf-8 -*- # ----------------------- ...
- 使用Keras进行多GPU训练 multi_gpu_model
使用Keras训练具有多个GPU的深度神经网络(照片来源:Nor-Tech.com). 摘要 在今天的博客文章中,我们学习了如何使用多个GPU来训练基于Keras的深度神经网络. 使用多个GPU使我们 ...
- Spring框架学习之概述
一.什么是软件框架 打个比方就像建筑的混凝土框架,搭好了架子,工人只需要把墙填上. .特点: -半成品 -封装了特定的处理流程和控制逻辑 -成熟的,不断升级改造的软件 .框架和类库的区别 -框架一般是 ...
- Pig filter用法举例
filter:过滤数据,只有符合特定条件的数据才会被保留下来,然后进入下一个数据流. 1)等值比较 filter data by $0 == 1 filter data by $0 != 1 ...
- 【转】证书的应用之一 —— TCP&SSL通信实例及协议分析(下)
原文链接 前面两部分分别讲解了如何在.net程序中使用SSL实现安全通信以及SSL的通信过程,并通过抓包工具具体分析了ssl的握手过程,本文通过一个demo来模拟ssl协议,在TCP之上实现自己的安全 ...
- leetCode题解之字符最短路径解法2
1.题目描述 2.分析 之前使用的大循环再向两边寻找的算法是 O(n^2)复杂度的,可以利用 multimap降低其复杂度. 3.代码 vector<int> shortestToChar ...