java之深入详解
这已经不是我初次学java了,我在大二时就已经自学过java.但那时的学习还是相当的浅薄的,这次有老师带着我们学习(虽然只是学一个月,但一个月足矣!),这比自学来得高效多了。因为自学,很多细节的东西。如java的引用,java的不同的项目的区分(j2ee,jme,jse),还有数组的创立。这些东西没有老师的比较精确的指点,要想通过多次的练习来掌握是有些不可能的。
java的引用。这个引用其实不是像C++的引用。C++的引用一般只能初始化一次。而java的引用其实相当于c++中的指针,只是这个指针被符号化了,并不能直接通过对这个“指针”得到其对应的存储空间地址。比如说:String str=new String(); 这里创建了一个字符串对象,然而str作为一个引用,事实上只表示str指向了这个新创建的空间。具体是如何指向这个空间的,java并不是用内存指针的方式,而是使用了符号化-----str就是指向了它了,仅此而已。 这个str引用也可以用来指向别的空间。str=str2;这里并不会产生空间的重新分配。str指向的字符串对象与str2其实是一致的。-----对于引用类型的变量,当其仅当使用new创建新的对象时,才会发生空间的申请与分配。
java的数组。java的数组还是比较有特色的,最显眼的就是它的声明了。 int[] data; 与 int data[]等价。一般情况下,C++/C不允许这样的用法(int data[] 可以在函数的参数列表中使用).老师告诉了我们一些比较容易的记忆方法。int[] 相当于表明这个类型是 int[]---即一维整数数组(我当初自学java时就老是记不住,看来还真得靠我们的美女老师来诱惑我认真记忆这个用法啊)。而int data[] 说明data数组元素data[]的类型是int.简单吧。这下子容易记了。 当然这还只是声明。还可以有初始化:int[] data=new int[3]; int[] data[]={1,2,3,4}; 当然也可以动态的创建了。如data=new int[10];这样data就指向了新的数组了。原来的空间如果引用计数变为零的话,则会被垃圾收集器回收。 还有一个要点是多维数组。java不能直接创建和初始化多维数组,要使用可以分级创建(跟C++创建动态多维数组一致) int[][] data=new int[][3]; data[0]=new int[2]; data[1]=new int [4]; data[2]=new int[8];
其实以上就已经是学习了java的基本语法了。这其它的基本要素如int 型 ,boolean型其实也差别不大。java最重要的其实是其面向对象的机制。在java中,一切均可视为对象(除了极少数基本类型之外如int char boolean float double byte). 而java的对象都是从java.lang.Object中继承过来的。凡是对象其实也有相当的好处的。这符合一般的思维习惯,可以简化很多C++中复杂的东西。如宏,如联合体、结构体,甚至运算符重载、模板也没出现。 在java中编写GUI程序,你可以体会到这些好处。这些java组件都是一些比较标准的类,你可以继承它,又不怕遇到像MFC中一样的变态恶心的实现技术。这样说来,java的确是一门简单的语言。
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame
{
private JMenuBar mbar;
private JButton button;
public MyFrame(){ super(); addMenubar();addButton();}
private void addMenubar(){....}
private void addButton(){....}
}
/这里,你可以看到,要继承和扩展一个类,java中是如此的简单。这里已经闪现差java语言设计者头脑中哲学的光辉了------软件工程的思想。
///这里演示MyFrame类的使用。
public static void main(String argv[])
{
MyFrame mf=new MyFrame();
mf.setDefaultCloseOperation(mf.HIDE_ON_CLOSE);
mf.setVisible(true);
}
这样,不需要任何繁杂的代码,一个简单的有菜单有按钮的窗体程序便设计完毕了。这还没用到类似于MFC中的代码自动生成技术呢。------现在java也有相当多的开源的IDE(如eclipse netbeans),这些集成开发环境可以用窗体设计器,完成一些窗体类的外观设计到代码生成,修改这些生成代码,即可继承产生自己需要的模板类。
当然,简单也是有代价的,因为java主要是网络应用的。其本质的核心思想就是:一次编写,到处运行。这就决定了它的运行速度慢,还有语言天生的简单且平台无关。对于系统一级的编程。使用java显然无能为力。而大型的3D网游就是其一例子。
除此之外,java的单继承特性,还有具有工程性质强烈的java 接口(interface),这个可以说是抽象类的特殊类型。可以把一些非常关键的接口函数抽象成接口类,进而为多个类实现。这样即实现了某种程度上的多重继承,也为类组件的重用性奠定坚实的基础。
java的异常处理也别有特色,简单但却非常实用。
再说说java的包。java的包也是践行软件工程思想的结果。包这种对类库的组织方式,极大的方便了类的查看继承和类库的扩展。你要想查找某种功能的类,你只需要在对应的包下查找,看是否有自己所需要的或者功能类似的类。这样,你可以继承它和扩展它从而为自己的程序服务。 当然,你也可以自己开发出自己的包,如果你将其开源的话,那么,说不定你的类库(包)还有可能会成为未来的java标准库中的一部分哦----这想法不错吧,哈哈。
说到这里,不能不说说java的开源性质了。java语言的开发公司SUN虽然保有了作为java发明者的权利,但其基本的类库什么的,基本都有相应的标准化组织对其进行了标准化。并且这些都是开源的。也有对应的文档可供参考。你可以搜索“java api文档 中文版”。这还是中文的,看来比win api文档都要好得多。一般开源的IDE都带有这些标准包、类的源代码。我用的是netbeans 里面就有java各个包的源代码。你只要选中某个类,然后“查看源”,就可以看其各个类的特定函数的实现。这对java的编程是相当方便的,不用老是翻API文档。不能不说,java在这个方面,学习起来的确比c++要来得简单方便。
一些java名词的注解。 j2ee,以java2.0(语言第二代)为基础的应用于企业级的构架。jme 主要用于电子消费类产品(手机MP3等),jse 为运用于编写桌面应用软件的架构(API及编程规范)。jsp,运用java作为动态页面产生语言的一种网站构建技术方法。java applet ,java小应用程序,功能及使用局限性校大,一般嵌套于html页面中,由WEB浏览器解释执行。javascript 一种动态网页生成脚本语言,由Netscape开发的网页脚本语言。servlet 与jsp配合使用,运用于动态网页(网站的构造),servlet主要用于业务逻辑部分。tomcat 一种支持jsp的WEB应用服务器程序。