CSDN向来是以娱乐精神出名的。有网友曾笑谈:“当我无聊,当我猥琐的时候,上CSDN,总是能找到组织。”这话基本没错。
曾经数次导演编程语言PK的CSDN,今天又发表了篇很娱乐很有导火索的文章
作者很娱乐地写了堆代码来验证Java不比C语言快,留言的高手们也很娱乐地来继续声讨。
孰是孰非我也不关心,Java和C的快慢以前也层写过一些所谓的计算程序比较过,JVM的Hostspot机制,在这种小打小闹的“测试”下确实威力巨大。有时还真的会比完成相同计算任务的C程序快。但是不要忘了真刀真枪的环境,大型应用光一个GC就足可让Java落后C写的本地代码一大截!
无聊无聊
posted @
2007-06-06 22:39 murainwood 阅读(258) |
评论 (0) |
编辑 收藏
高级接口封装变成了底层接口,需求几天之内就能完全变个样,真是奇迹!
剩下一个月不到了,咬咬牙,边干活边写论文吧。
Dido这几天也很累,每天短信哄她睡觉,很让人心疼的女孩儿。
posted @
2007-06-06 20:08 murainwood 阅读(206) |
评论 (0) |
编辑 收藏
口袋里仅剩下20块零五毛的时候,突然发现了钱的重要。
于是给人做了两个小程序,前后总共大概花了三天,拿了1000块到手。学院还欠自己600块的项目补助。不知道何时才能到账上。一向不愿意计算口袋里的钱,这回终于窘迫起来。
赚了点小米,毕业还有一个月不到,先撑过去。晚上和人吃饭,笑谈一个局域网流量计费的活儿。开玩笑说一周时间,优惠价2000。怕要真有活儿,一周时间搞不定吧。说大话容易,做起来是另外回事。Dido说我有时喜欢说大话,我承认。
论文写了七千字,继续努力。
上海,我来了。虽然第一份工作并没有想象中的好,但是,会硬着头皮撑下去。生活给的是挑战,喜欢挑战。
posted @
2007-06-05 01:25 murainwood 阅读(217) |
评论 (0) |
编辑 收藏
631所的项目已经开始了两个月了.现在还是在做运行代理这一模块.我算是搞核心编码吧.被JNI,Socket,Thread,RMI整得晕乎着呢.
没有考试压力,没有就业压力.一切都平静得很.每天睡六小时.两杯咖啡(早晨中午各一杯).三天一包烟.中午是两节玉米外加一大片菠萝.两天BT一部电影.
一天上班7个半小时,晚上看书3小时.喜欢现在的宁静.宁静得如水一样.
posted @
2007-01-13 12:58 murainwood 阅读(223) |
评论 (0) |
编辑 收藏
三方协议寄出去了,没正式回到手里,学院没盖章之前,还是有些小小的不放心.^_^,毕竟回上海的机会太难得了.
上海不是我家,可对我而言,对于一个远在西北求学的人而言,至少是家门口了那天打电话告诉妈妈,听得出来,她非常高兴.
现在才发现自己没有想象中那么豁达,以为很多事情能放得开.以为天下之大,到处可以容身.是的,天下是很大,可是我能容身的地方却不是如此.总有张网,心里一张网把我网住. 记得有人说过,牢笼是自己造的. 很有道理,但是我却愿意囚禁在这笼子里.
一片没边际的天,有几个人真正敢去接受?
打定主意回去,未来怎么样,我没法去想. 最起码,回去,能给未来一个模糊可能性,我的要求不高.知足了.
看着办吧,一切都如田野里的百合,自然就会开的.
我所要做的,只是去呼吸,去汲取,去晒太阳!
posted @
2006-11-19 06:09 murainwood|
编辑 收藏
今天开始复习专业课,无聊的宣讲会或招聘会一律不参加!
posted @
2006-10-21 06:19 murainwood 阅读(249) |
评论 (0) |
编辑 收藏
编程求解: 运动员打靶,10发子弹命中90环(每分成绩为0到10环不等)
求可能情况的总数
解法一:
#include <stdio.h>
#include <stdlib.h>
int f(int n, int m)
{
int fn=0,i;
if(m<0||m>10*n) return 0;
if(n==1) return 1;
for(i=0;i<=10;i++)
fn+=f(n-1,m-i);
return fn;
}
int main()
{
int n,m;
printf("Please enter n and m:");
scanf("%d%d",&n,&m);
printf("\n%d发打中%d环有%d种可能.\n",n,m,f(n,m));
system("PAUSE");
return 0;
}
解法二:
#include"stdio.h"
int main(){
int num =1,i;
for(i=1;i<=10;i++)
num = num *(9+i)/i;
printf("%d",num);
}
个人观点:
计算机是一门和数学相关的学科,随着这门学科的发展,这种"本质"似乎被弱化了.解法1是很普通的方法,一般人都是这种思路.而解法二则是从数学角度考虑.简洁,快速.
上次去神码笔试,碰到一题
:给定一个数,如7899,把各位数值相加7+8+9+9=33,3+3=6,用这种方法计算机下去,求最后得到的个位数
我给出的解法:
#include "stdio.h"
int main(){
int i;
scanf("%d",&i);
printf("%d",i%9==0?9:i%9);
return 0
}//~end
posted @
2006-10-15 18:15 murainwood 阅读(302) |
评论 (1) |
编辑 收藏
有6个英文字母,a,b,c ,d,e,f
从中任意取N个(N<=6)来排列.
已知 a 只能与 b 相连,
b不能和e,f相连
c不能和a相连
d不能和 a ,e相连
f 不能和 a,b相连
请打印出字母f或b 在末尾的组合顺序,用Java实现
我的解答:
import java.util.*;
/**
*
* @author ShenXiaoliang
*
*/
public class DemoGraph {
final static int VERTICE=6;
private ArrayList<String> patheSet=new ArrayList<String>();
private String[] ver={"a","b","c","d","e","f"};
private int[][] graph=new int[6][6];
private String path="";
private boolean[] isVisit=new boolean[VERTICE];
public DemoGraph() {
initiGraph();
for(int index=0;index<VERTICE;index++)
depthSearch(index);
show();
}
private void initiGraph(){
graph[0][1]=1;
graph[1][0]=1;
graph[1][2]=1;
graph[1][3]=1;
graph[2][1]=1;
graph[2][3]=1;
graph[2][4]=1;
graph[2][5]=1;
graph[3][1]=1;
graph[3][2]=1;
graph[3][5]=1;
graph[4][2]=1;
graph[4][5]=1;
graph[5][2]=1;
graph[5][3]=1;
graph[5][4]=1;
}
private void depthSearch(int start){
isVisit[start]=true;
path+=ver[start];
if(path.charAt(path.length()-1)=='f'||path.charAt(path.length()-1)=='b') patheSet.add(path);
for(int index=0;index<VERTICE;index++)
if(graph[start][index]==1&&isVisit[index]==false)
depthSearch(index);
else continue;
path=path.substring(0,path.length()-1);
isVisit[start]=false;
}
private void show(){
for(String pa:patheSet)
System.out.println(pa);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new DemoGraph();
}
}
posted @
2006-10-12 00:43 murainwood 阅读(210) |
评论 (0) |
编辑 收藏
i bought a durain in the supermarket,smelling terrible.
i thought about durain for time,not because i miss the test of it .just for curiosity。so ugly ,so smelly and so expensive.why so many persons love this strange fruit? is it really do delicious ?
today, i bought one.hehe.
well,i've no idea to deal the prickly,hard "stone".so it is reasonable to ask the worker of the supermark to get it . The flesh of durain is milk white with a little yellow,just like the ice cream for its softness. the feeling is good.
i put a piece of the "cream" into my mouth,so carefully and nervous . wow ,the smell is still terrible,but the taste is unexpected delicious. soft,sweet,smooth.
really good!
posted @
2006-10-04 01:39 murainwood|
编辑 收藏
Ubuntu is really a charming distribution of GUN/Linux . I've noticed it two months ago. The live CD instaills very easily and the "face" is beautiful . it is interesting that the X of Linux abroad is mostly Gnome while the domestic is KDE .well ,KDE looks more flamboyance for its class-style look . Gnome is simplicity comparatively. Why ? May be the people who use Linux aborad miss their Unix ,Hehe . Unix looks simplicity as well .
Kubuntu is based on KDE ,it is the extending project of the Ubuntu ,seems less important than Dubuntu . But frankly speaking ,Kubuntu looks more lovely
posted @
2006-10-02 03:22 murainwood|
编辑 收藏
i feel a lot about the importance of English these days.The foreign corporations and the top domestic companies ask for excellent skill of English. i am so soory now and i should learn my English well .
last weekend , we talked ablout if time back up for four years ,what we would do in the future 4 years .it is the very topic .some guy said he would find a girl firend ,while the other said he would not touch the on-line game . for me ,i said i would keep away from the C++ and devote myself to learing English .and i said i had wasted a lot time on some courses .
most of us will regret something in the past four years . we can not catch the gone time .but i can try my best to make good use time nowaday .
posted @
2006-10-01 00:12 murainwood|
编辑 收藏
华为笔试题:计算字符串“010111001100....”中‘0’和‘1’连续出现的次数。
#include<iostream>;
void main() {
char *charArray="01000111100011100111100001";
int max[2] ={0,0};
int count[2] ={0,0};
while(*charArray){
int index =*charArray-'0';
count[index]++;
count[index^1] =0;
if(count[index]>max[index])
max[index]=count[index];
charArray++;
}
std:cout<<"Max times of 0 is"<<max[0]<<std:endl;
std:cout<<"Max times of 1 is"<<max[1]<<std:endl;
}
//~:end the codes
程序代码的艺术化,呵呵
posted @
2006-09-26 03:57 murainwood 阅读(353) |
评论 (0) |
编辑 收藏
自己想的一道题,算是30%原创吧
String a=new String("Hello");
a+="World";
问:a的内容最后是什么?
这两个语句,共生成了几个Java对象?
简单不?看样子非常简单吧,呵呵。
第一问:a(确切地说a引用的内容)是HelloWorld
第二问: 两个语句,一共生成了几个对象?
看第一个语句,说实话,用这种方式初始化String,实在是代码垃圾。这先不管啦。这个语句是老生长谈,一个或两个对象。
为何?第一次执行时创建了二个, 一个为字面量"Hello"(它本身是一个String对象), 一个为new String("Hello")(它是通过new创建的, 功能上和字面量"foo"完全一样, 但却是另一个对象).
第二次执行时, 只创建一个, 即new String("Hello"), 这是因为: "Hello"作为String字面量, 是存在于String Pool里面的, 第二次使用它时, 直接指向原有的String, 而不再创建新的String; 但new String("Hello")却每执行一次都创建一个新的,完全一样的String对象.
第二个语句呢?
3个对象。
首先是“World”,毋庸质疑。
那么然后呢?注意了,String是final类,不可改变。平时我们写Java会有个错觉,stringA+stringB就以为是前者尾巴接上后者脑袋。的确,在C/C++里就是如此。一点儿错都没有。
但是Java不是,Java设计者为了更多方面的考虑,他们把String设计成了final。
看一下JVM汇编指令吧
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
static void inti();
Code:
0: new #2; //class java/lang/String
3: dup
4: ldc #3; //String Hello
6: invokespecial #4; //Method java/lang/String."<init>":(Ljava/lang/String;)V
9: astore_0
10: new #5; //class java/lang/StringBuilder
13: dup
14: invokespecial #6; //Method java/lang/StringBuilder."<init>":()V
17: aload_0
18: invokevirtual #7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
21: ldc #3; //String Hello
23: invokevirtual #7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
26: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
29: astore_0
30: return
}
仔细看一下我做的标记,JVM给我们生成了一个StringBuilder类。(我用的是JDK5,旧版本是StringBuffer类,单单这一点小改动就能让Java的速度提高很多)。让后用append方法载入Hello和World两个String的引用(明确地说转化成字符数组)。
当载入完成后,StringBuilder实例调用toString,生成一个新的String实例(暂时称为TempString)。
最后把引用a指向TempString
总结:两句语句总共生成了4个或5个Java类实例
PS:Java中没有指针实在是太不方便了。特别是在操作原始数据类型的时候。个人认为Java应该在这点上学学C#。指针不是洪水猛兽,对优秀程序员而言,指针是编程中的一种享受。
希望“海豚”(Java7)能出现指针吧---很不现实,还是等开源后的Java版本吧
posted @
2006-08-14 03:18 murainwood 阅读(500) |
评论 (4) |
编辑 收藏
下学期会有找工作这类麻烦的事情,不过不管怎么说,还是以好好学习为主吧。
1.学一种操作系统,Solaris,FreeBSD,Linux三者选一,至少达到熟练使用的程度。
2.继续学习Java,巩固深入Java基础,JVM,反射,JNI,JDBC,
3.学会一种Web框架,一种数据库持久框架
4.放弃C++,复习巩固深入C
posted @
2006-08-11 14:49 murainwood 阅读(186) |
评论 (0) |
编辑 收藏
Stack 和Heap的差别,上次华为研究生笔试题就考过。C语言的我很清楚:
Stack: automatic variables within functions
Heap: global variables (storage class external), and static variables
简而言之,最大的不同是:前者是函数变量的空间,后者是程序变量的空间
另外,Stack上分配内存是安全的。而Heap上分配内存则没那么爽了。调用malloc分配内存,是在Heap上开辟空间。一定要注意释放。否则老是memory leak
昨天有人问我JVM中的Stack和Heap的差别,当时心不在焉地照搬C语言敷衍了事。
中午起床,没事闲着看帖子。无意中想起这个问题,在Google搜索了一番。发现昨天的回答出了问题:
“ It is useful to know that these two different kinds of memory exist in Java. Stack memory is the program's memory, and heap memory resides outside of the program.”
Stack是程序内存,Heap内存存在于程序之外。这样子看起来和C语言中地Heap有些像诶(C语言中的Heap也是在mian()之外的)。再仔细看看
Stack memory stores primitive types and the addresses of objects. The object values are stored in heap memory.
类实例存在于Heap。类实例的的指针在Stack中存放。难怪JVM没有text segment ,在Stack就囊括了text segment。
这样做的好处,就是为了实现Java的垃圾回收机制。任何的类对象实例都在Heap中,在Stack中有它们的引用。当所以的线程都不在需要某个引用时,JVM的那个资源回收线程就会把该实例从Heap当中清楚掉。
文章告诉我,回收线程要做全局的检测来确定某个实例是否已经“无用”了。这样子,我们可以在代码上做些工作,来给回收线程加速。
Test t = new Test();
t.someAction();
// all done
t = null;
实例t不再有用时,就把他置为null,告诉JVM:你不用在Stack和Heap之间自己校验啦,我已经做好了标记,放心回收吧。
小结:Stack: Primitive data types(primitive types), the addresses of objects(=references).
Heap: objects.
前者:基本类型和实例地址(引用),后者:类实例
posted @
2006-07-31 16:28 murainwood 阅读(737) |
评论 (2) |
编辑 收藏
这是家执着的公司,在我心目中,她远比“特立独行”的苹果要伟大得多。现在的苹果,是一名衣着怪异的流行歌手,在舞台上耍cool。那么Sun,就是名失意的求道者。
祝Sun一路走好,一个承载着计算机业先贤们梦想的公司。
posted @
2006-07-31 15:44 murainwood 阅读(173) |
评论 (0) |
编辑 收藏
发发牢骚,自从课设做了SWT /JFace的客户端应用软件,感觉超好。优美的代码,清晰的结构,典雅的布局,简洁的事件机制,SWT太迷人啦。不愧为IBM的杰作,Java桌面开发的新贵。可惜就是没人用。不就是多了和平台相关的dll文件和几个Jar资源包嘛,批处理写得熟溜得人才不嫌麻烦呢,咯咯。
Swing嘛,怎么说你好呢,你得结构是很清晰,论MVC的分离性,确实我觉得比SWT做得优秀些。可是你冗长的代码,麻烦的事件相应机制,有些让人不习惯的布局,特别是奇怪的界面....不是偶说你,偶不想理你啦。
Java的GUI程序本来,我本来就不打算深究。精通一个SWT,了解一个Swing就够啦
扯上个无关的,MFC,我越了解你就越讨厌你,越明白你就越恶心你。还好,当初没有误入歧途,把你当成宝贝(反正我估计基本不做桌面软件,^_^)
posted @
2006-07-31 06:12 murainwood 阅读(775) |
评论 (0) |
编辑 收藏
没事可干,花了半小时做完了3到意法半导体的笔试题。C语言,极简单的算法罢了,全是记事本敲,然后g++编译。
温习C语言还是很必要滴。荒废了好久,我一直喜欢用C语言的底层思维来考虑Java,Java没有“指针”,我是一直很不爽的。
意法半导体好歹也是家不错的公司啊?出的C语言算法题目怎么连华为的都不如?不过上次参加学院华为那个笔试,人家是特招研究生的。俺混进去给人做参考,感觉非常不错。可惜最后没留下个假名,手机号码也没写,唉...
最丢人的还是那次法国汤姆逊,连OSI七层网络都忘了。好好吸取教训
posted @
2006-07-31 06:01 murainwood 阅读(247) |
评论 (0) |
编辑 收藏
项目第二阶段,管理客户端和管理服务器。架构C/S,技术RMI
今天上午做了一个简单的测试系统,用来测试前两天所编写的构件:写了一远程服务器,一个命令行客户端。OK,编译时也没出错。
然而运行起来,可怕的事情发生了:先前写的实体类无法传送给客户端。程序抛出了异常。仔细观察,发现是产生了对象无法序列化的IO异常。
RMI底层通过TCP协议进行通讯,ObjectInputStream和ObjectOutputStream来负责对象的输入和输出。实在是不明白,以前做RMI系统实验的时候,根本没遇到这种序列化异常:传String就传String,传Vector就传Vector。
猜想应该是我写的那些类无法序列化的缘故。参考了API文档,发现这个东西:MarshalledObject,可以对其构造方法的对象进行序列化(说穿了就是变成字节流)。
迅速改造了测试程序,OK,能穿对象了。但是.....序列化以后无法反序列化!天,类对象实例全部变成了组毫无意义的字节数组。
应该有其他的办法,SUN的Java文档实在不能和MSDN相比,太过于简单啦。
经过3个小时的资料查阅和测试,终于找到了种正确而且异常简单的方法:对先前的代码进行简单的重构:让他们统统实现java.io.Serializable接口。只改一行代码,全部解决!
^_^
posted @
2006-07-24 14:44 murainwood 阅读(270) |
评论 (0) |
编辑 收藏
这么多年来一直喜欢着那个女孩。我们是很好的朋友。喜欢她的样子,她的笑容,她的性格和她的言谈。
这么多年,似乎也喜欢过其他的人,然而就像烟雾一样,或长或短的时间里,慢慢消散。仿佛只留下浅浅的痕迹
就这样一直喜欢着她好了,也许能够变成永恒
posted @
2006-07-21 22:49 murainwood 阅读(136) |
评论 (0) |
编辑 收藏
http://www.apache.org
著名的Apache基金会官网,经常看看很有收获
http://www.eclipse.orgEclipse基金会官网
http://saloon.javaranch.com翻译过来叫Java会客厅比较好吧
http://www.matrix.org.cn/不用说了,国内比较好的Java论坛
http://www.csdn.net国内最大的IT开发者站点....太浮躁,很喧嚣
http://www.mindview.net/Bruce Eckel的网站,很值得一看
posted @
2006-07-21 20:29 murainwood 阅读(168) |
评论 (0) |
编辑 收藏
设置类路径
结构
可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPATH 环境变量来设置类路径。
C:> jdkTool -classpath path1;path2...
C:> set CLASSPATH=path1;path2...
每个 path 以文件名或目录结尾,该文件名或目录取决于将类路径设置成什么:
对于包含 .class 文件的 .zip 或 .jar 文件,路径以 .zip 或 .jar 文件名结尾。
对于未命名包中的 .class 文件,路径以包含 .class 文件的目录结尾。
对于已命名包中的 .class 文件,路径以包含“root”包(完整包名中的第一个包)的目录结尾。
用分号来分隔多个项目。使用 set 命令时,需要省略等号两边的空格(=)。其中 jdkTool 可以为 java、javac、javadoc,等等。有关详细列表,参见 JDK 开发工具。
说明
类路径告诉 Java 应用程序去哪里查找第三方和自定义类 -- 即不是 Java 扩展或 Java 平台一部分的类。在 JDK 1.2 中,JVM 和其他 JDK 工具通过依次搜索平台库、库扩展和类路径来查找类(有关搜索策略的详细信息,参见如何查找类)。
多数应用程序的类库都会充分利用扩展机制。因此,只有想要加载某个类库 (a) 未位于当前目录或其分枝包中 且 (b) 未位于扩展机制所指定的位置时,才需设置类路径。
如果用户是从旧版本 JDK 升级而来,则启动设置可能包括不再需要的 CLASSPATH 设置。这时应该删除任何非应用程序特定的设置。有些使用 Java 虚拟机的第三方应用程序可能修改 CLASSPATH 环境变量以包括它们使用的类库。这种设置可以保留。
可通过在调用 JVM 或其他 JDK 工具时使用 Java 工具的 -classpath 选项改变类路径(例如: java -classpath ...)。这是改变类路径的首选方法。还可通过使用 CLASSPATH 环境变量改变类路径。
注意:JDK 1.2 缺省类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行开关将覆盖缺省值,因而如果想要在搜索路径中包括当前目录,则必须在新设置中包括“.”。
类可以存储在目录(文件夹)或归档文件(例如 classes.zip 或 classes.jar)中。有关归档文件的详细信息和类路径的工作原理,参见本文档最后的理解类路径和包名。
重要说明:JDK 旧版本在缺省类路径中还包括 <jdk-dir>/classes 项。该目录仅供 JDK 使用,且不用于应用程序类。应用程序类应该放置在 JDK 外部的目录。这样,安装新 JDK 时不必需要重新安装应用程序库。为了与旧版本的兼容性,使用 <jdk-dir>/classes 目录作为类库的应用程序在当前版本中仍能运行,但不能保证在以后的版本中它们还能运行。
使用 Java 工具的 -classpath 选项
Java 工具 java、jdb、javac 和 javah 具有 -classpath 选项,在工具运行时它将取代缺省类路径或由 CLASSPATH 环境变量所指定的类路径。这是改变类路径设置的推荐方法,因为这样每个应用程序可具有它所需的类路径而又不会干扰其他应用程序。
运行时工具 java 和 jdb 还具有 -cp 选项。该选项是 -classpath 的缩写。
对于非常特殊的情况,java 和 javac 都具有开关,使得可改变它们使用的路径以查找它们自己的类库。但是,绝大多数用户从来都不会用到这些开关。
使用 CLASSPATH 环境变量
如前一节中所述,一般用户将想要使用 -classpath 命令行选项。本节将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。
设置 CLASSPATH
在 DOS 提示符下,可用 set 命令修改 CLASSPATH 环境变量。其格式为:
set CLASSPATH=path1;path2 ...
路径应该以指定驱动器的字母开头,例如 C:\...。这样,在偶然切换到不同驱动器时仍可找到类(例如,如果路径项以 \... 开头,并且当前位于驱动器 D: 上,则所需的类将在 D: 而不是 C: 驱动器上找)。
清除 CLASSPATH
如果 CLASSPATH 环境变量被设置成不正确的值,或启动文件或脚本程序设置了不正确路径,则可通过使用下列命令清除 CLASSPATH:
C:> set CLASSPATH=
该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置,则应该删除或修改启动设置。
更改启动设置
如果在系统启动时设置 CLASSPATH 变量,则查找它的位置取决于所使用的操作系统:
操作系统 方法
Windows 98 和
Windows 95 检查 autoexec.bat 文件中的 set 命令。
Windows NT 启动“控制面板”,选择“系统”,单击“环境”选项卡,并在“用户变量”部分中,检查 CLASSPATH 变量。
理解类路径和包名
Java 类被组织成包,而这些包被映射到文件系统中的目录。但是与文件系统不同的是,无论何时指定包名,都应指定完整包名 -- 永远不要仅指定它的一部分。例如,java.awt.Button 的包名总是应指定为 java.awt。
例如,假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:\java\MyClasses\utility\myapp,则应该将类路径设置成包含 C:\java\MyClasses。
要运行该应用程序,可使用下述 JVM 命令:
C:> java -classpath C:\java\MyClasses utility.myapp.Cool
当该应用程序运行时,JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。
注意:应在命令中指定完整包名。例如,设置类路径包含 C:\java\MyClasses\utility 并使用命令 java myapp.Cool 是不可能的,因为这找不到该类。
(您可能想知道用什么定义类的包名。答案是:包名是类的一部分,并且不能修改,除非重新编译该类。)
注意:包规范机制一个有趣的结果是,属于相同包的多个文件实际上可存在于不同的目录中。对于每个类,包名都是相同的,但是每个文件的路径可从类路径中的不同目录开始。
文件夹和归档文件
当类存储在目录(文件夹)中时,例如 c:\java\MyClasses\utility\myapp,则类路径项指向包含包名第一个元素的目录(在这里为 C:\java\MyClasses,因为包名是 utility.myapp)。
但是当类存储在归档文件(.zip 或 .jar 文件)中时,类路径项则是该 .zip 或 .jar 文件的路径。例如,要使用位于 .jar 文件中的类库,则命令应该类似下述形式:
java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
多重指定
要在目录 C:\java\MyClasses 和 C:\java\OtherClasses 中查找类文件,则可将类路径设置为:
java -classpath C:\java\MyClasses;C:\java\OtherClasses ...
注意两个路径之间用分号分隔。
指定次序
指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中,Java 解释器首先在目录 C:\java\MyClasses 中查找需要的类。只有当它在该目录中没有找到该类时,解释器才能到 C:\java\OtherClasses 目录中查找
posted @
2006-07-20 20:29 murainwood 阅读(241) |
评论 (0) |
编辑 收藏
“C++比Java快”,“Java运行于虚拟机上,当然要比C++慢”,“C++生成的是本地代码,直接运行于本地硬件上”,“速度比Java快多了”......
这是我一年前学Java时的想法,为什么有那些想法?很简单,人云亦云罢了。既然那么多“高手”都这么说,那么多“精通”Java和C++的人都那么说,自然而然就信了。
就这么过去了一年,对Java也越来越熟悉。自己依然是个初学者,而且相信不上升到布卢斯.艾克尔那个高度,就别想说自己精通C++和Java!
虽说仍旧是初学者,却对国内那些“高手高手高高手”们的一些言论有了怀疑:Java不比C++慢!然而无论我在哪个论坛上,那个技术群里头发表这个观点,立刻会有一群“高手”来纠正,甚至有一次一个号称“一般不学语言,要学两个礼拜就能搞定”的“高手”很郑重其事地向我说明原理。当我了解到此人Java才学了一个月的时候,实在是无语了。还要一次一个高手批驳我,于是乎小心问了句,了解C语言里malloc和free函数的机制与否。此“高手”很不屑地告诉我:C++里的new 和 delete就能搞定,malloc早就没用了。又无语:也许他用的“C++"是他自己发明吧。
只想问一句那些“高手”,看过近年来Java PK C++的一些精彩报告没?那些报告可是国外权威机构的文献啊!是通过实验得来的数据!
还想问一句:你们说Java慢,是什么人,什么时候说的?那些言论的源头,大多数是Java 1.2时代以前的啊。
说Java比C++慢的人,是否真的亲自写过测试代码?(虽说我的代码不能算精确,但也好歹做过近十次的实验,用了好几种不同的JVM或Cpp编译器,Java大获全胜)
说Java比C++慢的人,是否了解JVM的运行机制?(我只能说我了解一些罢了)
说Java比C++慢的人,是否有拿得出手的报告或实验?(可惜,从来没遇到过)
说Java比C++慢的人,请去学习一下唯物论!
而且为什么只有在国外才有那么多人认为Java快,只有国外的科研机构才花费时间和精力去做那些被很多国内程序员斥为“没用”(和好多程序员聊天时,他们这么认为)的实验?是中国的程序员都是天才么?还是中国的计算机业太“先进”了,不需要去关心这些东西呢?
实在是发人深省!!!
posted @
2006-06-29 06:22 murainwood 阅读(5163) |
评论 (19) |
编辑 收藏