面向对象

  • Java的特点之一就是面向对象,是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作,让大型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。

跨平台性

  • 跨平台性是Java主要的特性之一,跨平台使得用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。
  • 执行Java应用程式必须安装Java 运行时环境(Java Runtime Environment,JRE),JRE包括Java虚拟机(Java Virtual Machine,JVM),以及Java平台核心类和基础Java 平台库。
  • 实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码写成的“半成品”,这个“半成品”会在Java虚拟机(解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的存取工作。主要注意的是,尽管已经存在一个进行代码翻译的解释层,有些时候Java的字节码代码还是会被JIT编译器进行二次编译。
  • Java语言使用解释层最初是为了轻巧性。所以这些程序的运行效率比C语言和C++要低很多,用户也对此颇有微词。很多最近的调查显示Java的程序运行速度比几年前要高出许多,有些同样功能的程序的效率甚至超过了C++和C语言编写的程序。
  • Java语言在最开始应用的时候是没有解释层的,所有需要编译的代码都直接转换成机器的原始代码。这样做虽然使程序获得了最佳的性能,但是导致程序异常臃肿。从JIT技术开始,Java的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态编译”的技术,也就是说虚拟机实时监测和分析程序的运行行为,同时选择性地对程序所需要的部分进行编译和优化。所有这些技术都改善了代码的运行速度,但是又不会让程序的体积变得失常。

自动垃圾回收(Garbage Collection)

  • C++语言被用户诟病的原因之一是大多数C++编译器不支持垃圾收集机制。通常使用C++编程的时候,程式设计师于程式中初始化对象时,会在主机记忆体堆叠上分配一块记忆体与位址,当不需要此对象时,进行解构或者删除的时候再释放分配的记忆体位址。如果对象是在堆叠上分配的,而程序员又忘记进行删除,那么就会造成记忆体泄漏(Memory Leak)。长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的记忆体空间。而且如果同一记忆体地址被删除两次的话,程序会变得不稳定,甚至崩溃。因此有经验的C++程序员都会在删除之后将指标重置为NULL,然后在删除之前先判断指标是否为NULL。
  • Java语言则不同,上述的情况被自动垃圾收集功能自动处理。对象的建立和放置都是在记忆体堆叠上面进行的。当一个物件没有任何引用的时候,Java的自动垃圾收集机制就发挥作用,自动删除这个物件所占用的空间,释放记忆体以避免记忆体泄漏。

基本语法

编写Java程序前应注意以下几点:
  • 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每单词首字母大写,例如myFirstJavaMethod。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名
  • 保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的Java程序由public static void main(String[] args)方法开始执行。

注释

  • 注释的作用:标识程序是干什么的,以及它是如何构建的。注释帮助程序员进行相互沟通以及理解程序。注释不是程序设计语言,所以编译器编译程序时忽略它们。

接口和类别

Java自带了创建接口的类别,可以这样使用:

public interface Deleteable {
    void delete();
System.out.println(" ATTACH DATABASE 'DatabaseName' As 'Alias-Name'");
}

这段代码的意思是任何实现(implement)Deleteable接口的类别都必须实现delete()方法。每个类别对这个方法的实现可以自行定制。由此概念可以引出很多种使用方法,下面是一个类别的例子:

public class Fred implements Deleteable {
        // 必須實作Deleteable介面中的delete方法
@Override 
public void delete() { 
        // 實作的程式碼
    }
        
       // 這個類別也可以包含其他方法 
public void doOtherStuff() {

    }
}
在另外一个类别中,可以使用这样的代码:

public void deleteAll(Deleteable [] list){
    for(int i = 0; i < list.length; i++){
        list[i].delete();
    }
}

因为队列中所有的对象都可以使用delete()方法。Deleteable队列中包含Fred对象的引用,而这个类别和其他Deleteable类别在使用deleteAll()方法时候不需要进行任何改变,之所以这样做就是为了在接口的执行和其代码之间进行区别。

应用程序开发接口

  • 在Java语言中,应用程序接口(API)化身成类,并且分组成为包。每个包中包含有相关的接口和类。对于不同的平台,Java提供了不同版本的包。API的设定由sun公司和其他公司通过JCP(Java社群程序)决定。任何公司和个人都可以参与这个工程,对API进行设计。2004年,IBM和BEA公司准备联合对官方的Java开源软件工程进行支持,但是2005年初,sun公司拒绝了这个支持。