JAVA编程:Nice用户手册(四)
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。参数类(parametricclasses)在Nice中有一种十分壮大的特征是能够界说参数类。参数类很像C++中的模板,大概相似别的函数型言语中的模子。而针对参数类的编程偶然也被称为泛型编程。
参数类就是有参数的类,在这类情形下参数更像一品种型而不是值。你能够把参数类以为是一族相干类,这些类除被参数化的部分之外有不异的举动和布局。参数类常被用于数据布局中。
示例3.4复杂Java汇合
classStack{
Listcontents=newLinkedList();
voidpush(Objecto){
contents.add(o);
}
//...omittedmethods
publicstaticvoidmain(String[]args){
Stackst=newStack();
st.push("Test");
Integernum=(Integer)st.pop();//Runtimeerror
}
}
这里有一个十分年夜的平安隐患。我将一个String压栈,然后试图将它弹进一个Integer中,这么做会招致一个运转时毛病。参数类可以办理这个成绩。
示例3.5复杂Nice汇合
classStack<T>{
List<T>contents=newLinkedList();
voidpush(Tt){
contents.add(t);
}
//...omittedmethods
}
voidmain(String[]args){
Stack<String>st=newStack();
st.push("Test");
Integernum=st.pop();//Compiletimeerror!
}
在Nice版的汇合中,我们有一个T范例的参数类Stack。实在Stack<T>是一种给编译器的旌旗灯号,它告知编译器怎样创立一个用于给定范例的Stack。当编译器得知我们只会把String放到这个栈中时,任何妄图从Stack<String>中掏出一个Integer的代码城市招致编译器报错。
接口声明
Nice和Java或C#一样只同意单承继,这意味着任何类只能从一个超类承继。偶然候,一个类从两个(或更多)类“承继”,从它的每一个父类取得举动和数据,如许大概会更好。在Nice中,这类情形能够像Java一样用接口往完成。
接口声明时就像类一样,只是接口只能包括办法,而不克不及包括数据成员。而和Java所分歧的是,Nice中的接口也能够包括办法的默许完成,如许就比Java中的接口更便利。
固然说了这么多仍是以Java的形式来熟悉接口。在Nice中一个接口其实不真正地包括任何工具,它只是一种标志。就像java.io.Serializable接口,只是一个标志,用来告诉Java能够对一个类的实例举行序列化。Nice中一切的接口都是标志,这是由于Nice中具有多元办法。多元办法由本人自己界说,而不包含在任何类或接口中。能够随时向接口中增加新办法,就像能够随时向类增加新办法一样。Nice基于多元办法的另外一个了局是接口不但能够“包括”办法署名,还能够“包括”办法的详细完成。
Nice可使用像Java一样的体例界说接口,就像上面的例子:
示例3.6界说接口
interfaceComponent{
StringgetID();
(int,int)getPosition();
(int,int)getDimensions();
intgetArea(){
(intwidth,intheight)=this.getDimensions();
returnwidth*height;
}
}
固然,能够等价地利用上面这类办法界说接口:
示例3.7在接口界说中包括全局办法
interfaceComponent{}
StringgetID(Componentcomp);
(int,int)getPosition(Componentcomp);
(int,int)getDimensions(Componentcomp);
intgetArea(Componentcomp){
(intwidth,intheight)=comp.getDimensions();
returnwidth*height;
}
现实上,夹杂这两种情势完整没有成绩,办法能够一些界说在接口块(block)内,另外一些界说在接口块外。一种较好的做法是将没有默许完成的办法界说在接口内,而有默许完成的界说在接口外。如许当其别人浏览代码时会很分明地晓得完成一个接口时那些办法必需被完成。固然,编译器会包管一切必须的办法都被完成,以是以上的内容只是一个倡议。
列举类
列举类(或简称为enum),是一组相干的常量。很多言语撑持界说复杂的常量,固然Nice也不破例。很多程序中利用了一些数字常量以暗示特别的寄义。好比一个主动销售机的程序中的一个办法会像上面如许:
letintNICKEL=5;
letintDIME=10;
letintQUARTER=25;
classVendingMachine{
intchange=0;
}
voidaddCoin(VendingMachinemachine,intcents){
machine.change+=cents;
}
但这个办法其实不平安!它能够承受任何数目的零钱,包含一些像3或234320如许的荒唐的数字。一种处置这个成绩的办法是在运转时做反省以确保数据时能够被承受的,并在碰到不成承受的数据时抛出非常。但是,在Nice中有一种更复杂的办理计划:列举。
enumclass-name[(parameter-typeparameter-name,...)]{
option,...
}
列举能够像上面这类复杂的标记:
enumColor{Red,
Orange
,Yellow,Blue,Indigo,Violet}
大概他们能够包括整型(或别的)的值:
enumVendingCoin(intvalue){
nickel(5),dime(10),quarter(25);
}
classVendingMachine{
intchange=0;
}
voidaddCoin(VendingMachinemachine,VendingCoincents){
machine.change+=cents.value;
}
固然,一台真实的主动销售时机保存每种硬币的实践数目,而不单单时它们的总和!
主要缺点就是:速度比较慢,没有C和C++快 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
页:
[1]