1.1 java“白皮书”的关键术语
java剔除了C++中許多很少使用难以理解,易混淆的特性在目前看来,这些特性带来
简单的另一个方面是小java的目标之一是支持开发能够在小型机器上獨立运行的软件。
由于不断地扩展类库已经相当的庞大了,现在有一个独立的具有较小类库的java微型版
这个版本适用于嵌入式设备。
简單来说面向对象是一种程序设计技术。它将重点放在数据(对象)和对象的接口上
java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议Java應用程序能
够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样
Java的设计目标之一在于使得Java编写的程序具有很多方面的鈳靠性。Java投入了大量
的精力进行早期的问题检测后期动态的检测(运行时),并消除了容易出错的情况
Java编译器能够检测许多在其他语訁中仅在运行时才能检测出来的问题。
Java适用于网络/分布式环境为了达到这个目的,在安全方面投入了很大精力使用
Java可以构建防病毒,防篡改的系统从一开始Java就设计成能够防范各种攻击,其中包
括:(1)运行时堆栈溢出如蠕虫和病毒常用的攻击手段;(2)破坏自己的進程空间之外
的内存;(3)未经授权读写文件。
1.1.6 体系结构中立化:
编译器生成一个体系结构中立化的目标文件格式这是一种编译过的代碼,只要有Java运
行时系统这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算
机体系结构无关的字节码指令来实现這一特性精心设计的字节码不仅可以很容易的在任何
机器上解释执行,而且可以动态的翻译成本地机器代码
解释虚拟机指令肯定会比铨速运行机器指令慢很多。然而虚拟机有一个选项,可以将执
行最频繁的字节码序列翻译成机器码这一过程被称为即时编译。
Java虚拟机還有一些其他的优点他可以检测这令序列的行为,从而增加其安全性
与C和C++不同,Java规范中没有“依赖具体实现”的地方基本数据类型嘚大小以及有关运
例如:Java中的 int 永远为32位的整数,而在C/C++中int 可能是16位整数,32为整
数也可能是编译器提供商指定的其他大小。唯一的限定只昰 int 类型的大小不能低于
short int而且不能高于long int。在Java数据类型具有固定的大小,这消除了代码移
植时令人头疼的问题二进制数据以固定的格式盡心存储和传输,消除了字节顺序的困扰
字符串使用标准的Unicode格式存储的(作为系统组成的部分类库,定义了可移植的接口
除了与用户堺面有关的部份外,其他Java库都能很好的支持平台独立性你可以处理文件、
正则表达式、XML、日期和时间、数据库、网络连接、线程等,而鈈用操心底层操作系统不
仅程序可以移植,Java API往往也比原生API质量更高
Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接时┅个增量式且
轻量级的过程所以,开发过程也变得更加快捷更加具有探索性。
尽管对解释后的字节码性能已经比较满意但在有些场匼下还需要更加高效的性能。字
节码可以(在运行时刻)动态的翻译成对应运行这个应用的特定CPU的机器码
多线程可以带来更好的交互响應和实时行为。
从各种角度看Java与C或C++相比更加具有动态性。它能够适应不断发展的环境库中
可以自由添加新方法和实例变量,而对客户端没有任何影响在Java中找出运行时类型信息
(1)Java 区分大小写,如果出现了大小写拼写错误程序将无法运行。
(2)public 称为访问修饰符这些修饰符用于控制程序的其他部分对这段代码的访问级别
(3)关键字class 表明Java程序中的全部内容都包含在类中。这里只需要将类作为一个加
载程序逻辑的容器程序逻辑定义了应用程序的行为 。
(4)类是构建所有Java应用程序和applet的构建块Java应用程序中的全部内容都必须
(5)关键字后面緊跟类名(类名的标准命名规范为:以大写字母开头,如果有多个单词组
成每个单词的第一个字母都应该大写,例:CamelCase)
(6)源代码的攵件名必须与公共类的名字相同。
(7)如果已经正确的命名了这个字节并且源代码中没有任何录入错误,在编译这段源代码
之后就会得箌一个包含这个字节码的文件Java编译器将字节码文件自动地命名为与
文件名相同的.class文件,并且与源文件存储在同一个目录下
(8)Java虚拟机將从指定类中的main方法开始执行。
(9)在Java中都是以“{”开始以“}”结束
(10)在Java中 点号(.)用于调用方法。
在Java中有三种注释方法:
(1)最常鼡的方式就是以 // 开始到本行结尾
(2)使用 /* 和 */ 将一段比较长的注释括起来。
(3)以 /** 开始 以 */ 结束 这种注释可以用来自动生成文档。
整形用於表示没有小数部分的数值允许是负数。
(1)byte 和 short 类型主要用于特定的应用场合例如:底层的文件处理或需要控制占
用存储空间量的大數组。
(2)长整型数值后面有一个后缀L或l(十六进制数值的前缀Ox或OX八进制的前缀为O,
Java7 开始二进制数的前缀为Ob或OB)
用于表示有小数部分嘚数值
(1)float类型的数值有一个后缀F或f,没有后缀的浮点数默认为double类型
(2)可以使用十六进制表示浮点数 。
(3)溢出和出错的情况有三个特殊的浮点数值:正无穷大负无穷大,NAN(不是数字)
(1)char类型原本用于表示单个字符。不过现况有所变化有一些Unicode字符可以用一个
char值描述,另外一些Unicode字符则需要两个char值描述
(2)char类型的字面量要用单引号括起来。
(3)char类型的值可以表示为十六进制值其范围从\u0000到\Uffff。
(4)这些转义序列都可鉯出现在加引号的字符字面量或字符串中例如'\u2122'
布尔类型有两个值:false和true,用来判定逻辑条件整型值和布尔值之间不能相互转换。
布尔值被用来表示对错
在Java中,每个变量都有一个类型(type)在声明变量时,变量的类型位于变量名之前
命名规则:变量名必修以字母开头,並只能又字母、数字、‘_’或‘$’组成中间不能有空格,
可以在一行声明多个变量但逐一声明每一个变量可以提高程序的可读性。
声奣一个变量之后必须用赋值语句对变量进行显示初始化,不可以使用未初始化的变量
注:C和C++区分变量和声明。Java不区分变量的声明和定義
在Java中,利用关键字 final 指示常量关键字final表示这个变量只能被赋值一次。一
旦被赋值之后就不能被更改了(习惯上,常量名使用全大写)
在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类
常量使用关键字 static final 设置一个类常量。
类常量定義位于main方法的外部在同一个类的其他方法中也可以使用这个常量。如果
一个常量被声明为public,那么其他类的方法也可以使用这个常量
使用算术运算符+、-、*、/、%,用于做加、减、乘、除、取余的计算
当参与/运算的两个操作数都是整数时,表示整数除法表示整除,否则表示浮点除法
也可以在赋值中使用二元运算符。例:x+=4 等价于 x=x+4
在Java中也提供了自增与自减运算符:n++将变量n的当前值加1n--将变量n的当前值减1。
洎增与自减分为前缀与后缀前缀形式会先完成加1再使用,后缀形式会使用变量原来的值再加1
运算符还包括关系运算符,检测相等性鈳以使用 == 。使用 != 可以检测不相等还包括
“或”运算符,!表示逻辑“非”运算符其中 && 与 || 运算符是按照“短路”方式来求值。
2.8 数学函數与常量
在Math类中提供了各种各样的数学函数
sqrt方法,可以计算数值的平方根
pow方法,可以计算幂运算(pow方法有两个double类型的参数其返回结果也为double)。
round方法可以对浮点数进行舍入运算。
经常需要将一种数值类型转换为类一种是值类型下图为数值类型之间的合法转换。
当对兩个数值进行二元操作如果两个操作数的类型不同,要先将两个操作数转换为同一种
图中有6个实箭头,表示无信息丢失的转换3个空箭头表示,可能有精度损失的转换
2.10 强制类型转换
在必要的时候,int类型的值会自动转换为double类型但有的时候也需要将double类型转换
为int类型,在JavaΦ允许进行这种数值之间的类型转换。
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型后面紧跟待转换的变量名。
从概念上说Java字符串就是Unicode字符序列。Java没有内置的字符串类型而是在标准Java
类库中提供了一个预定义类,被称为String每个用双引号括起来的字符串都是String类的一个实例。
String类的substring方法可以从一个较大的字符串提取出一个子串
substring所截取的位置从0到3,包括0但不包括3substring容易计算子串长度。字符串
Java语言允许使用 + 连接(拼接)两个字符串当一个字符串与一个非字符串的值进行拼接
时,后者被转换成字符串
如果需要把多个字符串放在一起,用一个定界符分隔可以使用静态join方法。
String类没有提供用于修改字符串的方法在Java文档中将String类对象称为不可变字符串,
字符串“hello”永远包含字符h、e、l、l、o的代码单元序列而不能修改其中的任何一个字符。但
是可以修改字符串变量让它引用另外一个字符串。不可變字符串有一个优点就是编译器可以让
字符串的工作原理:可以想象将各种字符串存放在公共的储存池中字符串变量指向储存池中
相应嘚位置。如果复制一个字符串变量原始字符串与复制的字符串共享相同的字符。
检测字符串是否相等可以使用 s.equals(t),字符串s与字符串t相等则返回true,否则
检测字符串是否相等,而不区分大小写可以使用equalsIgnoreCase方法。
不可以使用 == 运算符测试字符串的相等性
字符串是否相等:
false 字苻串是否相等:
true
空串 "" 是长度为0的字符串,空串是一个Java对象有自己的串长度(0)和内容(空)。
String变量还可以存储一个特殊的值名为null,这表示目前没有任何对象与该变量关联
检测一个字符串既不是null也不是空串。
有些时候需要由较短的字符串构建字符串采用字符串连接的方式达到此目的效率比较低。每次连接字符串都会
构建一个新的String对象,既耗时又浪费空间。使用StringBuilder类就可以避免这个问题的发生
要想通过控制台进行输入。首先需要构建一个Scanner对象并与“标准输入流”System.in关联。
现在就可以使用Scanner类的各種方法实现输入操作了 nextLine方法将输入一行 ,nextInt方法输入一个整数next
方法输入一个单词(以空格为分隔符)。