第一章 Java程序设计概述
简单性:Java语法是c++语法的一个“纯净”版本,剔除了c++中许多很少使用、难以理解、易混淆的特性,如:头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。
面向对象:Java的面向对象特性与c++旗鼓相当,不同点在于继承,在java中,取而代之的是简单的接口概念,以及java的元类(metaclass)模型。
网络技能(Network-Savvy):Java有一个扩展的例程库,用于处理像HTTP和FTP这类的TCP/IP协议。java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
健壮性:java编译器能够检测许多在其他语言中仅在运行时刻才能够检测处理的问题。java不需要使用指针构造诸如字符串、数组这样的结构,但如果有需要,它也能够具有指针的能力,如链表。java绝对安全的原因是用于不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄露。
安全性:Java被设计成能够防范各种袭击,包括:运行时堆栈溢出、在自己的处理空间之外破坏内存、未经授权读写文件。
体系结构中立:编译器生成一个体系结构中立的目标文件格式(与特定计算机体系结构无关的字节码指令),这是一种编译过得代码,只要有java运行时系统,就可以在许多处理器上运行。
可移植性:①与c和c++不同,java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关算法都做了明确的说明。例如:java的int永远为32位的整数,而在c/c++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在java中,数据类型具有固定的大小,这消除了大吗移植时令人头疼的主要问题。二进制数据以固定的格式进行的存储和传输,消除了字节顺序的困扰。字符串是用标准的unicode格式存储的。②作为系统组成部分的类库,定义了可移植的接口。例如,有一个抽象的window类给出了unix、windows和macintosh环境下的不同实现。
解释型:java解释器可以在任何移植了解释器的机器上执行java字节码。
高性能:字节码可以(在运行时刻)快速地翻译成运行这个应用程序的特定cpu的机器码。
多线程:多线程可以带来更好的交互响应和实时行为。java中多线程可以利用多个处理器。在底层,主流平台的线程实现机制各不相同,java并没有花费太大的力气对此实现平台无关性。在不同的机器上,只是调用多线程的代码完全相同;java把多线程的实现交给了底层的操作系统或线程库来完成。
动态性:当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。一个很好的例子是:从Internet上下载代码,然后在浏览器上运行。在java1.0中,不能直接获得运行时的类型信息,而java的当前版本允许程序员知道对象的结构和行为。这对于必须在运行时分析对象的系统来说非常重要。这些系统有:java gui构建起、只能调试器、可插入组件以及对象数据库。
第二章 java程序设计环境
java环境变量配置:
Java_HOME:D:\jdk1.5.0
CLASSPATH:
.;D:\jdk1.5.0\lib\tools.jar;D:\jdk1.5.\jre\lib\rt.jar;
PATH:D:\jdk1.5.0\bin;
第三章 java基本的程序设计结构
3.1一个简单的java应用程序
public class FirstSample {
public static void main(String[] args){
System.out.println("we will not use 'hello,world!'");
}
}
1.Java对大小写敏感
2.关键字public称为访问修饰符(access modifier),它用于控制程序的其他部分对这段代码的访问级别。
3.关键字class表面java程序中得全部内容都包含在类中。类是构建所有java应用程序和applet的构件块。java应用程序中的全部内容都必须放在类中。
4.关键字class后面紧跟类名。java中定义类名的规则很宽松。名字必须以字母开头,后面可以跟字母和数字的任意组合。长度基本没有限制,但是不能使用java保留字。
5.源代码的文件名必须与公有类的名字相同,并用.java作为扩展名。FirstSample.java
6.java编译器将编译后的文件自动命名为FirstSample.class,并与源文件存储在同一个目录下。
7.当使用java ClassName(FirstSample)运行编译程序时,java虚拟机将从指定类中的main方法开始执行,因此为了代码能够执行,在类的源文件中必须包含一个main方法。当然,也可以将用户自定义的方法添加到类中,并且在main方法中调用它们。
8.在java中,像在c/c++中一样,用花括号划分程序的各个部分(通常称为块)。java中任何方法的代码都使用“{”开始,用“}”结束。
9.java中得main方法必须是静态的。最后,与c/c++一样,关键字void表示这个方法没有返回值,所不同的是main方法没有给操作系统返回“推出代码”。如果main方法正常退出,那么java应用程序的退出代码为0,表示成功地运行了程序。如果希望在终止程序时返回其他的代码,那就需要调用System.exit方法。
10.在java中每条句子必须以分号结束。
11.点号(.)用于调用方法,java使用的通用语法是object.method(parameters)。这里使用了System.out对象并调用了它的println方法。
12.与其他程序设计语言一样,在java的方法中,可以没有参数,也可以有一个或多个参数(有的程序员把参数叫做变元)。
3.2注释
1.单行注释//
2./*和*/注释多行,此注释不能嵌套,即代码本身包含一个*/,就不能用./*和*/将注释括起来
3./** 和*/ 这种注释的详细内容可以自动生成文档。
3.3数据类型
java是一种强类型语言,必须为每个变量声明一种类型。在java中,一共有8中基本类型(primitive type),其中4种整型、2种浮点型、1种用于表示unicode编码的字符单元的字符类型char、1中用于表示真值的boolean类型。
java有一个能够表示任意精度的算术包,通常称为“大数值”(big number),它不是一种新的java类型,而是一个java对象。
3.3.1整型
int 4个字节,short 2个字节,long 8个字节,byte1个字节。
在java中,整型的范围与运行java代码的机器无关。长整型数值有一个后缀L(如:40000000000L),十六进制数值有一个前缀0x(如0xCAFE),八进制前缀为0(如010)。java中没有任何无符号类型。
3.3.2浮点型
float 4个字节,有效位为6~7位,double 8个字节,有效位为15位。double表示这种类型的数值精度为float类型的两倍(有人称之为双精度数据)。float类型的数值有一个后缀F(例如:3.402F),没有后缀F的浮点数值(如3.402)默认为double类型。当然,也可以在浮点数值后面添加后缀D(如3.402D)。
用于表示溢出和出错情况的三个特殊的浮点数值:
①正无穷大(如一个正整数除以0) Double.POSITIVE_INFINITY
②负无穷大 Double.NEGATIVE_INFINITY
③NaN(不是一个数字)(如0/0 或负数的平方根)Double.NaN
说明:
①不能以下述方式检测一个特定值是否等于Double.NaN。因为所有“非数值”的值都认为是不相等的。
if(x==Double.NaN) //is never true
②可以用下述方式判断一个给定值是不是数字
if(Double.isNaN(x)) //check whether x is "not a number"
③浮点数值不适用于禁止出现舍入误差的金融计算中。如下列。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示1/10.这就好像十进制无法精确地表示1/3一样。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。
System.out.print(2.0-1.1); //the result is 0.8999999999999999,is not 0.1
3.3.3 char类型