Java程序设计课程分配:
- Java语言概述
- Java语言基础
- Java基本数据类型
- 控制结构
- Java核心类
- 类的定义与使用
- 对象的初始化
- 包
- 继承
- 抽象类与接口
- 异常的处理
- 自定义异常
- 字节流
- 字符流
- 标准输入/输出流
- 基本类型的包装类型
- 泛型和集合类
目录
Java语言概述
Java语言的特点
Java开发环境
Java语言基础
Java基本数据类型
整型类型及整数的运算
浮点数据类型及运算
字符数据类型
位运算
布尔数据类型
Java是一种面向对象的高级设计语言,也是一种软件平台。Java非常适用于开发Internet应用程序,同时也是一种通用程序设计语言;
Java支持多种类型的程序,客户端小应用程序Applet,服务器端小应用程序 Servlet,以及应用程序 Application。对每种应用类型,集成开发环境能够为开发者提供很大的便利,尽管可以使用各种不同的集成开发环境开发 Java应用,但程员至少应该掌握使用JDK(Java Standard Edition Development Kit)进行应用程序的开发方法,即使用文本编辑器来编写 Java 程序,然后使用Java编译器对源程序进行编译并用 Java解释器对编译后的字节码进行解释执行。
可以从因特网下载适当版本的 JDK 装程,进行安装,并把安装目录 jdk/bin 加入操作系统的可执行路径即可。以在Windows系统安装Java SE 7版本JDK 1.7为例,启动控制面板,选择系统、环境变量,找到用户环境变量中的path变量,然后在其开头加上jdk\bin目录,并用一个分号把新加入的路径同原来的内容分开。设置完成后,启动一个控制台窗口,并输入 java-version,如果设置正确,可得到一个版本信息,例如:
java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)
至此,系统已经能够找到 Java 编译器 javac.exe 和 Java 解释器 java.exe。Java 语言的很多强大功能是通过类库实现的,为了让Java解释器找到这些类库的位置,需要设置classpath环境变量,设置方法与path环境变量的设置方法相同。或者使用Java解释器时采用-classpath命令参数选项指定从什么位置寻找程序所需的类。
Java中“类”是程序组织的最基本单元。Java 程序是由一个或者多个“类”组成的,类都应写在扩展名为.java 的文本文件(Java 源程序)中,一个源文件中最多只能有一个公共类,即每一个公共类都应该写在一个单独的 Java 源文件中,而且公共类的类名应该和文件名完全相同(不含文件扩展名)。每个类编译后生成.class字节码(Bytecode)文件,在Java虚拟机中执行。每个Java应用程序都应该有一个main方法,作为执行入口。
/** *文件名为 JavaExample.java,文件名与公共类名完全相同。 */ public class JavaExample { /*公共静态main方法作为程序入口,static关键字表示静态方法*/ public static void main(String []args) { Sytern.out.println("A java program example!");//输出 } }
运行结果为:
A java program example!
Java 程序中的注释用“//单行注释”标识行注释,或由“/*多行注释*/”标识多行块注释,由“/**文档注释*/”所标识的块注释支持javadoc生成文档。上面程序的第1行至第3行为块注释,并支持javadoc 生成文档。第4行定义了一个名为JavaExample的类,定义时采用 public关键字指定了此类为公共类,可以被其他客户类访问。程序第5行为普通块注释。程序第 6 行定义了一个公共的、静态的 main 方法,这里将main 定义为公共方法的目的是让Java解释器能够调用此方法,而定义为静态是因为在调用main 方法的时候还不存在任何对象,main方法属于类。main方法的参数String[]args是一个字符数组,用来存储程序开始运行时传递给main方法的参数,其中,String是一个字符串类,args 是一个字符串对象的数组,方法的返回值为空。程序的第7行是一条输出语句,System类中含有静态变量out,out中的方法println输出一个字符串到控制台,字符串需要用双引号括起来。输入语句右侧为行注释。程序中每一条语句都用分号结束。
程序中的变量(Variable)是一块命名的、用来存储数据的内存区域。在 Java 程序中,每块被命名的内存区域都只能存储一种特定类型的数据。程序中直接给出的数值被称作直接量(字面值,literal),每直接量也有对应的数据类型。使用一个变量前,必须声明(Declaration)其名字和类型。
Java 中的标识符(Identifier)用来标识Java 程中的变量、方法和类名等,变量名就是标识符的一种。Java 程中标识符的长度没有上限,由字母、数字、下画线(_)以及美元符号($)组成,但必须以字母、下画线或美元符号开头。值得注意的是,Java 完全支持 Unicode 字符,因此程序中可以使用Unicode字符集中定义的任何语言的字符,例如可以用中文定义变量名。
Java数据类型分为基本类型(Primitive Type)和引用类型(Reference Type)两种。基本类型表示简单的值,包括整型、浮点型、字符型和布尔型。每种基本类型都被精确地定义,开发者不用担心在不同的平台上基本类型都会有差异。引用类型包括对象和数组。
整数类型分为byte、short、int和long。byte类型的变量可以表示-128~127之间的整数,在内存中占一个字节(8位);short类型的变量可以表示-32768~32767之间的整数,在内存中占据2个字节;int和long分别占据4个字节和8个字节。
程序中直接出现的整型数值都被称为整型直接量,其默认类型是int。如果整型直接量的值大于int型表示的数据范围,则需要在最后加上大写字母L或小写字母l,表示此整型直接量为 long 型数据。如果以十六进制的形式表示数值,则在数值前加上0X或0x;若需要以八进制的形式表示,则可在数字前面加上0,这一点与C/C++相同。
使用整型变量前必须先对其进行声明,声明的同时可以对其进行初始化,基本类型声明的同时就会分配相应的内存空间,如:
long longValue=78//声明一个long型的变量longValue,并初始化其值为78 int intValue =54; short shortValue-122; byte byteValue=33;
其中 longValue=78为赋值表达式,表达式是由变量、操作符以及方法调用构成。
赋值运算符号用“=”表示,赋值运算符的作用是将“=”右边表达式的计算结果存储到左边的变量中,如:
int xValue=0,yValue =8,zValue; zValue = xValue + yValue;
如果没有对变量进行正确的初始化就使用,在编译时Java编译器会报告出错误信息,因此声明变量的同时进行初始化是一个好的习惯。
针对整型数据的运算还有加(+)、减(-)、乘(*)和除(/)。当“+”和“--”运算符号的左边没有操作数的时候,“+”表示取变量或数值本身的值,“--”表示取变量或数字的相反值。运算时乘法和除法具有较高的优先级别,加法和减法优先级较低,括号可以改变运算的先后次序。
(整数相除得到的仍然是整数,余数将被舍去,使用取模运算符%可获得两个整数相除后的余数,取模运算符的优先级与乘、除相同)
递增运算“++”和递减运算“- -”使一个整型变量加1或者减1,例如:
count++;或者++count; //使count的变量的值增加1 count--;或者--count; //使count的变量的值递减1
如果没有其他运算,则递增和递减运算符号放在变量的前后效果是一样的。但如果还有其他运算的参与,结果就可能不同,例如:
int xValue=9,yValue=10,zValue; zValue=xValue++ +yValue;
代码执行后, zValue 的值为19, xValue 的值为10.若把递增运算放在 xValue 的前面,即 zValue =++xValue+yValue;,则代码执行后 zValue 的值为20,xValue 的值为10。
因此在考虑到运算符号优先级的情况下,如果递增或递减运算符号放在变量前面,表示先对变量进行递增或者递减,再取变量的值参与其他运算;如果放在后面,则表示先取变量的值参与运算,再对变量进行递增或递减。
使用 byte 或 short 进行算术运算时要注意,任何多个 byte 或 short 变量运算的结果都是32位的。下面的代码虽然操作数都是 short 类型,但是无法正确通过编译。
short xValue=8;yValue=9,zValue; zValue=xValue*yValue;
因为 xValue*yValue所得到的结果是一个32位的整型值,而 zValue 仅仅能存储16位整数,编译器不会自动将一个32位整型值转化为16位的整型值。所以需要显式的类型转换,即:
zValue=(short)(xValue*yValue);
计算结果中的高16位将被舍弃。
使用显式类型转换时要注意,如果计算结果超出了16位所表示的范围,显式类型转换后得到的结果将是不正确的。
如果操作数中有 long 型数据,那么计算的结果将是 long型数据,其他的操作数在与此 long 型数据运算前都将被转换成64位格式。
Java SE 7起,支持在数值型中间采用下划线(_)分割字符,下划线可以任意多个。例如:
long creditCardNumber=1234_5678_9012_3456L; long hexLong=0xCAFE_BABE;
Java中有两种基本的浮点类型: float 和 double 。 float 占4个字节的内存空间而 double 占8个字节。
浮点型直接量的默认类型为 double 类型,若要明确地表示浮点型直接量的类型为 float,则需要在数字的最后加上一个字母F或f。对一个 float 类型的变量初始化时,这一点非常重要的,因为Java编译器不会将一个 double 类型的数值自动转换为 float 类型。若浮点数值特别大或者特别小,则可以采用指数的形式书写,如5.67E8或5.67e8都表示5.67×10^8, 9.32E-9或者9.32e-9表示9.32×10^-9。
用于整型数据的运算同样适用于浮点类型数据,但是运算的默认类型为 double 类型,所以,两个 float 类型运算的结果为 double 类型。
“++”或“- -”作用于浮点数时,增加和减少的幅度为1.0,。取模运算作用于两个浮点数时,得到的是被除数减去除数的整倍数的结果,如表达式30.6%5.0的结果为0.6。
当两个类型不同的运算对象进行二元运算时,Java自动把精度低的类型转换为精度高的类型。例如,如果一个 int 型数据与一个 float 型数据相加,则将 int 型数据转换为 float 型数据,因为 float 型比 int 型精确。如果运算对象之一是 double 型,则将另一个转换为 double 型,因为 double 型是数据类型中最精确的。
与C/C++相同,Java提供的=了一种运算的简写形式,即+=、-=、*=、/=、%=等,例如:
count +=5 等价于 count=count+5
zValue/=xValue*yValue 等价于 zValue=zValue/(xValue*yValue)
字符类型用关键字 char 标识,一个字符类型的变量在内存中占据两个字节,字符直接量用单引号括起来,如 ‘x’、‘A’ 等。如果要表示字符单引号“ ' ”或者双引号“ " ”,则必须使用转义字符斜杠(\)。例如,下面的字符变量c的值是单引号字符。
char c='\"; //字符变量c用字符常量单引号初始化
常用的其他字符用转义方式表示:退格(\b)、换页(\f)、换行(\n)、回车(\r)、水平制表或Tab键(\t)。
默认情况下,位运算针对 int 类型数据进行操作。位运算也可对 byte 、short 、long 以及 char 型数值进行操作,如果有 long 型数据,则计算结果为 long 型,否则所用参与位运算的其他类型都会被转化为 int 类型进行运算,计算结果为 int 类型。
位运算有以下几种:
- 与运算操作符“&”:将两个操作数的二进制位进行按位与运算,如果对应的二进制位都是1时,该位的结果为1,否则为0。
- 或运算操作符“|”:将两个操作数的二进制位进行按位或运算,如果对应的二进制位都是0时,该位的结果为0,否则为1。
- 异或运算操作符“^”:将两个操作数的二进制位进行按位异或运算,如果对应的二进制位相同,该位的结果为0,否则为1。
- 非运算操作符“~”:将一个操作数的二进制位进行按位取反。
- 左移运算操作符“>>”:将操作数对应的二进制位左移1位,右侧补0。
- 右移运算操作符“<<”:将操作数对应的二进制位右移1位,左侧填充符号位。
- 无符号右移运算操作符“>>>”:将操作数对应的二进制右移1位,左侧补0。
取值只能为 true 或 false 的变量类型就是布尔类型,用关键字 boolean 来表示类型名,true 和 false 是布尔类型的直接量。
布尔类型和其他的数据类型有所不同,它不能和其他数据类型相互转换,这一点和C\C++中有较大的区别。
Java提供了大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)、等于(==)、不等于(!=)6种关系运算符号,关系运算符作用于整型、浮点型和字符类型,并得出一个布尔类型的结果。
针对布尔类型的运算有与(&&和&)、或(|和||)、非(否定,!)。
&&与&表示逻辑AND,当两个操作数的值都为 true 时,结果为 true ,否则为 false。它们的区别在于:当左操作数的值为 false 时,&&不再计算右操作数的值而直接得出最终的结果 false ,而&则仍然计算右操作数的值,即&&执行短路计算,而&执行非短路计算。
【例】逻辑运算符&&、&使用举例
public class AndExample { public static void main(String args[){ boolean aValue= false; boolean bValue = false; inti=1,j= 2,z-0; aValue=(j<2)&&((z=itj)>j); System.out.printin("aValue=" + aValue); System.out.printin("z="+ z); bValue=(j<2)&((z=i+j)>j); System.out println("bValue=" + bValue); System.out.printin("z=" + z); } }
运行结果为:
aValue=false
z=0
bValue=false
z=3
注意:不要将逻辑运算与位运算混淆。逻辑运算作用于布尔类型的值,而位运算作用于整型值;逻辑运算得到的是 true 或者 false ,位运算得到的是整型数值。