收藏 分销(赏)

Java语言规格说明.doc

上传人:仙人****88 文档编号:7853020 上传时间:2025-01-22 格式:DOC 页数:16 大小:75KB
下载 相关 举报
Java语言规格说明.doc_第1页
第1页 / 共16页
Java语言规格说明.doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述
Java语言规格说明 1.程序结构 Java语言的源程序代码由一个或多个编译单元(compilation unit)组成,每个编译单元只能包含下列内容(空格和注释除外): * 一个程序包语句(package statement ) * 引入语句(import statements) * 类的声明(class declarations) * 界面声明(interface declarations) 每个Java的编译单元可包含多个类或界面,但是每个编译单元却至多有一个类或者界面是公共的。 Java 的源程序代码被编译之后,便产生了Java字节代码(bytecode)。 Java的字节代码由一些不依赖于机器的指令组成,这些指令能被Java的运行系统(runtime system)有效地解释。Java的运行系统工作起来如同一台虚拟机。 在当前的Java实现中,每个编译单元就是一个以.java为后缀的文件。 每个编译单元有若干个类,编译后,每个类生成一个.class文件。.class文件是Java虚机器码。 2. 词法问题 在编译的过程中,Java源程序代码中的字符被划分为一系列的标记(token)。Java编译器可以识别五种标记: 标识符、关键字、字面量、运算符以及特殊分隔符。注释以及诸如空格、制表符、换行符等字符 ,都不属于标识之列,但他们却常被用来分隔标记。 Java程序的编写采用泛代码Unicode字符集,若采用其它的字符集,则需在编译前转换成Unicode。 2.1 注释 Java语言提供了3种形式的注释: //text 从//到本行结束的所有字符均作为注释而被编译器忽略。 /* text */ 从/*到*/ 间的所有字符会被编译器忽略。 /** text */ 当这类注释出现在任何声明之前时将会作特殊处理,它们不能再用在代码的任何地方。这类注释意味着被括起来的正文部分,应该作为声明项目的描述,而被包含在自动产生的文档中。 2.2 标识符 标识符的首字符必须是一个字母,下划线("_")或美元符号("$")。 后面的字符也可是数字0-9。 Java使用泛代码字符集,为了便于识别好一合法标识符,下面列出它的“字母”: * 大写字母“A”~“Z” * 小写字母“a”~“z” * 泛代码(Unicode)中所有字符编码在十六进制数00C0之前的字符。标识符中,首字母后的字符可以是任意的。当然,Unicode区段中那些被保留作特殊字符的除外。 由此,“garton”及“MjΦlner”都是合法标识符,但是,包括诸如“π”的字符串却不是合法的。 2.3 关键字 下面的标识符被保留用作关键字,他们不能作任何其它的用途。 abstract default goto* null synchronized boolean do if package this break double implements private threadsafe byte else import protected throw byvalve * extends instanceof public transient case false int return true catch final interface short try char finally long static void class float native super while const * for new switch continue 其中,加*标记后是被保留但当前却未使用的。 2.4 字面量 字面量(literal)是某些类型值的基本表述,这些类型包括整型,浮点型,布尔量,字符及字符串。 2.4.1 整型字面量 整数可有三种表示形式: 十进制,八进制和十六进制。一个十进制整型字面量由一系列的数字组成,但它的第一个数字不能是0(有时十进制数字也可象下面讲的那样加后缀)。整数也可表达成八进制或十六进制形式。以0开头的整型字面量,意味着它是一个十六进制的。十六进制整数可以包括数字0-9以及字母a-f及A-F。八进制整数中则只能是出现数字0-7。在超过32位所能表示的范围之前,整型字面量的类型即为int,否则为long型。一个整型字面量可通过加后缀L或l而强迫成long型。 下面的均为合法的整型字面量。 2 2L 0777 2.4.2 浮点字面量 一个浮点字面量可包括以下部分: 一个十进制整数,一个小数点“.”,小数部分(另外一个十进制整数),指数部分,一个类型后缀。指数部分是一个e或E后跟一个整数。浮点字面量至少包含有一个数字,外加或者一个小数点或者一个e(或E),下面举一些浮点字面量的例子: 3.1415 3.1E12 .1e12 2E12 就象在后面描述的那样,Java语言有两种浮点类型: float 及double,用户可按以下写法区分: 2.0d或2.0D double 型 2.0f或2.0F或2.0 float型 2.4.3 布尔字面量 布尔(boolean)字面量有两个值: true及false。 2.4.4 字符字面量 字符字面量是一个由单引号括起的字符(或者是由一组字符来表述一个字符)。字符属于char类型,并且均从泛代码字符集中得来。而下面列出的转义序列则用来描述一些非图形字符,它们以反斜杠“\”开始以作转义用。 续行符头 <newline> \ 换行 NL(LF) \n 垂直制表符 HT \t 退格 BS \b 回车 CR \r 走纸换页 FF \f 反斜杠 \ \\ 单引号 ' \' 双引号 " \" 八进制数 0ddd \ddd 十六进制数 0xdd \xdd 泛代码字符 0xdddd \udddd 2.4.5 串字面量 串字面量是双引号引起的零个或多个字符的序列。每个串字面量被看作是一个串对象,而并非是一个字符的数组,例如“abc”创建了一个新的串类的实例。下面的都是合法的串字面量: " " \\空串 "\" " \\只包含一个双引号的串 "This is a string" "This is a \ two-line string" 2.5 运算符及特殊分隔符 下面这些字符在Java源程序中作运算符或分隔符用: + — ! % ^ & * | ~ / > < ( ) { } [ ] ; ? : ,· = 另外,下面这些复合字符被用作运算符: ++ -- == <= >= != << >> >>> += -= *= /= &= /= ^= %= <<= >>= >>>= ‖ && 后面还要在运算符一节中作详细介绍。 3. 类型 任何一个变量或表达式都有一个类型,类型决定变量可能的取值范围,决定对这些值允许的操作,以及这些操作的意义是什么。Java语言中提供了内置定义类型,程序员也可以利用类及界面(interface)机制构造新类型。 Java语言有两种类型: 简单类型和复合类型。简单类型指那些不能再分割的原子类型。如:整型、浮点型、布尔型、字符型均为简单类型。 复合类型建立在简单类型的基础上。Java语言有三种复合类型:数组、类及界面。在本节中,我们主要讨论简单类型及数组。 3.1 数值类型 3.1.1 整数类型 整数与C及C++中相似,但有两点区别: 其一,所有的整数类型均是独立于机器的;其二,对某些传统的定义作出改变,以反映自C问世以来所带来的变化,四种整数类型分别具有8位、16位、32位及64位的宽度,并且均是有符号的(signed)。如下所示: 宽度 类型名 8 byte 16 short 32 int 64 long 一个变量的类型不会直接影响它的存储的分配,类型仅仅决定变量的算术性质以及合法的取值范围。如果把一个超出合法范围的值赋给一变量,那么这个值将是对合法值域取模后的值。 3.1.2 浮点类型 关键字float表示单精度(32位),而double则表示双精度(64位),两个float型数运算的结果仍是float型,若有其中之一为double型,则结果为double型。 3.1.3 字符类型 Java全部使用泛代码字符集,因此char类型数据被定义成一个16位的无符号整数。 3.2 布尔类型 当一个变量的取值或为ture或为false,或者是当一个方法的返回值为ture或false时,它们就是布尔型的。 布尔值不是数值型,因此不能用强制类型转换把它们转化成数值。 3.3 数组 数组在Java语言中属第一类对象。由它们代替了指针运算,所有的对象(包括数组)都可通过标识来引用。即使被当作数运算,标识的值也不应被破坏。通过new运算符可创建一个数组。 char s[]=new char[30]; 数组第一元素的下标为0,在声明中指定维数是不允许的。每次都必须显式地用new分配数组: int i [] =new int [3]; Java语言不支持多维数组,但是,程序员却可以创建数组的数组。 int i [ ] [ ]=new int [3][4]; 至少有一维要明确给定,而其它维则可在以后再确定。例如: int i[] []=new int [3] [ ] 是一个合法的声明。 除了在变量名及方法名后跟方括号这种C风格的声明之外,Java语言允许方括号跟在数组类型之后,下面两行是等价的: int iarray[ ]; int [ ] iarray; 同样地,方法声明也一样: byte f(int n)[ ]; byte [ ] f(int n); 运行时检查下标保证它们是合法的: int a[ ]=new int [10]; a[5]=1; a[1]=a[0]+a[2]; a[-1]=4; // 运行时引发一个ArrayIndexOutOfBoundsException(数组下标越界)异常 a[10]=2; //运行时引发一个ArrayIndexOutOfBoundsException(数组下标越界)异常 数组的大小必须使用整数表达式: int n; float arr[ ]=new float[n+1] 数组的长度可通过.length 查找: int a[] []=new int [10][3]; println (a.length) //打印出10 println (a[0].length) //打印出3。 4. 类 类(class)是传统面向对象编程模型的象征。它们支持数据抽象以及实现对数据的约束,在Java中,每一个新的类创建一个新类型。要想得到一个新的类,程序员必须首先找到一个已有的类,新类即在这个已有类的基础上构造,我们称之为派生(derived)。派生出的类亦称 为原来类的子类,而这个类我们称为超类(super class)。 类的派生具有传递性: 如果B是A的子类,C是B的子类,则C是A的子类。 一个类的直接超类以及指示这个类如何实现的界面(interface),在类的声明中,由关键字extends及implements标出。如下示(黑体表示关键字): [doc_ comment] [modifer] class ClassName extends Superclassname implements interface {,interface } ] { class body } 举例: /** 2 dimension point */ public class Points { float x,y; ...... } /** printable point */ class PinttablePoint extends Points implements Printable { ...... public void Print ( ) { } } 所有的类均从一个根类 Object中派生出来。除Object之外的任何类都有一个直接超类。如果一个类在声明时未指明其直接超类,那么缺省即为Object。如下述: class Point { float x,y } 与下面写法等价 class Point extends Object { float x, y; } Java语言仅支持单继承,通过一个被称作“界面”的机制,来支持某些在其它语言中用多继承实现的机制(详见“界面”一节)。Java之所以没有采用C++的多继承机制,是为了避免多继承带来的诸多不便,例如:可能产生的二义性,编译器更加复杂,程序难以优化等问题。 4.1 类型之间的强制转换 Java语言支持在两个类型之间的强制转换,因为每个类即是一个新的类型。Java支持类类型之间的强制转换,如果B是A的子类,那么B的一个实例亦可作为A的实例来使用,虽然不需要显式的转换,但显式转换亦是合法的,这被称作拓宽(widening)。如果A的一个实例,想当作B的实例使用,程序员就应写一个类型转换叫作削窄(narrowing)的强 制。从一个类到其子类的强制转换在运行时要作例行的检查以确保这个对象就是其子类的一个实例(或其子类之一)。兄弟类之间的强制类型转换是一个编译错误,类的强制转换的语法如下: (classname) ref 其中,(classname)是要转换的目的类,而ref是被转换的对象。强制转换仅仅影响到对象的引用,而不会影响对象本身。然而,对实例变量的访问却受到对象引用的类型的影响。一个对象从一个类型到另一类型的强制转换后,可以使同一变量名对不同的实例变量访问。 class ClassA{ String name = "ClassA" } class ClassB extends ClassA { //ClassB是ClassA的子类 String name="ClassB"; } class AccessTest { void test( ) { ClassB b=new ClassB( ); println (b.name); //打印: ClassB ClassA a a=(ClassA)b; println (a.name); //打印: ClassA } } 4.2 方法 方法(method)是可施于对象或类上的操作,它们既可在类中,也可在界面中声明。但是他们却只能在类中实现(Java中所有用户定义的操作均用方法来实现)。 类中的方法声明按以下方式: [Doc_ comment] [Access Specifiers] ReturnType methodName(parameterList) { method body(本地的native及抽象的方法没有体部分) } 除构造函数可以无返回类型外,其余的方法都有一个返回类型。如果一个不是构造函数的方法不返回任何值,那么它必须有一个void的返回类型。参数表由逗号分隔的成对的类型及参数名组成,如果方法无参数,则参数表为空。方法内部定义的变量(局部变量)不能隐藏同一方法的其它变量或参数。例如: 如果一个方法带以名为i的参数实现,且方法内 又定义一个名为i的局部变量,则会产生编译错误,例如: class Rectangle { void vertex (int i,int j) { for (int i=0; i<=100; i++) { //出错 … } } } 方法体内循环语句中声明的i是一个编译错误。 Java语言允许多态方法命名,即用一个名字声明方法,这个名字已在这个类或其超类中使用过,从而实现方法的覆盖(overriding)及重载(overloadding)。所谓覆盖是对继承来的方法提供另一种不同的实现。而重载是指声明一个方法,它与另外一个方法有相同的名字,但参数表不同。 注: 返回类型不能用来区别方法,即在一个类的范围内,具有相同的名字,相同的参数表(包括个数、位置及类型)的方法,必须返回相同的类型。若这样的两个方法有不同的返回类型,将会产生一个编译错误。 4.2.1 实例变量 实例变量(instance variables)是指那些在类内声明,但在方法的作用域之外尚未被static标记的变( 参照 “静态方法,变量及初始化”段)。而在一个方法的作用域之内声明的变量是局部变量。实例变量可以有修饰符(见修饰符)。实例变量可以是任何的类型,并且可以有初始值。如果一个实例变量无初始值,它将被初始化成0。布尔型变量被初始化成flase,对象被 初始化成null。下面是一个实例变量j具有初始化值的例子: class A{ int j =23; …… } 4.2.2 this 和super变量 在一个非静态方法的作用域内,this这个名字代表了当前对象。例如: 一个对象可能需要把自己作为参数传给另一个对象的方法: class MyClass { void Method (OtherClass obj) { … obj.Method (this) … } } 不论何时,一个方法引用它自己的实例变量及方法时,在每个引用的前面都隐含着“this”。 如: class Foo { int a,b,c; ...... void myPrint ( ) { print (a+ "\n"); // a=="this.a" } ...... } super变量类似于this变量。this变量实际上是对当前对象的引用,它的类型就是包含当前正在处理的方法的类。而super变量则是对其超类类型对象的引用。 第一问 JAVA 可以将 HOMEPAGE 上的一张图在 CLIENT 端上予以标定某一区域(侦测滑鼠所标定的坐标区间),然后交由 SERVER 端来予以处理呢? public boolean handleEvent( Event evt){ if (evt.id==Event.MOUSE_DOWN){ returnToServer(evt.x, evt.y); //X and Y are coordinates return true; } } 第二问  1.如何将label的字体颜色改变; 没办法,Solaris上可以, 但Windows 95中没效  2.另一个问题是GridLayout能不能将某些表格栏设为较大的单位,如用GridBagLayout  第三问  : 怎麽在java产生一个乱数呢? 1.产生变数: var1 = (int) (Math.random() * var2 ); ps. Maht.random() 产生 0 ~ 1 的乱数 2.设定范围完全看变数 var2 的值而定 易混淆的几个JAVA术语 1.J2EE J2EE是JAVA 2 PLATFORM ENTERPRISE EDITIONS 的简称,它是一个套件,它很有可能成为服务器端的标准。包含有: Enterprise JavaBeans(EJB) JavaServer Pages(JSP) JDBC Java Message Service(JMS) J2EE Connector JAVA Servlets Java Naming and Directory InterfaceTM (JNDI) JavaTM Interface Definition Language (IDL) JavaTM Transaction API (JTA) JavaTM Transaction Service (JTS) JavaMail RMI-IIOP 2.J2SE J2SE是JAVA 2 Platform, Standard Edition的简称,它也是一个套件 它主要包含有: JDK 1.1.x JRE 1.1.x 3.JDK JDK是JAVA DEVELOPMENT KIT的简称,它是最重要的开发工具,主要包括开发所用的调试,编译,运行等必须的软件工具。现在的版本都是1.1.x系列。 4.JSDK 是JAVA Software Development Kit的简写,它是给开发人员用的,很多人误以为它是针对Servlet的。JSDK有两类版本: JAVA SDK Standard Edition和Enterprise Editions。现在一些最新的JAVA开发软件都附带它(Standard Edition), 如JBUILDER3.5. 5.JSP 是JavaServer Pages的简写。 6.JSWDK 是JavaServer Web Development Kit的简称,最新版本是1.0.1,支持JSP 1.0和Servlet API 2.1。它主要是配合WEB服务器使用。 7.TOMCAT 是有SUN提供技术支持开发的,包括了JSWDK的全部功能,还有一些加强的,它是JAKARTA套间的一部分。 8.JRE 是Java Runtime包括了JAVA虚拟机,一些核心类和相关的支持文件。是JDK的一部分(RUNTIME部分) 9.JAF 一个Java 扩展,即JavaBean活动框架(JavaBean Activation Framework)。JAF的目的在于统一处理不同数据格式的方法(不管数据格式为简单文本还是由图片、声音、视频甚至其它“活动”内容共同组成的复合文档)。 三种Web开发主流技术的评价之ASP,PHP,JSP 作者:黄东   三种主流技术是哪三种呢?我主要讲一下ASP(ActiveX Server Page)、PHP、Jsp(Java sever Page)这三种技术。主要是基于我到现在已经使用的以下产品而谈:   ASP:MS IIS 4/Visuale Interdev 6   PHP:Apache 1.2.x/HomeSite 4.5/PHP 4   JSP:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2   以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对自己应用系统进行选择的同仁谈谈自己对它们的评价,以做参考,同时也请大家提出自己的想法和意见 ,多交流。但是我有一个这样的看法:“一个产品它存在就有存在的理由,它不可能一无是处,而是需要你去选择一个最合适你的技术、产品”。一个好的技术要用在最适合它的地方,所以本文可以做为你参考的一个文章,而不会告诉你任何一个技术的“最”。   ASP:ActiveX Server Page   ASP我们先来谈谈它,因为ASP是到现在开发人群最广的一个技术了,所以想来大家也会对它最关注。ASP是一个近乎完美的想法,可是因为MS一个大环境的问题所以在一些方面反会使它缩小在了一个小的框架中,如果它能更好的跳出这个框架,我想由它现在的基础将无人可比。   ASP更精确的说是一个中间件,这个中间件将Web上的请求转入到一个解释器中,在这个解释器中将所有的ASP的Script进行分析,再进行执行,而这时可以在这个中间件中去创建一个新的COM对象,对这个对象中的属性和方法进行操作和调用,同时再通过这些COM组件再完成更多的工作。所以说,ASP强大的不在于它的VBScript, 而在于它后台的COM组件,这些组件无限的扩充了ASP的能力。   强势:   1、简单易学。Basic有谁不会?很少会有人举手,所以有人在说这个开发基础是最广的。而且MS有一向做的非常好的联机手册,本地化语言的帮助,同时非常快的出现教学书籍,这样会大大方便开发人员的学习和对技术的深入研究。   2、安装使用方便。装好一个Windows 2000,只要你安装了IIS那么ASP就可以使用了,从没有什么需要你花心思去配置的。而说实话,ASP的调优也不难做,而要做到最细时也不是一般人能做的了的。   3、开发工具强大而多样。这个我不用说了,可以说的就是我以前使用VB中的Web Class开发出的Web应用一点不差,当时让许多人大吃一惊,VB也能做ASP上的应用!!!其实这正说明了ASP开发工具的多样化,同时它们的功能也很强,这一点已经被许多程序员所津津乐道。易用、简单、人性化,这本就是微软的强项哟。   4、效率高。在低的访问量下,ASP能体现出一定的效率,这时它对机器的要求并不高。   弱势:   1、Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性(Win2K已经不再支持Alpha了)都会因为与NT的捆绑而显现出来。   2、ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于Windows NT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失。   3、由于ASP还是一种Script语言,所以除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况。   4、无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的。   5、还无法完全实现一些企业级的功能:完全的集群、负载均衡。   总结:   适用人群:熟悉MS架构的人员。想用最短的时间学习,同时想用最简单的方式完成自己的应用。   适用平台:Windows系列平台适用应用:企业内部管理信息系统、中小Internet应用、快速数据库开发的应用。   学习方式:IIS 4 Online Help(中文)MSDN Lib相关知识市场上众多的ASP书籍   推荐开发工具:Visual InterDev/Home Site/FrontPage   推荐开发环境:Windows 2000 Server/MS SQL   推荐应用环境(最少):Windows 2000 Server/MS SQL 7/PIII 500/256M RAM/18G HD   PHP:Personal HomePage   PHP是一个什么原因出现的呢?它是一个技术人员希望能用一个快速的方面来完成他自己的个人主页中的一个小应用。而在他一发不可收拾时出现了php,它使一个人能在多种操作系统下迅速的完成一个轻型的Web应用。所以在短短的几年里,php迅速的升级了它的版本,同时在GNU的世界里找到了一个青梅竹马的伙伴----Apache。这终于让php有了基础,能在一个最佳的环境中运行,同时由于两个产品都是公开源代码的产品,所以大家可以使用它们的源代码将这两个产品用最完美的方式结合到一起,使用起来就如一个产品一样。个人认为php是自由软件在web应用平台上一个决胜的工具,如果没有php的出现,还会有许多人认为自由软件就代表了对开发人员的高技术要求、难记的代码、复杂的工具.....php使一个会使用basic的人员在极短的时间里快速学习并完成用户需要的应用。   怎么说php呢?如果说ASP是一个COM,哪么php说的更精确了可以说php是一个纯粹的Script翻译器。这也是php由3升级为4的一个重大原因,在4这个版本里它重写了语法分析器,从而加快了php整体的效能。而且从中你也就会明白为什么php需要支持这种或是那种扩充功能时它一定要与相应系统的lib库进行再编绎的原因。正因为它是正宗的“翻译器”,所以它是将script翻译成为需要执行的函数,再去执行它们,外部扩充不能由一些“动态加载”的方式进行,所以只能静态的编绎进php中(这只能在windows中除外)。   强势:   1、一种能快速学习、跨平台、有良好数据库交互能力的开发语言。ASP比不上它的就是这种跨平台能力了,而正是它的这种能力让Unix/Linux有了一种与ASP媲美的开发语言。语法简单、书写容易、现在市面上也有了大量的书,同时Internet上也有大量的代码可以共享,对于一个初学者想学些“高深的Unix”下的开发来说是一个决好的入手点。   2、与Apache及其它扩展库结合紧密。php与Apache可以以静态编绎的方式结合起来,而与其它的扩展库也可以用这样的方式结合(除外的就是Windows平台了)。这样的方式的最大的好处就是最大化的利用了cpu时和内存,同时极为有效的利用了apache的高性能的吞吐能力。同时外部的扩展也是静态连编,从而达到了最快的运行速度。由于与数据库的接口也使用了这样的方式,所以使用的是本地化的调用,这也让数据库发挥了最佳效能。   3、良好的安全性。由于php本身的代码开放所以它的代码在许多工程师手中进行了检测,同时它与apache编绎在一起的方式也可以让它具有灵活的安全设定。所以到现在为止,php具有了公认的安全性能。   弱势:   1、数据库支持的极大变化。由于php的所有的扩展接口都是独立团队开发完成的,同时在开发时为了形成相应数据的个性化操作,所以php虽然支持许多数据库,可是针对每种数据库的开发语言都完全不同。这样形成针对一种数据库的工发工作,在数据库进行升级后需要开发人员进行几乎全部的代码更改工作。而为了让应用支持更多种的数据库,就需要开发人员将同样的数据库操作使用不同的代码写出n种代码库出来,让程序员的工作量大大增大。   2、安装复杂。由于php的每一种扩充模块并不是完全由php本身来完成,需要许多外部的应用库,如图形需要gd库、LDAP需要LDAP库.……这样在安装完成相应的应用后,再联编进php中来。这也就是我以前在代码联盟新闻组中对网友所说的一定要在FreeBSD/Linux/Unix下运行php的原因。只有在这些环境下才能方便的编绎对应的扩展库。这些都是一般开发人员在使用php前所先要面对的问题,正是这样的问题让许多开发人员转而使用其它的开发语言,必竟Unix没有那么多的用户。   3、缺少企业级的支持。没有组件的支持,哪么所有的扩充就只能依靠php开发组所给出的接口,事实上这样的接口还不够多。同时难以将集群、应用服务器这样的特性加入到系统中去。而一个大型的站点或是一个企业级的应用一定需要这样的支持的。注:在php的4.0版本以后加入了对servlet/javabean的支持,也许这样的支持会在以后的版本中更加增强,也许这样的支持会是php以后的企业级支持的起点。   4、缺少正规的商业支持。这也是自由软件一向的缺点,我想在国内php的开发人员正在快速增加,相信在不久的将来,这样的支持能多起来。   5、无法实现商品化应用的开发。由于php没有任何编绎性的开发工作,所有的开发都是基于脚本技术来完成的。所以所有的源代码都无法编译,所以做完成的应用只能是自己或是内部使用,无法实现商品化。   总结:   适用人群:熟悉Unix环境,需要在最少的投入下完成快速的应用开发。   适用平台:FreeBSD/Linux/Unix操作系统、Apache服务器适用应用:Internet高访问量、快速数据库开发的应用。   学习方式:Internet上国内丰富的资源Internet上丰富的源代码资源,完全可以参考这样的例程来完成自己的应用。市场上最近出版的好几本php手册。   推荐开发工具:Home Site/PHPEd   推荐开发环境:FreeBSD 4.1/RedHat 6.1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服