中文翻译
JAVA介绍
作者:Martin Ngobye.
出处:Computing Static Slice for Java Programs
Java是被设计用来解决在上下文分布式的异构网络中应用程序开发的问题。在这些复杂问题中,首要的是安全发布应用程序、消耗最小的系统资源、可以在任何硬件和软件平台上运行以及被动态地扩展。
Java最初是作为研发方案的一部分而开发的,这个研究方案是为了给广阔多样的网络设备和嵌入式系统开发高级的软件。目标是开发一个小巧的、可靠性高的、可移植的、分布式的、实时的操作系统平台。当这个方案开始的时候,C++是精选的语言,但是过了一段时间,用C++语言遇到的困难也随之增长,解决这些问题最好的办法是创造一个全新的语言平台。设计和体系结构的决定汲取了多种语言,例如Eiffel、 SmallTalk,、Objective C以及 Cedar/Mesa。结果证明这个语言平台是理想的,对于开发一个可靠性高的、可移植的、分布式的、基于终端用户网络的应用程序在多种环境中广泛搜索从嵌入网络的设备到万维网和桌上型电脑。
Java的需求设计通过自然状态的,在软件必须被配置的处理环境中被推动的。
因特网和万维网的巨大发展导致我们完全地以新的情形着眼于开发和发行软件。对于全球电子化的商业和销售发行的存在,Java必须使安全的,高性能的和非常健壮的应用程序在多平台异构的,分布式的网络中开发。
在异构的网络中,多平台上运行会使传统配置的二进制发送、释放、更新、补丁等等无效。为了在这些问题中幸存下来,Java必须是体系结构中立的、可移植的以及可以被动态的修改。
为满足以上的需求而开发的Java系统是简单的,所以它能够被绝大多数的程序员进行编程;熟悉的,所以当前的程序员学习Java语言是简单的;面向对象的,为了利用现代的软件开发方法学和适合分布式的客户机/服务器应用程序;多线程的,为了高性能在应用程序中需要执行多个并发的活动,例如多媒体;解释的,为了最大极限的可移植和动态的容量。
同时,以上的需求完全是由收集的时髦词语组成的,所以在开始以前让我们来查看它们中的一些和它们的各自的优点。
什么是完全新的,样式风格在Java语言和它的运行系统结合它们来产生一个灵通的且强大的编程系统。
在软件中,用Java语言开发的你的应用程序可以在多种机器总体结构、操作系统和图形用户接口之间移植。运用Java语言,诸如软件开发者的工作就会变得简单的多——你会把你的全部精力都集中在最终的目标:准时运送革新的产品、基于可靠的构造的Java语言。较好的开发软件的方法在这里,现在,Java语言平台会带给你这些。
许多动态的语言像Lisp、TCL和 SmallTalk通常被应用于原型构造技术它们成功原因中的一个在于它们非常健壮——你没有必要去担心关于解除或破坏存储器。
同样的,程序员可以相对大胆的处理存储器,当在Java语言里面编程的时候。垃圾回收系统使程序员的工作大为容易,卸下了程序员肩上存储管理之负担,存储分配错误不再发生。
一般认为像Lisp, TCL, 和 SmallTalk这样一些语言十分适合于原型法的另一个理由,是因为它们不要求你受早期决定的约束——这些语言的语义是很丰富的。
Java语言有着严密的对应的属性:它促使你做出清楚的选择。伴随着这些选择带来了许多的协助——你可以写一个方法调用,而且如果你在编写时有一些错误的时候,在编译的时候将会被告知。你没有必要去担心关于方法调用的错误。
Java初学者需掌握的30个基本概念
基本概念:
1.OOP中唯一关系是什么是对象的接口,就像计算机的销售商不管电源内部结构是怎样的,它只关心能否给你提供电,也就是只要知道能或不能而不是知道怎样和为什么会有电。所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过封装对象数据,很大限度上提高复用率。
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。
3.封装:就是把数据和行为结合起在一个包中,并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。
4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。
5.对象的3个主要特性:
Behavior——说明这个对象能做什么。
Tate——当对象施加方法时对象的反映。
Dentity——与其他相似行为对象的区分标志。
每个对象有唯一的indentity 而这3者之间相互影响。
6.类之间的关系:
use-a :依赖关系
has-a :聚合关系
is-a :继承关系——例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法(个性存在于共性中)。
7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。
例:Data类的构造器叫Data。
New Data()——构造一个新对象,且初始化当前时间。
Data happyday=new Data()——把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的。
new返回的值是一个引用。
构造器特点:构造器可以有0个,一个或多个参数。
构造器和类有相同的名字。
一个类可以有多个构造器,构造器没有返回值,构造器总是和new运算符一起使用。
8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。
9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包Java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。
10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。
11.扩展类:扩展类充分体现了is-a的继承关系,形式为:class (子类) extends (基类)。
12.多态:在java中,对象变量是多态的,而java中不支持多重继承。
13.动态绑定:调用对象方法的机制。
1)编译器检查对象声明的类型和方法名。
2)编译器检查方法调用的参数类型。
3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。
4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。
5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。
14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。
15.动态调用比静态调用花费的时间要长。
16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。
例::public abstract string getDescripition
17.Java中的每一个类都是从Object类扩展而来的。
18.object类中的equal和toString方法。
equal用于测试一个对象是否同另一个对象相等。
toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示(toString 方法是一个很重要的方法)。
19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。
20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。
21.class类 object类中的getclass方法返回class类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。
22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。
能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大。
1)在运行时分析类的能力。
2)在运行时探察类的对象。
3)实现通用数组操纵代码。
4)提供方法对象。
而此机制主要针对是工具者而不是应用及程序。
反射机制中的最重要的部分是允许你检查类的结构.用到的API有:
java.lang.reflect.Field 返回字段。
java.reflect.Method 返回方法。
java.lang.reflect.Constructor 返回参数。
方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。
23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。
24.接口不是一个类,而是对符合接口要求的类的一套规范。
若实现一个接口需要2个步骤:
1)声明类需要实现的指定接口。
2)提供接口中的所有方法的定义。
声明一个类实现一个接口需要使用implements 关键字。
class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口。
25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable。
26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。
例:ActionListener 接口监听。
类似的API有:
java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。
28.内部类:一个内部类的定义是定义在另一个内部的类。
原因是:
1)一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
2)对于同一个包中的其他类来说,内部类能够隐藏起来。
3)匿名内部类可以很方便的定义回调。
4)使用内部类可以非常方便的编写事件驱动程序。
29.代理类(proxy):
1)指定接口要求所有代码。
2)object类定义的所有的方法(toString equals)。
30.数据类型:Java是强调类型的语言,每个变量都必须先申明它的类型,java中总共有8个基本类型:4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。
1.Java是简单的
Java与C++极为相似,但却简单得多。高级编程语言的所有特性中,不是绝对需要的都已删去了。例如,Java没有算符过载、标题文件、预处理、指针运算、结构、联合、多维数组、模板及隐式类型变换。如果你知道一点C、C++或Pascal,你很快就会驾驭Java。这里是一个简单的JavaHelloWorld程序:
publicclassHelloInternet{
publicstaticvoidmain(Stringargv[]){
System。out。println(“HelloIn-ternet!”)
}
}
2.Java是面向对象的
Java是一种面向对象的编程语言。除了简单的类型,如数字和布尔算子之外,Java中的大部分都是对象。正如任何面向对象的语言一样,Java代码也按类组织。每个类定义一组规定对象行为的方法。一个类可以继承另一个类的行为。在类的根层次上,通常是类对象。Java支持单继承类层次结构。这就是说,每个类一次只能继承一个别的类。有些语言允许多继承性,但这可能造成混乱,使语言不必要地复杂化。例如,难以想像,一个对象会继承两个完全不同的类的行为。Java还支持摘要类的接口。这允许编程人员先定义接口的方法,而不必急于马上确定方法的实现。一个类可以施行多个接口,从而具有真正多继承性的许多优点。一个对象也可实施任意数量的接口。Java接口与IDL接口极其相似。很容易建立IDLJ编译器。这就是说,Java可用于CORBA对象系统来建立分布式对象系统。鉴于在许多计算机系统中都采用IDL接口和CORBA对象系统,这种兼容性是重要的。
3.Java是静态类型的
在一个Java程序中,必须定义所用对象(数字、字符、数组等)的类型。这有助于编程人员很快发现问题,因为当程序编译时可以检测类型错误。不过,Java系统中的对象也有动态类型。要求一个对象为动态类型往往是可能的,所以编程人员写的程序可以对不同类型的对象做不同的事。
4.Java是编译型的
当运行Java程序时,它首先被编译成字节代码。字节代码非常类似于机器指令,所以Java程序非常高效。然而,字节代码并不专对一种特定的机器,所以Java程序无需重新编译便可在众多不同的计算机上执行。Java源程序被编译成类文件,它相当于程序的字节代码表现。在一个Java类文件中,所有对方法及实例变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码更通用,更不易受修改的影响,而仍具高效。
5.Java是体系结构中立的
Java语言对每种计算机都一样。比如,简单的类型都是不变的:整数总是32位,长整数总是64位。令人奇怪的是,诸如C及C++等时髦的编程语言却不是这样。由于这些语言定义如此自由,每种编译器及开发环境便各有不同了,这使程序的移植成为讨厌的问题。Java程序的移植却很容易,而且不需要进行重新编译。
6.Java是健全的
Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序不会崩溃,而把该例外抛弃。程序会发现这类例外,并加以处理。传统的程序可以访问计算机的全部内存。程序可能(无意识地)修改内存中的任何值,这就会造成问题。Java程序只能访问内存中允许它们访问的那些部分,所以Java程序不可能修改不拟修改的值。
7.Java是小巧的
由于Java的设计是要在小的计算机上运行,作为一种编程语言来说其系统是相对较小的。它能有效地在4MB以上RAM的PC机上运行。Java翻译器只占用几百KB。这种翻译器对Java的平台无关性和可移植性是可靠的。由于Java很小,它对内存很小的计算机,如基于Java的PC机,以及电视机、烤箱、电话机及家用计算机等,是很理想的。
8.Java是多线程的
Java程序可以执行一个以上的线程。比如,它可以在一个线程中完成某一耗时的计算,而其它线程与用户进行交互对话。所以用户不必停止工作,等待Java程序完成耗时的计算。在多线程环境中的编程通常是困难的,因为许多东西可能同时出现。但是,Java提供了易于使用的同步特性,使编程更为方便。