| ## Java特性 |
|
| - Java 语言是简单的: |
|
| Java 语言的语法与 C 语言和 C++ 语言很接近,丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。 |
|
| - Java 语言是面向对象的: |
|
| Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。 |
|
| - Java语言是分布式的: |
|
| Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。 |
|
| - Java 语言是健壮的: |
|
| Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。 |
|
| - Java语言是安全的: |
|
| Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 |
|
| - Java 语言是体系结构中立的: |
|
| Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 |
|
| - Java 语言是可移植的: |
|
| 这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。 |
|
| - Java 语言是解释型的: |
|
| 如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 |
|
| - Java 是高性能的: |
|
| 与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。 |
|
| - Java 语言是多线程的: |
|
| 在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。 |
|
| - Java 语言是动态的: |
|
| Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。 |
|
| ## Java基本专业术语 |
|
| - JDK(Java Development Kit )又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。 |
| - JRE(Java Runtime Environment)是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行 Java 程序。JRE 是运行 Java 程序所必须环境的集合,包含JVM标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。 |
| - Server JRE (Java SE Runtime Environment):服务端使用的 Java 运行环境 |
| - SDK(Software Development Kit):软件开发工具包,在Java中用于描述1998年~2006年之间的JDK |
| - DAO(Data Access Object):数据访问接口,数据访问,顾名思义就是与数据库打交道 |
| - MVC(Model View Controller):模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法 |
|
| ## 面向对象程序设计的三个主要特征 |
|
| 封装性(encapsulation):封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓其行为实现的细节,只须用设计者提供的消息来访问该对象。 |
|
| 继承性:继承性是子类共享其父类数据和方法的机制。它由类的派生功能体现。一个类直接继承其他类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类的对象中的数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。 |
|
| 多态性:对象根据所接收的消息而做出动作。同一消息被不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:同样是 run 方法,飞鸟调用时是飞,野兽调用时是奔跑。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在 OOPL 中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。 |
|
| ## Java基本语法 |
|
 |
|
| 这是 Java 程序的入口地址,Java 虚拟机运行程序的时候首先找的就是 main 方法。跟 C 语言里面的 main() 函数的作用是一样的。只有有 main() 方法的 Java 程序才能够被 Java 虚拟机运行,可理解为规定的格式。 |
|
| 对于里面的参数及修饰符: |
|
| - public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样 Java 虚拟机就可以找到 main() 方法,从而来运行 javac 程序。 |
| - static: 表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候 main() 方法也随着加载到内存中去。 |
| - void:main():方法是不需要返回值的。 |
| - main:约定俗成,规定的。 |
| - String[] args:从控制台接收参数。 |
|
| String[] args 还有一种等价的写法: String... args |
|
| 前者为数组形式, 后者为可变参数形式。 |
|
| 前者用得较多, 但是看到后者也应认识。 |
|
| Java 程序利用 main 函数中 args 参数实现参数的传递(传递空格处理) |
|
| ``` |
| public class Test |
| { |
| public static void main(String []args) |
| { |
| System.out.println(args[0]); |
| System.out.println(args[1]); |
| System.out.println(args[2]); |
| } |
| } |
| ``` |
|
| 用控制台编译运行: |
|
| ``` |
| $ javac Test.java |
| $ java Test aaa bbb ccc |
| aaa |
| bbb |
| ccc |
| ``` |
|
| 注意:三个参数之间用空格隔开! |
|
| 如果要输出空格怎么办? |
|
| 只需要在包含空格的参数上,使用双引号 "" 即可。 |
|
| 实例运行: |
|
| ``` |
| $ java Test aaa "b bb" ccc |
| aaa |
| b bb |
| ccc |
| ``` |
|
| 编写 Java 程序时,应注意以下几点: |
|
| - 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。 |
| - 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。 |
| - 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。 |
| - 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。 |
| - 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。 |
|
| ## Java 标识符 |
|
| Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 |
|
| 命名规则: |
|
| - 由字母、数字、下划线、$组成,不能以数字开头。 |
| - 大小写敏感。 |
| - 不得使用java中的关键字和保留字。 |
| - 不允许出现中文及拼音命名。 |
| - 合法标识符举例:age、$salary、_value、__1_value |
| - 非法标识符举例:123abc、-salary |
|
| 习惯: |
|
| - 标识符要符合语义信息。 |
| - 项目名、包名所有字母小写。 |
- 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如:public class MyFirstClass{} |
| - 变量和方法:第一个单词小写,如果名称由多个单词组成,每个单词的首字母都要大写,如:tarenaStudent。 |
- 常量:所有字母大写,每个单词之间用 _ 连接。public static final String GAME_COLOR="RED"; |
| - 数组的命名:数组应该总是用这样的方式来命名:byte[] buffer。 |
|
| 常用的转义字符: |
|
| ``` |
| "\b" (退格) |
| "\f" (换页) |
| "\n" (换行) |
| "\r" (回车) |
| "\t" (水平制表符(到下一个tab位置)) |
| "' " (单引号) |
| "" " (双引号) |
| "\" (反斜杠) |
| ``` |
|
| ## Java修饰符 |
|
| 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符: |
|
| - 访问控制修饰符 : default, public , protected, private |
| - 非访问控制修饰符 : final, abstract, static, synchronized |
|
| ## Java 变量 |
|
| Java 中主要有如下几种类型的变量 |
|
| - 局部变量 |
| - 类变量(静态变量) |
| - 成员变量(非静态变量) |
|
| ------ |
|
| ## Java 数组 |
|
| 数组是储存在堆上的对象,可以保存多个同类型变量。 |
|
| ------ |
|
| ## Java 枚举 |
|
| Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。 |
|
| 例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。 |
|
| ```java |
| class FreshJuice { |
| enum FreshJuiceSize |
| FreshJuiceSize size; |
| } |
|
| public class FreshJuiceTest { |
| public static void main(String[] args){ |
| FreshJuice juice = new FreshJuice(); |
| juice.size = FreshJuice.FreshJuiceSize.MEDIUM ; |
| } |
| } |
| ``` |
|
| 注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。 |
|
| ## Java 关键字 |
|
| 这些保留字不能用于常量、变量、和任何标识符的名称[有删减]。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ## Java注释 |
|
| ```java |
| public class HelloWorld { |
| /* 这是第一个Java程序 |
| * 它将输出 Hello World |
| * 这是一个多行注释的示例 |
| */ |
| public static void main(String[] args){ |
| // 这是单行注释的示例 |
| /* 这个也是单行注释的示例 */ |
| System.out.println("Hello World"); |
| } |
| } |
| ``` |
|
| 1、类注释 |
|
| 在每个类前面必须加上类注释,注释模板如下: |
|
| ```java |
| /** |
| * Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd. |
| * FileName: Test.java |
| * 类的详细说明 |
| * |
| * @author 类创建者姓名 |
| * @Date 创建日期 |
| * @version 1.00 |
| */ |
| ``` |
|
| 2、属性注释 |
|
| 在每个属性前面必须加上属性注释,注释模板如下: |
|
| ```java |
| /** 提示信息 */ |
| private String strMsg = null; |
| ``` |
|
| 3、方法注释 |
|
| 在每个方法前面必须加上方法注释,注释模板如下: |
|
| ```java |
| /*** 类方法的详细使用说明** @param 参数1 参数1的使用说明* @return 返回结果的说明* @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明*/ |
| ``` |
|
| 4、构造方法注释 |
|
| 在每个构造方法前面必须加上注释,注释模板如下: |
|
| ```java |
| /*** 构造方法的详细使用说明** @param 参数1 参数1的使用说明* @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明*/ |
| ``` |
|
| 5、方法内部注释 |
|
| 在方法内部使用单行或者多行注释,该注释根据实际情况添加。如: |
|
| ```java |
| //背景颜色Color bgColor = Color.RED |
| ``` |
|
| ## 继承 |
|
| 在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。 |
|
| 利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。 |
|
| ------ |
|
| ## 接口 |
|
| 在 Java 中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。 |
|
| 接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。 |
|
| ## Java 源程序与编译型运行区别 |
|
 |