ava程序包括源代码,由编译器生成的类文件,有归档工具jar生成的.jar文件、内对象状态序列化.ser文件。其中源代容码的结构如下:
1、package语句。0或多个,用于使文件存入指定包中,这条语句必须置于文件之首。
2、import语句。0或多个。必须在所有类定义之前引入标准类。
3、public class Definition(公共类定义),0或1个,指定应用程序类名,需与源文件名一致。
4、class Definition,0或多个,类定义。
5、interface Definition,0或多个,接口定义。
② JAVA IO的使用原则及stream 和 reader的区别
嗨你好
avaIO的一般使用原则:
一、按数据来源(去向)分类:
1、是文件:FileInputStream,FileOutputStream,FileReader,FileWriter
2、是byte[]:ByteArrayInputStream,ByteArrayOutputStream
3、是Char[]:CharArrayReader,CharArrayWriter
4、是String:StringBufferInputStream,StringReader,StringWriter
5、网络数据流:InputStream,OutputStream,Reader,Writer
二、按是否格式化输出分:
1、要格式化输出:PrintStream,PrintWriter
三、按是否要缓冲分:
1、要缓冲:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的):InputStream,OutputStream及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader,Writer及其所有带Reader,Writer的子类
五、按输入输出分:
1、输入:Reader,InputStream类型的子类
2、输出:Writer,OutputStream类型的子类
六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader,OutputStreamWriter
2、对象输入输出:ObjectInputStream,ObjectOutputStream
3、进程间通信:PipeInputStream,PipeOutputStream,PipeReader,PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream,PushbackReader,LineNumberInputStream,LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么:原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第1点
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三(特别注明:一定要注意的是readLine()是否有定义,有什么比read,write更特殊的输入或输出方法)
第六,是否要格式化输出:原则二
Java中Inputstream与Reader的区别
Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,
InputStream、OutputStream是用来处理8位元的流,
Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。
java.io.Reader和java.io.InputStream组成了Java输入类。Reader用于读入16位字符,也就是Unicode编码的字符;而InputStream用于读入ASCII字符和二进制数据。
在Java中,有不同类型的Reader输入流对应于不同的数据源:
FileReader用于从文件输入;
CharArrayReader用于从程序中的字符数组输入;
StringReader用于从程序中的字符串输入;
PipedReader用于读取从另一个线程中的PipedWriter写入管道的数据。
相应的也有不同类型的InputStream输入流对应于不同的数据源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,还有两种没有对应Reader类型的InputStream输入流:
Socket用于套接字;
URLConnection用于URL连接。
这两个类使用getInputStream()来读取数据。
相应的,java.io.Writer和java.io.OutputStream也有类似的区别。
③ ava中有几种方法可以实现一个线程用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用
的ActiveX
ActiveX的ActiveX起源时,最初只是一个品牌名称,它涵盖了技术不是孤立的,其中大部分是与Internet和Web有一定关联。更重要的是,在ActiveX的整体技术是微软的COM(组件对象模型组件对象模型)的建立。但不要误认为ActiveX是定义了所有包含基于COM的技术。 COM和Microsoft Office和Windows,微软正在做相关的一切,很明显,这些产品是不是ActiveX的家庭成员。
的ActiveX复合文档从微软的技术 - OLE成长起来的。 OLE初始释放,但针对复合文档,但在后续版本OLE2进口COM。 COM的的OLE设计师需求的诞生。其基本出发点是做一个软件,通过一个共同的机构提供服务,另一家软件。因此,COM用户OLE2。事实上,COM和复合文档,是没有多大意义的。后来,COM完全无关的复合文档技术开始得到广泛的应用。因此,微软开始“染指”通用平台技术。 COM是不是一个产品,它需要一个商标名称。不幸的是,市场专家们选择了“OLE”作为商号。然后,利用COM技术的OLE标签粘贴。当然,这些技术的绝大多数具有没有关系与化合物笔。微软为了向人们解释:“OLE不仅是指复合文档!”这是一个相当大的量的能量和时间。
所以,在1996年的春天,微软改变了主意,选择了ActiveX作为一个新的品牌名称。 ActiveX是一个松散定义的基于COM的技术的集合,OLE仍然仅指复合文档。当然,最重要的核心COM。
对象模型完全独立于编程语言,这是一个非常新颖的想法。从C + +和Java对象,我们将能够理解。但所谓的COM对象是什么就是什么呢?为了便于理解,COM可以看出一些种(软件)封装技术,可以看到它作为一个不同的软件的一部分,结合成某种形式的面向对象的,可以交互的过程和一组支持库。 COM对象可以被写入在C + +,Java中,和VB语言的任何DLL或文件的不同进程的工作的实施。任何语言编写的客户端使用COM对象,而不关注的对象,和不关心它的DLL,或者到另一个进程来执行。从客户端,没有任何区别。
这样一个共同的处理方法是非常有用的。例如,两个应用程序协调运行的用户,可以合作的一部分,作为COM对象实现(当然,现在可以做的OLE复合文档)之间的相互作用。在浏览器中执行从Web服务器下载的代码,浏览器就可以看到它作为一个COM对象。换句话说,COM技术也是一种打包下载代码的标准方法(ActiveX控件执行此功能)。
甚至是应用程序与本地操作系统交互的方法,您可以使用COM来指定新的API(Windows和Windows NT,多数被定义为一个COM对象)。 COM虽然起源于一个复合文档,但它可以被有效地应用于许多软件问题。
的ActiveX英国
活动平台是微软的世界观。其基本思想是:使用ActiveX控件来建立,包括从组织与用户互动和交易处理监视器,以适应COM的Web服务器,所有的自动。活动平台包括两部分:活动服务器和活动的客户端。
活动服务器的中间层。组件或Active Server Pages,为客户提供业务逻辑和应用处理的地方。 ActiveServer技术的核心NT Server,Microsoft事务服务器,数据管理服务,目录服务,Web服务,以及网络服务。
交易服务器是微软的基于组件的编程模型,结合了传统的TP多个线程生成和数据库监控功能。其他组件的数据管理服务,如主动OLE DB和ODBC访问DB2,甲骨文,SQL Server和其他数据源。目录服务提供目录服务层,使在网络上的远程对象的相互四处搜寻DCOM(分布式COM,分布式COM)。 Inter网服务器为中心的Web服务建立在Web服务器上,应用程序的开发,生成脚本(脚本)的机构。通过中介网络为中心的网络服务,DCOM建立MS-RPC同步,这样一来就能连接的控制。
活跃的客户端是一个跨平台的。微软的技术,即使排斥,但也希望,这项技术是开放的多个操作系统。该计划的具体实施是使用脚本引擎(脚本引擎)。脚本引擎是一个标准的HTML和Java虚拟机(JVM)与微软特色,微软的VBScript司法人员叙用委员会RIPT的构成。组装到微软的IE 3.0和4.0的ActiveX,可以成为活跃的客户端的C / S
从企业用户只使用Windows的Active平台可以提供一个强大的,可扩展的服务器应用程序开发平台的应用程序的一部分。 ActiveServer的TP监视器高端产品这样的场合,使用常见的工具和技术。因此,小型工作组和内联网应用程序将无法超越的Active Server的能力。 ACTI VE的目标平台是一个异构的环境,但由于过度依赖IE,所以你不能开车到客户端。虽然一些非Windows平台上也推出了浏览器,但最好的支持,最新版本的资源管理器或窗口s。
的ActiveX进步
COM扩展初始版本的分布式计算,假设COM对象和它的客户端运行在同一台机器(在同一个进程,而且在不同的进程),DCOM的的ActiveX家庭成员。后来,它可以使用在Windows 95中。 COM对象的DCOM客户端交互不能做任何。
客户端使用完全相同的代码可以访问本地和远程对象。然而,很多情况下,客户需要的一些DCOM附件。 DCOM提供分布式的安全保密机制,以提供验证和数据加密。发布于1998年,是Windows NT 5.0,Kerberos等安全保密协议,追加到DCOM。 DCOM已经能够使用简洁的域名服务,目录服务,搜索其他计算机上的COM对象。 NT 5.0支持更多的的ACTI已经指南。 Active Directory的域名服务和轻量级目录访问协议的基础上。
DCOM的对手,一直是OMG(对象管理组织)的CORBA(公共对象R equest代理体系结构)。它被组装成IONA的Orbix和Visigenic的VisiBroker和其他产品。不久前,另一位技术支持分散的对象 - Java远程方法调用介绍。两个C ORBA,DCOM,可以在多语言写对象之间的通信。 RMI只限于Java实现对象之间的通信。很显然,这是一个制约因素。 RMI是非常简单的使用。 RMI开发人员可以使用Java来设计的协议规范。因此,在语言的功能,可以进行无缝的。
写一个的DCOM服务器处理只有两三个客户端,是相当简单的。然而,建立一个高效的处理数百成千上万的客户端DCOM服务器,相当困难。
为了便于编写可扩展的DCOM服务器,微软事务服务器(MTS)。在支持该交易的同时,MTS自动生成的线索和重复使用的智能对象。 MTS可伸缩的服务器的生产变得相当简单。即使没有事务处理应用程序,使用MTS也不错。事实上,M icrosoft鼓励人们使用VB写的MTS应用程序。这是发展业务服务器的传统做法不同,所有MTS应用程序的COM对象写入一个以上的,而且必须实现的一个DLL。在正常情况下,客户端将无法看到MTS。客户端只是继续生产,使用COM对象可以是。
标准化组件的
基于组件的应用程序的开发,组装电子设备,你可以使用现成的零部件来构建应用程序。桌面使用的ActiveX控件,基于COM的组件。所谓的ActiveX控件,但要符合一定的标准,COM对象进行交互的客户端。
例如,ActiveX控件,必须通过自动化(调度接口)来公开方法。这种标准化的交互功能,可以使用在一个数量不同的情况下,相同的控制。 “幕后”这个标准接口,ActiveX控件是几乎能胜任。现在,许多软件公司都能够控制各种功能。
ActiveX控件的DDL的准备,为此,它必须被加载到一个容器中。 ActiveX控件容器VB原型,此外,也有多种选择的容器。目前,一个非常重要的控制容器是微软的网络浏览器
那些元素的所谓的ActiveX控件,它是要实现的许多方法。他们已经从本地硬盘的机器VB和其他容器。数百KB和MB管制的,似乎没有什么大的区别。但是当你想控制被加载到Web浏览器,它很可能是通过电话线速度非常缓慢。现在,该大小的控制是非常关键的问题。要进行控制,超过一定限度,就会延长下载时间。因此,Microsoft提供了ActiveX控件,只有在绝对必要的功能。
苹果公司和IBM公司推出的OpenDoc,是主要竞争对手的ActiveX控件。的OpenDoc赞助的企业现在已正式宣布暂停经济援助。与微软的企业青睐JavaBeans(J ava的基于组件的结构)的对抗。基本上是捆绑的ActiveX控件和Windows,在二进制机器代码,而JavaBeans是不同的,它是能够执行。这,当然是有代价的。很明显,只要不牺牲便携性,它是不可能完全彻底利用当地的环境。要编写的组件可以从公共互联网上下载的,应优先考虑选择JavaBeans的。
桌面组件市场的持续快速增长。其中大部分是基于ActiveX控件的建立(Java Beans的仍是少数)。服务器组件的标准化落后。在桌面上,VB,PowerBuilder编程环境,容器,Web浏览器是强大的。如果在服务器容器是必须要做的吗?集装箱的服务器组件事务服务器是一个更好的选择。
微软的竞争对手,并尽一切可能防止MTS和NT占领市场。他们是在全速发展标准的服务器组件,其中一个最有前途的是对En??terprise JavaBeans。 JavaBeans的扩张,并定义了一个事务处理服务器接口。 Enterprise JavaBeans的支持者,独立软件供应商,作为一个COM组件来写,但写豆类的服务器组件。
ActiveX构建工具的
推广的ActiveX控件,ActiveX控件的开发工具是与日俱增。由于ActiveX是不依赖于语言,传统的开发工具基本上可以建立的ActiveX控件。最常用的Delphi,宝werBuilder以及Visual Basic中的Visual C + +时,Visual J + +等。基本配置文件
1。 ActiveX控件的3GL开发:①MFC(微软基础类,Microsoft基础类),②ActiveX模板库,ActiveX模板库(ATL),③BaseCtrl的框架等。 MFC是最经典的,使用MFC开发人员不关心的接口,而是将注意力集中在对象的动作。它的缺点是必须存在的控制和执行DLL与容器的尺寸就越大。 ATL可以使用模板来生成代码。也就是说,图书馆和DLL没有一起推出的控制。在ATL中,你需要一些基本的派生类从现有的模板。 AT L也有缺点,即该接口的处理是困难的,该应用程序的必要的接口,必须创建。此外,ATL不支持的类向导,类向导。不幸的是,没有对象描述语言(对象描述语言)和接口定义语言文件,自动同步用户代码向导。 BaseCtrl是一??个简单的类型库。 ATL是非常相似,但没有模板。事实上,由于BaseCtrl太容易了,微软不支持它。在BaseCtrl中,一些无所不能的控制(骨架控制)。该ActiveX的发展模式BaseCtrl提供容易理解的,但与ATL并不简单,是不是和ATL和灵活性。现在看来,ActiveX控件的开发人员,BaseCt RL是“苦”的选择。
2。开发工具
ActiveX控件可以,第一个工具的Microsoft Visual C + +。它可以提供最大程度的控制ActiveX开发。的Visual J + +和ActiveX控件也可以。
Borland公司推出了两款工具(JBuilder和IntraBuilder),也是很可观的。然而,BORL和工具创建ActiveX组件,只有德尔福3.0和C + + Builder中。 Borland的Delphi的A ctiveX发展的特点,被称为内有效。它是任意的Delphi窗口的形式的ActiveX。活跃??在配备了新的控件在Web上。 Delphi控件COM和DCOM的链接。
PowerBuilder的5.0转化为可用于开发的ActiveX客户端/服务器开发工具。作为一个ActiveX控件,可配鲍威的rBuilder数据窗口(PowerBuilder应用开发的核心部分)。为了使PowerBuilder开发人员现在可以使用的PowerScript编程语言,一些熟悉的功能。
拥有最好的工具,使ActivX控件,无疑是微软。例如,使用Visual Basic 5.0中,开发人员可以使用可视化编程环境和本地语言Visual Basic应用开发控制。
5的ActiveX
事实上,Windows和Windows NT,ActiveX技术环境的世界。但无论MICR OSOFT以及如何推进它的操作系统,也不能所有的企业已成为所有Windows。 ,MICROS经常要尽量使COM,DCOM和ActiveX家庭的一部分,也可以使用其他OS。 Macin胡说已经支持ActiveX,这其中也包括对ActiveX控件的支持。 Software AG的这些技术被移植到多种Unix和IBM的OS/390。 DEC和HP还打算在自己的系统中使用这些技术,他们也是微软的源代码移植的方式来实现。
COM的Windows 95和Windows NT环境为基础的软件已成为一个重要组成部分,但它是未来,有很多不确定因素。例如,微软是作为一个多平台的技术,能够COM开发允许继续存在呢?按企业现有的NT服务器,有必要使DCOM的分布式服务,也可以应用在非微软平台上。为了解决这些问题,它需要相当长的一段时间。基于CORBA的产品,和JAV一个RMI已经成功地运行在多操作系统环境。后期推出的多平台,DCOM,CORBA和RMI领先??的多。
ActiveX控件和JavaBeans竞争力的前景?无论在Web浏览器或运行在另一个地方运行的软件,或在短的,组件的软件(构件的)是一种软件开发的热点。目前,ActiveX控件,暂时处于领先地位,但由于的OpenDoc的运行过程,与微软的企业竞争成为了一个与之抗衡的。用户再也不想看到“独霸天下”,仅仅这一点的,JavaBean将在此的市场竞争中抢占一席之地。
④ java中t是什么意思
JAVA 中<t>是泛型的意思
意思是Tree这个类里面需要用到另外一个类,但是又不能确定要用到的那个类的具体类型,所以暂时用T来代替,当具体的程序知道要用到的那个类型是什么的时候就用那个类型来代替T,就ok了。例如我需要实例化一个Tree类,需要用到的那个类是String,那么我就可以这么来实例化Tree<String>()。
第一是泛化。可以用T代表任意类型Java语言中引入泛型是一个较大的功能增强不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了,这带来了很多好处。
第二是类型安全。泛型的一个主要目标就是提高ava程序的类型安全,使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。如果不用泛型,则必须使用强制类型转换,而强制类型转换不安全,在运行期可能发生ClassCast Exception异常,如果使用泛型,则会在编译期就能发现该错误。
第三是消除强制类型转换。泛型可以消除源代码中的许多强制类型转换,这样可以使代码更加可读,并减少出错的机会。
第四是向后兼容。支持泛型的Java编译器(例如JDK1.5中的Javac)可以用来编译经过泛型扩充的Java程序(Generics Java程序),但是现有的没有使用泛型扩充的Java程序仍然可以用这些编译器来编译。
⑤ java源代码如何用
java源代码是用来关联jar中的编译代码的。
应用场景:通常在打开eclipse中的jar的时候,发现版class文件不能被打开,权此时出现下面的界面,此时就需要通过“Attach Source”,之后找到对应的java源代码来实现代码关联,即可正常的显示class类中的内容。
备注:如果此处ava源代码指的是源代码文件(“.java”),是用来进行代码维护和二次开发的必备东西。
⑥ java 类加载机制有什么用
AVA类加载机制详解
“代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是变成语言发展的一大步”,这句话出自《深入理解JAVA虚拟机》一书,后面关于jvm的系列文章主要都是参考这本书。
JAVA源码编译由三个过程组成:
1、源码编译机制。
2、类加载机制
3、类执行机制
我们这里主要介绍编译和类加载这两种机制。
一、源码编译
代码编译由JAVA源码编译器来完成。主要是将源码编译成字节码文件(class文件)。字节码文件格式主要分为两部分:常量池和方法字节码。
二、类加载
类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束。过程共有七个阶段,其中到初始化之前的都是属于类加载的部分
加载----验证----准备----解析-----初始化----使用-----卸载
系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类,当运行某个java程序时,会启动一个java虚拟机进程,两次运行的java程序处于两个不同的JVM进程中,两个jvm之间并不会共享数据。
1、加载阶段
这个流程中的加载是类加载机制中的一个阶段,这两个概念不要混淆,这个阶段需要完成的事情有:
1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在java堆中生成一个代表这个类的Class对象,作为访问方法区中这些数据的入口。
由于第一点没有指明从哪里获取以及怎样获取类的二进制字节流,所以这一块区域留给我开发者很大的发挥空间。这个我在后面的类加载器中在进行介绍。
2、准备阶段
这个阶段正式为类变量(被static修饰的变量)分配内存并设置类变量初始值,这个内存分配是发生在方法区中。
1、注意这里并没有对实例变量进行内存分配,实例变量将会在对象实例化时随着对象一起分配在JAVA堆中。
2、这里设置的初始值,通常是指数据类型的零值。
private static int a = 3;
这个类变量a在准备阶段后的值是0,将3赋值给变量a是发生在初始化阶段。
3、初始化阶段
初始化是类加载机制的最后一步,这个时候才正真开始执行类中定义的JAVA程序代码。在前面准备阶段,类变量已经赋过一次系统要求的初始值,在初始化阶段最重要的事情就是对类变量进行初始化,关注的重点是父子类之间各类资源初始化的顺序。
java类中对类变量指定初始值有两种方式:1、声明类变量时指定初始值;2、使用静态初始化块为类变量指定初始值。
初始化的时机
1)创建类实例的时候,分别有:1、使用new关键字创建实例;2、通过反射创建实例;3、通过反序列化方式创建实例。
new Test();
Class.forName(“com.mengdd.Test”);
2)调用某个类的类方法(静态方法)
Test.doSomething();
3)访问某个类或接口的类变量,或为该类变量赋值。
int b=Test.a;
Test.a=b;
4)初始化某个类的子类。当初始化子类的时候,该子类的所有父类都会被初始化。
5)直接使用java.exe命令来运行某个主类。
除了上面几种方式会自动初始化一个类,其他访问类的方式都称不会触发类的初始化,称为被动引用。
1、子类引用父类的静态变量,不会导致子类初始化。
执行结果:
MIGU
用final修饰某个类变量时,它的值在编译时就已经确定好放入常量池了,所以在访问该类变量时,等于直接从常量池中获取,并没有初始化该类。
初始化的步骤
1、如果该类还没有加载和连接,则程序先加载该类并连接。
2、如果该类的直接父类没有加载,则先初始化其直接父类。
3、如果类中有初始化语句,则系统依次执行这些初始化语句。
在第二个步骤中,如果直接父类又有直接父类,则系统会再次重复这三个步骤来初始化这个父类,依次类推,JVM最先初始化的总是java.lang.Object类。当程序主动使用任何一个类时,系统会保证该类以及所有的父类都会被初始化。