第一章 Java 开发前奏
Java语言发展简史
Sun 公司于1995年推出
91年Sun公司的James Gosling 等人开发名为Oka的语言。希望用于控制嵌入在有线电视交换盒、PDF等的微处理器。时代华纳竞标失败 后转入
Internet是java成为网上最流行的编程语言,java对Internet的影响也是深远的。
94年Oka更名为Java
Java即安全、可移植、可跨平台。且能解决Internet上的大型应用问题
96年获得$100000000
98年提出jdk1.2,更名为java2
09年Oracle以74亿美元收购SUN
Java 体系
Java SE
标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案。
Java EE
企业版:以企业为环境而开发应用程序的解决方案
Java ME
微型版:致力于消费产品和嵌入式设备的最佳解决方案
Java可以做什么?
开发桌面应用系统
银行软件、商场结算软件
开发面向Internet的web应用程序
门户网站(工商银行)、网上商场、电子商务网站。
提供各行业的解决方案
金融、电信、电力。。。
嵌入式开发
移动电话、可视电话、数字机顶盒、汽车导航系统
Java的特性
一种纯面向对象的编程语言。
一种与平台无关(跨平台性)的语言。(它提供了不同平台下运行的解释环境)
一种健壮的语言,吸收了c/c++的语言的优点。
有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)
Java 跨平台原理
Java技术的两种核心机制
Java虚拟机(JVM)
垃圾回收器(GC)
流程图
Java 虚拟机(JVM)
JVM可以理解成一个可运行java字节码的虚拟计算机系统
1、他有一个解释器组件,可以实现java字节码和计算机操作系统之间的通信
2、对于不同的运行平台,有不同的JVM
JVM屏蔽了底层运行平台的差别,实现“一次编译,随处运行”。
垃圾回收机制(GC)
不再使用的内存空间应当进行回收——垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存。
Java语言消除了程序员回收无用内存空间的责任:
JVM提供了一种系统线程跟追踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可以被释放的存储空间。
垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。
Java SE 的组成概念图
JDK
JDK—— Java开发工具集
JRE—— 运行时环境
JVM
Java API(应用程序编程接口)
Java编译器(javac.exe)、Java运行时解释器(java.exe)、Java格式化工具(javadoc.exe)及其它工具及资源
JRE的三项主要功能:
1、加载代码:由类加载器(class loader)完成;
2、校验代码:由字节码校验器(bytecode verifier)完成;
3、执行代码:由运行时解释器(runtime interpreter)完成。
搭建Java开发环境
JDK安装目录介绍:
1、bin目录:存放java的编译器,解释器等工具(可执行文件);
2、demo目录: 存放演示程序
3、include 目录 : 存放用于本地方法的文件
4、jre 目录:存放java运行环境文件
5、lib 目录:存放java的类库文件
6、sample目录:一些范例程序
7、src.zip 文件 :JDK提供的类的源代码
Sun目录下有一个JavaDB 目录:
JDK6附带的一个轻量级的数据库,叫Derby
环境变量
Path —— 用于指导操作系统的可执行指令路径
Classpath —— 用于java的类文件存放路径。
设置环境变量:
验证
javac : Java源文件的编译工具。
java :Java字节码解释程序。
什么是程序
通常指完成某些事务的一种既定方式和过程。
例:
去银行办理业务
计算机的程序
为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令(即命令)的集合
Java程序的类型
命令行程序
GUI程序
Applet程序
J2EE web 应用程序
Java程序开发的三个步骤
第一个Java程序
Java严格区分大小写的
Java是一种自由格式的语言
代码分为结构定义语句和功能执行语句
功能执行语句的最后必须用分号结束
开发Java应用的基本步骤:
— 编写源代码,生成 .Java文件。编译java文件,用文本编辑工具即可:
— 编译源代码,生成 .class 文件;
javac HelloWorld.java / java*.java
— 运行该程序
java HelloWorld
例:
public class HelloWorld{
//java 程序入口
public static void main(String [] args){
//向控制台打印一条信息
System.out.println(“HelloWorld”);
}
}
将上程序内容存为.java文件,命名为HelloWorld.java
进入到java源文件保存目录,通过 javac HelloWorld.java 指令来编译这个java文件:
在.java 文件编译生成的 .class文件所在的路径下,执行: java HelloWorld 指令。完成第一个java程序。
注意:
1、一个源文件中至多只能有一个public的class声明
2、源文件名必须和它定义的public的类同名。
3、main 方法是Java应用程序的入口方法
常见Java开发工具
编辑器: 记事本,EditPlus。。。
集成开发环境:JBuilder , Eclipse....
反编译工具:Cavaj.java.Decompiler
软件开发活动
1、可行性分析
2、需求分析— 对待开发的软件提出的需求进行分析并给出详细的定义对其加以确切的描述,然后编写出软件需求说明书。
3、系统设计 — 设计人员把已经确定的各项需求转换成相应的体系结构。
4、系统实现 — 把软件设计转换成计算机可以接受的程序代码,并在实际环境中得以实现。
5、软件测试— 保证软件质量的重要手段,贯穿于软件周期的各个阶段。
6、运行和维护 — 软件在运行的过程中由于多方面的原因对其进行的修改。
面向对象的程序设计
程序设计简史:
1、过程式程序设计
2、结构化程序设计
3、面向对象程序设计
对象
1、Everything Object:万事万物皆对象。
2、面向对象的编程(OOP)思想力图使计算机语言对事物的描述与现实世界中该事物的本来面目尽可能一致。
3、Class/Object:类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物的描述,抽象的、概念上的定义;对象是实际存在的该类事物的每一个个体,因而也称为实例(instance)。
编程语言发展简史
1、机器语言— 直接由计算机的指令组成,指令、数据、地址都以“0”“1”的字符串组成;可以被计算机直接执行。
2、 汇编语言— 用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。
3、高级语言—屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。
4、面向对象的语言— 与以往的各种语言的不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。
类
类(class)是用来描述一个对象(object):
类描述了每个对象应包括的数据
类描述了每个对象的行为特征
类是用于描述同一类型的对象的一个抽象的概念,类中定义了这对象所应具有的静态动态属性。
类可以看成一类对象的模板对象可以看成是该类的一个具体实例。
类包括两方面的类容:
属性:用来描述对象的数据元素称为对象的属性(数据状态)
方法:对对象的属性进行的操作称为方法(行为操作)
类和对象的关系
对象的创建和使用
在java中,使用new关键字来创建一个对象(实例化一个对象),new后面跟上一个构造器。
1、每个类都至少有一个构造器,如果没有定义构造器,则系统将自动提供一个默认的不带参数的构造器,可以用这个默认的构造器来生成对象
2、使用“.”操作符来访问对象的成员,包括对象方法和对象属性。
第二章 Java编程基础
变量
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存的数据类型不同,有各种不同类型的变量。变量名代表这块内存中的数据。
分类
数据类型划分:
1、基本数据类型
2、引用数据类型
按声明的位置划分:
1、局部变量:方法或语句块内部定义的变量
2、全局变量:方法外部、类的内部定义的变量。
注意:类的外部不能有变量的声明。
数据类型
二进制
计算机中的数据都是以二进制数字保存。
二进制:逢二进一。即只有0、1两个值。
计算机中信息的存储单位:
位(Bit): 表示一个二进制数码0或者1,是计算机存储处理信息的最基本的单位。
字节(Byte): 一个字节由8个位组成。他表示作为一个完整处理单位的8个二进制数码。
补码:
事实上,计算机内的二进制数值是以补码形式表示的。
补码:
一个正数的补码和其原码的形式是相同的。
负码的补码是:将该数的绝对值的二进制形式,按位取反后再加1。
由此可知二进制补码数值的最高位(最左位)是符号位:该位为0,表示数值为正数;该位为1,表示数值为负
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可以按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
二进制和十进制的互换
二进制转换为十进制
按权相加:把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
例:
十进制转换成二进制
整数部分:“除2取余,逆序排列”
小数部分:“乘2取整,顺序排列”
十六进制
二进制表示太亢长,所以程序一般喜欢用十六进制。
十六进制:基数为十六,逢十六进一。它用abcdef表示从0-9之上的值。
Java中十六进制数据要以0x或0X开头。
十六进制转换成二进制只需要将每一个十六进制数字替换为相应的四个二进制即可。
八进制
八进制:基数为八。
Java中八进制以0开头。
八进制转换为二进制:只需将每一个八进制数字替换为相对应的三个二进制位即可。
标识符
Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
Java标识符命名规则:
1、由字母、数字、下划线、(-)和美元符号($)组成。
2、不能以数字开头
3、区分大小写
4、长度无限制
5、不能是Java中的保留关键字。
标识符命名习惯:见名知意。
类型转换:
boolean类型不能转换成任何其他数据类型。
自动类型转换: 容量小的数据类型自动转换成容量大的数据类型。
强制转换:容量大的转换成容量小的数据类型时,要加上强制转换符 : long a = 10L; int i = (int)l ;
基本语法格式:
Java中有一些赋予特定含义,有专门用途的字符串成为关键字(keyword)。全部是小写。
保留字:没有定义用途,但保留备用。 :goto 、const;
常量
常量:程序中保持不变的值,它是值不能改变的数据。
转义字符
运算符
运算符包括:算术,赋值,关系,逻辑,位,移位,连接,三目运算符
算术运算符
++:如果是前缀:对此变量加1,在执行操作。
:如果在后,先执行其他操作,在加1。
--:同理。
键盘输入:Scanner input = new Scanner(System.in);
赋值运算符
赋值运算符作用于将一个值赋给一个变量,运算顺序从右到左。
关系运算符
关系运算符作用是比较两边的操作数,结果总是boolean型的
逻辑运算符
用于对boolean型结果的表达式进行运算,运算结果总是boolean型的。
位运算符
位运算符对两个操作数中的每一个二进制位都进行运算
位运算符的功能:
按位取反 ~
按位与 &
按位或 |
按位异或 ^
位移运算符
左移:“a<<b;”将二进制形式的a逐位左移到b位,最低位空出的b位补0。
带符号右移:“a>>b;”将二进制的a逐位右移b位,最高位空出来的b位补原来空出来的符号位。
无符号右移:“a>>>b;”将二进制的a逐位右移b位,最高位空出b位补充0。
字符串连接运算符
String s = “he” + “llo”; 结果是 “hello”
“+”除了可用于字符串连接,也能将字符串与其他数据类型连接成一个新的字符串:String s = “x”+123; 结果是:“x123”
三目运算符
x?y:z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则值为z。
例:
int score = 75;
int type = 60 ;
type < score ? “及格”:“不及格”;
操作优先级
运算符的优先次序
表达式的运算按照运算符的优先顺序从高到底进行,同级运算从左到右进行:
表达式和语句
条件语句
if条件结构是根据条件判断之后再做处理
if(条件语句){。。。}
if(条件语句){。。。}else{。。。}
if(条件语句){。。。}else if(条件语句){。。。}
if(条件语句){。。。}else if(条件语句){。。。}else{。。。}
switch
switch(表达式){
case 1 :
语句块1;
break;
case n :
语句块n;
break;
default:
语句块n+1;
break;
}
switch语句有关规则
1、表达式返回值必须是以下几种类型之一:
int,byte,char,short,确定的结果。
2、case子句中的取值必须是常量,且所有case语句中的取值应是不同的;
3、default 子句是可选的;
4、break语句用来执行完一个case分支后使程序跳出switch语句块,如果没有break则直接往下执行。
5、case后面的执行体可写可不写{}。
循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定的代码。
循环语句分类
For循环
While循环
Do/while 循环
(1)while循环
符号条件循环继续执行,否则退出;
特点:先判断在执行。
语法:
while(条件表达式){
语句块;
}
使用while的步骤
1、分析循环条件和循环操作
2、套用while语法写出代码
3、检查循环是否能够退出或进入
(二)do-while
先执行一遍循环操作,符合条件,循环继续,否则退出。
特点:先执行,再判断
语法:
do{
循环操作
} while(循环条件);
(三)for循环
语法:
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
break 使用: 结束循环,退出循环不在执行
continue 使用:跳过当次循环,进入下面的循环。
算法
数组
静态数组
int [] a = {12,3};
int [] a = new [] {1,23};
使用要注意的问题:
空指针异常
如何得到数组长度
数组越界异常
定义一个多维数组
int [] [] xx = new int[3][];
数组
· 数组就是一组相关变量的集合,通过下标访问数组
· 数组的定义格式:
|- 动态初始化:数据类型 数组名称[] = new 数据类型[长度] ;
|- 静态初始化:数据类型 数组名称[] = {值, 值, 值, 值, 值} ;
· 数组本身属于引用数据类型,所以需要进行栈和堆的划分,之前也简单的演示了的栈-堆的分配问题。
· Java中提供了System.arraycopy()完成数组复制,和java.util.Arrays.sort()完成数组排序
算法:
(1)最大值
(2)冒泡排序
是将一个列表中的两个元素进行比较,并将最小的交换到顶部。
(三)增强for循环
加强for循环输出语法:
for(type elenment : array){
System.out.println(element);
}
多维数组
注释:
Java语言中定义了三种注释形式:
//单行注释 到行尾
/*单行或多行注释*/
/**可用于文档化处理的单行或多行注释*/
JDK中提供了一个文档自动生成工具javadoc,在自定义类中public的成员前以/**...*/形式加入的注释内容均可以被自动提取到生成的说明文档。
用法:javadoc source.java
注:方法 递归调用:自己调用自己,但必须有结束条件。