「树根JAVA」树根怎么画

博主:adminadmin 2022-11-29 01:57:08 41

本篇文章给大家谈谈树根JAVA,以及树根怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 构建二叉树

首先我想问为什么要用LinkedList 来建立二叉树呢? LinkedList 是线性表,

树是树形的, 似乎不太合适。

其实也可以用数组完成,而且效率更高.

关键是我觉得你这个输入本身就是一个二叉树啊,

String input = "ABCDE F G";

节点编号从0到8. 层次遍历的话:

对于节点i.

leftChild = input.charAt(2*i+1); //做子树

rightChild = input.charAt(2*i+2);//右子树

如果你要将带有节点信息的树存到LinkedList里面, 先建立一个节点类:

class Node{

public char cValue;

public Node leftChild;

public Node rightChild;

public Node(v){

this.cValue = v;

}

}

然后遍历input,建立各个节点对象.

LinkedList tree = new LinkedList();

for(int i=0;i input.length;i++)

LinkedList.add(new Node(input.charAt(i)));

然后为各个节点设置左右子树:

for(int i=0;iinput.length;i++){

((Node)tree.get(i)).leftChild = (Node)tree.get(2*i+1);

((Node)tree.get(i)).rightChild = (Node)tree.get(2*i+2);

}

这样LinkedList 就存储了整个二叉树. 而第0个元素就是树根,思路大体是这样吧。

什么是Java内容仓库

java内容仓库是JSR-170中定义的一个内容存储的规范。JSR-170试图建立一套标准的API去访问内容仓库。如果你对内容管理系统(CMS)不熟悉的话,你一定会对内容仓库是什么感到疑惑。你可以这样去理解,把内容仓库理解为一个用来存储文本和二进制数据(图片,word文档,PDF等等)的数据存储应用程序。一个显著的特点是你不用关心你真正的数据到底存储在什么地方,是关系数据库?是文件系统?还是XML?不仅仅是数据的存储和读取,大多数的内容仓库还提供了更加高级的功能,例如访问控制,查找,版本控制,锁定内容等等。

用java求最短路径问题,求源程序

import java.util.Vector;

public class Link {

private Vector link = new Vector();

// private Link next = null;

public Link() {

}

public boolean addNode(Node setNode){//增加一个节点

setNode = checkNode(setNode);

if(setNode != null){

this.link.addElement((Node)setNode);

return true;

}

return false;

}

public void delNode(Node setNode){ //删除一个节点

if(!this.link.isEmpty()){

for(int i=0;i this.link.size(); i++)

{

if(setNode.getPos() == ((Node)this.link.elementAt(i)).getPos()){

this.link.remove(i);

//System.out.println("asdfasdfas:"+this.link.size());

break;

}

}

}

}

public Node checkNode(Node setNode){//判断节点是否在链表里面并取得两者的最佳值

if(!this.link.isEmpty() setNode!=null){

for(int i=0;i this.link.size(); i++)

{

if(setNode.getPos() == ((Node)this.link.elementAt(i)).getPos()){

if(setNode.getStep() ((Node)this.link.elementAt(i)).getStep()){

setNode = (Node)this.link.elementAt(i);

this.link.remove(i);

}

else

return null;

break;

}

}

}

return setNode;

}

public boolean isEmpty(){

return this.link.isEmpty();

}

public Node getBestNode(){ //得到最好的节点

Node tmpNode = null;

if(!this.link.isEmpty()){

tmpNode = (Node)this.link.elementAt(0);

//System.out.println("tmpNodeStep:"+tmpNode.getStep());

//System.out.print("OpenNode(pos,step):");

for(int i=1;i this.link.size(); i++)

{

//System.out.print("("+((Node)this.link.elementAt(i)).getPos()+","+((Node)this.link.elementAt(i)).getStep()+")");

if(tmpNode.getJudgeNum() = ((Node)this.link.elementAt(i)).getJudgeNum()){

tmpNode = (Node)this.link.elementAt(i);

}

}

}

return tmpNode;

}

}

public class FindBestPath {

private char[][] map = null;//地图

private int maxX,maxY;//最大的地图边界大小

Node startNode = null;//入口

Node endNode = null;//出口

private int endX,endY;

/*初始化

*@param setMap 地图

*@param setX,setY 边界值

//////////*@param startNode 入口

//////////*param endNode 出口

*@param sX,sY:开始点

*@param eX,eY:结束点

*/

public FindBestPath(char[][] setMap,int setX,int setY,int sX,int sY,int eX,int eY) {

this.map = setMap;

this.maxY = setX - 1; //x,y互换

this.maxX = setY - 1; //x,y互换

//this.startNode = sNode;

//this.endNode = eNode;

Node sNode = new Node();

Node eNode = new Node();

sNode.setFarther(null);

sNode.setPos(posToNum(sX,sY));

sNode.setStep(0);

eNode.setPos(posToNum(eX,eY));

this.startNode = sNode;

this.endNode = eNode;

this.endX = eX;//numToX(eNode.getPos());

this.endY = eY;//numToY(eNode.getPos());

}

public int posToNum(int x,int y){//从xy坐标获得编号

return (x+y*(this.maxY+1));

}

public int numToX(int num){//从编号获得x坐标

return (num%(this.maxY+1));

}

public int numToY(int num){//从编号获得y坐标

return (int)(num/(this.maxY+1));

}

public boolean checkVal(int x,int y){//判断是否为障碍

//System.out.println("map["+x+"]["+y+"]="+map[x][y]);

if(this.map[x][y] == 'N')

return false;

else

return true;

}

public int judge(Node nowNode){//一定要比实际距离小

//System.out.println("nowNodePos:"+nowNode.getPos());

int nowX = numToX(nowNode.getPos());

int nowY = numToY(nowNode.getPos());

int distance = Math.abs((nowX-this.endX))+Math.abs((nowY-this.endY));

// System.out.println("distance:"+distance);

return distance;

}

public Node getLeft(Node nowNode){//取得左节点

int nowX = numToX(nowNode.getPos());

int nowY = numToY(nowNode.getPos());

Node tmpNode = new Node();

if(nowY 0){//判断节点是否到最左

if(checkVal(nowX,nowY-1)){

tmpNode.setFarther(nowNode);

tmpNode.setPos(posToNum(nowX,nowY-1));

tmpNode.setStep(nowNode.getStep()+1);

tmpNode.setJudgeNum(tmpNode.getStep()+judge(tmpNode));

return tmpNode;

}

}

return null;

}

public Node getRight(Node nowNode){//取得右节点

int nowX = numToX(nowNode.getPos());

int nowY = numToY(nowNode.getPos());

Node tmpNode = new Node();

if(nowY this.maxX){//判断节点是否到最左

if(checkVal(nowX,nowY+1)){

tmpNode.setFarther(nowNode);

tmpNode.setPos(posToNum(nowX,nowY+1));

tmpNode.setStep(nowNode.getStep()+1);

tmpNode.setJudgeNum(tmpNode.getStep()+judge(tmpNode));

return tmpNode;

}

}

return null;

}

public Node getTop(Node nowNode){//取得上节点

int nowX = numToX(nowNode.getPos());

int nowY = numToY(nowNode.getPos());

Node tmpNode = new Node();

if(nowX 0){//判断节点是否到最左

if(checkVal(nowX-1,nowY)){

tmpNode.setFarther(nowNode);

tmpNode.setPos(posToNum(nowX-1,nowY));

tmpNode.setStep(nowNode.getStep()+1);

tmpNode.setJudgeNum(tmpNode.getStep()+judge(tmpNode));

return tmpNode;

}

}

return null;

}

public Node getBottom(Node nowNode){//取得下节点

int nowX = numToX(nowNode.getPos());

int nowY = numToY(nowNode.getPos());

Node tmpNode = new Node();

if(nowX this.maxY){//判断节点是否到最左

if(checkVal(nowX+1,nowY)){

tmpNode.setFarther(nowNode);

tmpNode.setPos(posToNum(nowX+1,nowY));

tmpNode.setStep(nowNode.getStep()+1);

tmpNode.setJudgeNum(tmpNode.getStep()+judge(tmpNode));

return tmpNode;

}

}

return null;

}

public Link getBestPath(){//寻找路径

Link openLink = new Link();//没有访问的路径

Link closeLink = new Link();//访问过的路径

Link path = null;//最短路径

Node bestNode = null;

Node tmpNode = null;

openLink.addNode(this.startNode);

while(!openLink.isEmpty())//openLink is not null

{

bestNode = openLink.getBestNode();//取得最好的节点

//System.out.println("bestNode:("+numToX(bestNode.getPos())+","+numToY(bestNode.getPos())+")step:"+bestNode.getJudgeNum());

if(bestNode.getPos()==this.endNode.getPos())

{

/*this.endNode.setStep(bestNode.getStep()+1);

this.endNode.setFarther(bestNode);

this.endNode.setJudgeNum(bestNode.getStep()+1);*/

path = makePath(bestNode);

break;

}

else

{

tmpNode = closeLink.checkNode(getLeft(bestNode));

if(tmpNode != null)

//System.out.println("("+numToY(tmpNode.getPos())+","+numToX(tmpNode.getPos())+")");

openLink.addNode(tmpNode);

tmpNode = closeLink.checkNode(getRight(bestNode));

if(tmpNode != null)

// System.out.println("("+numToY(tmpNode.getPos())+","+numToX(tmpNode.getPos())+")");

openLink.addNode(tmpNode);

tmpNode = closeLink.checkNode(getTop(bestNode));

if(tmpNode != null)

// System.out.println("("+numToY(tmpNode.getPos())+","+numToX(tmpNode.getPos())+")");

openLink.addNode(tmpNode);

tmpNode = closeLink.checkNode(getBottom(bestNode));

if(tmpNode != null)

// System.out.println("("+numToY(tmpNode.getPos())+","+numToX(tmpNode.getPos())+")");

openLink.addNode(tmpNode);

openLink.delNode(bestNode);

closeLink.addNode(bestNode);

}

}

return path;

}

public Link makePath(Node lastNode){//制造路径

Link tmpLink = new Link();

Node tmpNode = new Node();

int x,y;

tmpNode = lastNode;

if(tmpNode != null){

do{

x=numToX(tmpNode.getPos());

y=numToY(tmpNode.getPos());

System.out.println("map["+x+"]["+y+"]="+map[x][y]);

tmpLink.addNode(tmpNode);

tmpNode = tmpNode.getFarther();

}while(tmpNode != null);

}else

{

System.out.println("Couldn't find the path!");

}

return tmpLink;

}

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

char[][] map ={

{'Y', 'N', 'z', 'y', 'x', 'w', 'v', 'N', 'N', 'N'},

{'Y', 'N', '1', 'N', 'N', 'N', 'u', 't', 'N', 'N'},

{'N', '1', '2', '1', '1', '1', 'N', 's', 'N', 'N'},

{'N', 'N', '1', 'N', '9', 'N', 'q', 'r', 'N', 'N'},

{'N', 'N', '1', 'N', 'n', 'o', 'p', 'N', 'N', 'N'},

{'N', '4', '5', '6', 'm', 'N', 'N', 'N', 'N', 'N'},

{'N', '3', 'N', '5', 'l', 'k', 'j', 'N', 'N', 'N'},

{'N', 'N', '3', '4', 'N', 'd', 'i', 'd', 'N', 'N'},

{'N', '1', 'N', 'N', '1', 'N', 'h', 'N', 'N', 'N'},

{'N', '1', 'N', 'N', '1', 'N', 'g', 'N', 'N', 'N'},

{'N', 'a', 'b', 'c', 'd', 'e', 'f', 'N', 'N', 'N'}

};

/*map[x][y]

*如上所示:maxY=10 maxX=11 横的代表maxY,竖的代表maxX 可以自己替换

*地图的读取是

*for(i=1;i行的最大值;i++)

* for(j=1;j列的最大值;j++)

* map[i][j] = 地图[i][j]

*/

Link bestPath = new Link();

/*startNode.setFarther(null);

startNode.setPos(21);

startNode.setStep(0);

//endNode.setFarther(startNode);

endNode.setPos(79);

//endNode.setStep(0);*/

FindBestPath path = new FindBestPath(map, 11, 10, 10, 1, 0, 2);

//FindBestPath path = new FindBestPath(map, 11, 10, startNode, endNode);

bestPath = path.getBestPath();

//bestPath.printLink();

}

}

public class Node {

private int step;//从入口到该节点经历的步数

private int pos;//位置

private Node farther;//上一个结点

private int judgeNum;

public Node() {

}

public void setStep(int setStep){

this.step = setStep;

}

public int getStep(){

return this.step;

}

public void setPos(int setPos){

this.pos = setPos;

}

public int getPos(){

return this.pos;

}

public void setFarther(Node setNode){

this.farther = setNode;;

}

public Node getFarther(){

return this.farther;

}

public void setJudgeNum (int setInt){

this.judgeNum = setInt;;

}

public int getJudgeNum(){

return this.judgeNum;

}

}

简单的JAVA多叉树问题实现

TreeNode.java

/*

 * Copyright Walker Studio

 * All Rights Reserved.

 * 

 * 文件名称: TreeNode.java

 * 摘 要:

 * 作 者: Walker

 * 创建时间: 2013-03-19

 */

package com.walker.commons.data.model;

/**

 * 树节点

 * 

 * @author Walker

 * @version 1.0.0.0

 */

public class TreeNode 

{

/** 节点Id*/

private String nodeId;

/** 父节点Id*/

private String parentId;

/** 文本内容*/

private String text;

/**

 * 构造函数

 * 

 * @param nodeId 节点Id

 */

public TreeNode(String nodeId)

{

this.nodeId = nodeId;

}

/**

 * 构造函数

 * 

 * @param nodeId 节点Id

 * @param parentId 父节点Id

 */

public TreeNode(String nodeId, String parentId)

{

this.nodeId = nodeId;

this.parentId = parentId;

}

public String getNodeId() {

return nodeId;

}

public void setNodeId(String nodeId) {

this.nodeId = nodeId;

}

public String getParentId() {

return parentId;

}

public void setParentId(String parentId) {

this.parentId = parentId;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

}

ManyTreeNode.java

/*

 * Copyright Walker Studio

 * All Rights Reserved.

 * 

 * 文件名称: ManyTreeNode.java

 * 摘 要:

 * 作 者: Walker

 * 创建时间: 2013-03-19

 */

package com.walker.commons.data.model;

import java.util.ArrayList;

import java.util.List;

/**

 * 多叉树节点

 *

 * @author Walker

 * @verion 1.0.0.0

 */

public class ManyTreeNode 

{

/** 树节点*/

private TreeNode data;

/** 子树集合*/

private ListManyTreeNode childList;

/**

 * 构造函数

 * 

 * @param data 树节点

 */

public ManyTreeNode(TreeNode data)

{

this.data = data;

this.childList = new ArrayListManyTreeNode();

}

/**

 * 构造函数

 * 

 * @param data 树节点

 * @param childList 子树集合

 */

public ManyTreeNode(TreeNode data, ListManyTreeNode childList)

{

this.data = data;

this.childList = childList;

}

public TreeNode getData() {

return data;

}

public void setData(TreeNode data) {

this.data = data;

}

public ListManyTreeNode getChildList() {

return childList;

}

public void setChildList(ListManyTreeNode childList) {

this.childList = childList;

}

}

ManyNodeTree.java

/*

 * Copyright Walker Studio

 * All Rights Reserved.

 * 

 * 文件名称: ManyNodeTree.java

 * 摘 要:

 * 作 者: Walker

 * 创建时间: 2013-03-19

 */

package com.walker.commons.data.model;

import java.util.ArrayList;

import java.util.List;

/**

 * 多叉树生成、遍历工具

 * 

 * @author Walker

 * @version 1.0.0.0

 */

public class ManyNodeTree 

{

/** 树根*/

private ManyTreeNode root;

/**

 * 构造函数

 */

public ManyNodeTree()

{

root = new ManyTreeNode(new TreeNode("root"));

}

/**

 * 生成一颗多叉树,根节点为root

 * 

 * @param treeNodes 生成多叉树的节点集合

 * @return ManyNodeTree

 */

public ManyNodeTree createTree(ListTreeNode treeNodes)

{

if(treeNodes == null || treeNodes.size()  0)

return null;

ManyNodeTree manyNodeTree =  new ManyNodeTree();

//将所有节点添加到多叉树中

for(TreeNode treeNode : treeNodes)

{

if(treeNode.getParentId().equals("root"))

{

//向根添加一个节点

manyNodeTree.getRoot().getChildList().add(new ManyTreeNode(treeNode));

}

else

{

addChild(manyNodeTree.getRoot(), treeNode);

}

}

return manyNodeTree;

}

/**

 * 向指定多叉树节点添加子节点

 * 

 * @param manyTreeNode 多叉树节点

 * @param child 节点

 */

public void addChild(ManyTreeNode manyTreeNode, TreeNode child)

{

for(ManyTreeNode item : manyTreeNode.getChildList())

{

if(item.getData().getNodeId().equals(child.getParentId()))

{

//找到对应的父亲

item.getChildList().add(new ManyTreeNode(child));

break;

}

else

{

if(item.getChildList() != null  item.getChildList().size()  0)

{

addChild(item, child);

}

}

}

}

/**

 * 遍历多叉树 

 * 

 * @param manyTreeNode 多叉树节点

 * @return 

 */

public String iteratorTree(ManyTreeNode manyTreeNode)

{

StringBuilder buffer = new StringBuilder();

buffer.append("\n");

if(manyTreeNode != null) 

{

for (ManyTreeNode index : manyTreeNode.getChildList()) 

{

buffer.append(index.getData().getNodeId()+ ",");

if (index.getChildList() != null  index.getChildList().size()  0 ) 

{

buffer.append(iteratorTree(index));

}

}

}

buffer.append("\n");

return buffer.toString();

}

public ManyTreeNode getRoot() {

return root;

}

public void setRoot(ManyTreeNode root) {

this.root = root;

}

public static void main(String[] args)

{

ListTreeNode treeNodes = new ArrayListTreeNode();

treeNodes.add(new TreeNode("系统权限管理", "root"));

treeNodes.add(new TreeNode("用户管理", "系统权限管理"));

treeNodes.add(new TreeNode("角色管理", "系统权限管理"));

treeNodes.add(new TreeNode("组管理", "系统权限管理"));

treeNodes.add(new TreeNode("用户菜单管理", "系统权限管理"));

treeNodes.add(new TreeNode("角色菜单管理", "系统权限管理"));

treeNodes.add(new TreeNode("用户权限管理", "系统权限管理"));

treeNodes.add(new TreeNode("站内信", "root"));

treeNodes.add(new TreeNode("写信", "站内信"));

treeNodes.add(new TreeNode("收信", "站内信"));

treeNodes.add(new TreeNode("草稿", "站内信"));

ManyNodeTree tree = new ManyNodeTree();

System.out.println(tree.iteratorTree(tree.createTree(treeNodes).getRoot()));

}

}

什么是JAVA内容仓库

Java内容仓库是JSR-170中定义的一个内容存储的规范。内容仓库由一组 workspace(工作空间)组成,这些workspace通常应该包含相似的内容。一个内容仓库有一个到多个 workspace。每个workspace都是一个树状结构,都有一个唯一的树根节点(root node)。树上的item(元素)或者是个node(节点)或者是个property(属性)。每个node都可以有零个到多个子节点和零个到多个子属性。只有根节点没有父节点,其余所有的节点都有一个父节点。property 也必须有一个父节点,但它没有子节点或是子属性,property 是叶子元素。property是真正存储数据的元素。

java程序添上包就不能运行了,为什么?

将生成的class 文件放到文件夹wo 下面

然后使用java wo/Helloword 解释运行。。

下面是我在网络上看到的一篇文章,感觉不错! 贴上来给你!

1,什么都别说,先跟着我来做一把

我们先找一个目录,比如C:\myjob

然后我们建立两个目录,一个叫做src,一个叫做bin

C:\myjobmd src

C:\myjobmd bin

C:\myjobdir

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\myjob 的目录

2005-12-25 14:33 DIR .

2005-12-25 14:33 DIR ..

2005-12-25 14:34 DIR src

2005-12-25 14:34 DIR bin

0 个文件 0 字节

4 个目录 305,123,328 可用字节

C:\myjob

然后我们在src目录中去写程序

C:\myjobcd src

C:\myjob\src

我们写这么4个java文件

////A.java

package com.lightning;

public class A{

{System.out.println("com.lightning.A");}

}

////B.java

package com.lightning;

public class B{

{System.out.println("com.lightning.B");}

}

////C.java

package com;

public class C{

{System.out.println("com.C");}

}

////Test.java

package net.test;

import com.lightning.*;

import com.*;

public class Test{

public static void main(String[] args)

{

new A();new B();new C();

System.out.println("net.test.Test");

}

}

写好之后就是这样

C:\myjob\srcdir

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\myjob\src 的目录

2005-12-25 14:34 DIR .

2005-12-25 14:34 DIR ..

2005-12-25 14:39 86 A.java

2005-12-25 14:40 86 B.java

2005-12-25 14:42 194 Test.java

2005-12-25 14:43 68 C.java

4 个文件 434 字节

2 个目录 305,106,944 可用字节

然后我们建立com目录,com\lightning\目录,net\test\目录

C:\myjob\srcmd com

C:\myjob\srcmd com\lightning

C:\myjob\srcmd net\test\

我们将Test.java放入net\test\中去

将A.java,B.java放入com\lightning\中去

将C.java放入com\中去

C:\myjob\srcmove Test.java net\test\

C:\myjob\srcmove A.java com\lightning\

C:\myjob\srcmove B.java com\lightning\

C:\myjob\srcmove C.java com\

然后我们在c:\myjobs中发令:

C:\myjob\srccd ..

C:\myjobjavac -sourcepath src -d bin src\net\test\Test.java

然后我们看看bin目录中多了什么

C:\myjobdir bin /s

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\myjob\bin 的目录

2005-12-25 14:34 DIR .

2005-12-25 14:34 DIR ..

2005-12-25 14:46 DIR net

2005-12-25 14:46 DIR com

0 个文件 0 字节

C:\myjob\bin\net 的目录

2005-12-25 14:46 DIR .

2005-12-25 14:46 DIR ..

2005-12-25 14:46 DIR test

0 个文件 0 字节

C:\myjob\bin\net\test 的目录

2005-12-25 14:46 DIR .

2005-12-25 14:46 DIR ..

2005-12-25 14:46 520 Test.class

1 个文件 520 字节

C:\myjob\bin\com 的目录

2005-12-25 14:46 DIR .

2005-12-25 14:46 DIR ..

2005-12-25 14:46 DIR lightning

2005-12-25 14:46 338 C.class

1 个文件 338 字节

C:\myjob\bin\com\lightning 的目录

2005-12-25 14:46 DIR .

2005-12-25 14:46 DIR ..

2005-12-25 14:46 354 A.class

2005-12-25 14:46 354 B.class

2 个文件 708 字节

所列文件总数:

4 个文件 1,566 字节

14 个目录 305,057,792 可用字节

然后我们执行,同样在c:\myjobs\下发令

C:\myjobjava -cp bin net.test.Test

com.lightning.A

com.lightning.B

com.C

net.test.Test

2,从实践到理论

刚才我用一个非常简单但是非常完整的例子给大家演示了java的package机制。

为什么以前脑海里面那么简单的javac会搞得这么复杂呢?

实际上它本就这么复杂,

并不是一个.java,一行javac一个当前目录中的class这么简单。

首先我要打破一些东西,然后才好建立一些东西。

javac并非只是给一个.java编译一个class的。javac自带有make机制,也就是说,如果在

javac的参数中java文件使用到的任何类,javac首先会去找寻这个类的class文件存在与否

,如果不存在,就会在sourcepath中找寻源代码文件来编译。

什么是sourcepath呢?sourcepath是javac的一个参数,如果你不加指定,那么sourcepath

就是classpath。

比如我们装好jdk之后,我说过不要设定classpath环境变量,因为大部分人一旦设定了

classpath,不是多此一举把什么dt.jar放进去。(我可以好好打击你一下,告诉你一个可

悲的事实——jre永远不会从你这个classpath中去寻找dt.jar。你完全是徒劳的!)就是

把"."搞不见了,搞得是冷水一盆盆的往自己身上泼,脑袋一点点的涨大。

不要设!classpath没有你想象中那么普适和强大,它只是命令行的简化替代品。

你不设的话它就是"."。

回到sourcepath,sourcepath指的是你源代码树的存放地点。

为什么是源代码树?而不是一个目录的平板源代码呢?

请大家将原本脑海中C的编译过程完全砸掉!

java完全不同,java没有头文件,每个.java都是要放在源代码树中的。

那么这颗树是怎么组织的呢?

对了,就是package语句。

比如写了package com.lightning;

那么这个.java就必须放在源代码树根\的com\lighting\之下才行。

很多浮躁的初学者被default打包方式宠坏了。自我为中心,以为java就是一套库,自己写

的时候最多import进来就行了,代码从不打包,直接javac,直接java,多么方便。

孰不知自己写的这个.java也不过是java大平台的其中一个小单元而已。如果不打包,

我写一个Point,你写一个Point,甚至更有甚者敢于给自己的类起名叫String等等。

全部都在平板式的目录中,那jre该选哪一个?

一旦要使用package语句,就要使用代码树结构,当然,你要直接javac,也行。

不过javac出来的这个class要放在符合package结构的目录中才能发挥正常作用,否则就是

废物一坨。

而且,如果你这个.java还用到其它自己写的有package语句的.java,那这个方法就回天乏

术了。

按照sun的想象,应该是写好的.java放在符合package结构的目录中,package语句保证了

正确放置,如果目录位置和package语句中指示的不同,则会出错。

所以按照刚才我们的那种package写法,我们必然要将那几个.java文件放入相应的目录中

才能让javac顺利找到他们来make。

有人说javac可不可以像java那样 java aaa.bbb.c...java?

不可以

javac中的那个.java文件参数必须是一个文件系统的路径文件名形式。

然后如果用到其它的.java,javac会根据目前的sourcepath出发寻找目录结构中的那些

java文件。

当然了,既然打了包,在使用的时候。

要么写全名——包名.类名

或者使用import

不得不提的是,import就好比c++的using,它不负责做文件操作,它只是方便你写代码。

另外import语句中的*代表的是类名,不代表包名片断。

你import com.*;

编译器仍然找不到com.lightning中的任何类。

反之亦然。

就好象你告诉编译器,我这里面要用到姓诸葛的人。

那么姓诸的人当然编译器不会认为也包含在内。

所以,如果程序一旦写到一定规模。

就不得不使用ant来管理这些。

或者使用IDE,否则jdk就真的变成了java developer killer。

但是对于初学者,在了解为什么会有ant之类的之前,还是要体会一下使用

jdk的艰辛。

这个和以前在unix上开发的人用gcc命令行到后来使用make之后使用ide

之类的时候的体会是类似的。

最后,javac的-d参数是指示编译出来的class文件放在哪里的,如果你不指定的话,它们

和.java混在一起。当然也符合目录结构。

树根JAVA的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于树根怎么画、树根JAVA的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。