1 、Java开发前奏
1.1 Java语言发展简史
Sun Microsystems于1995年推出
1991 年Sun公司的James Gosling等人开始开发名称为Oak 的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器
Internet使Java成为网上最流行的编程语言,Java对Internet的影响也意义深远
1994年将Oak语言更名为Java
Java 既安全、可移植,又可跨平台,而且人们发现它能够解决Internet 上的大型应用问题
1996年获得$100000000的投资
1998年提出JDK1.2,更名为Java2
之后推出JDK1.3,JDK1.4
2005年更名为JDK 5.0,是对以前版本最大改进
2007年JDK6.0
2009年4月Oracle以74亿美元收购SUN
计划于2011年夏天发布Java7正式版
1.2 Java体系
Java SE:Java Platform,Standard Edition
标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案。
Java EE:Java Platform,Enterprise Edition
企业版:以企业为环境而开发应用程序的解决方案
Java ME :Java Platform, Micro Edition
微型版:致力于消费产品 和嵌入式设备的最佳解决方案
Java可以做什么?
开发桌面应用程序
银行软件、商场结算软件
开发面向Internet的web应用程序
门户网站(工商银行)、网上商城、阿里巴巴、电子商务网站
提供各行业的解决方案
金融、电信、电力…
嵌入式开发
移动电话、可视电话、数字机顶盒和汽车导航系统
1.3 Java的特性
一种纯面向对象的编程语言。
一种与平台无关(跨平台)的语言。(它提供了在不同平台下运行的解释环境)
一种健壮的语言,吸收了C/C++语言的优点。
有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)
1.4 Java跨平台原理
1.4.1 Java技术的两种核心机制
Java虚拟机(Java Virtual Machine) JVM
垃圾回收器(Garbage Collection) GC
1.4.2 Java 虚拟机(JVM)
JVM可以理解成一个可运行Java字节码的虚拟计算机系统
它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信
对于不同的运行平台,有不同 的JVM。
JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
1.4.3 垃圾回收器(GC)
不再使用的内存空间应当进行回收-垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存。
Java语言消除了程序员回收无用内存空间的责任:
JVM提供了一种系统线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可以被释放的存储空间。
垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。
1.4.4 JavaSE的组成概念图
1.4.5 JDK
JDK(Java Development Kits)– Java开发工具集
JRE(Java RunTime Environment)Java运行时环境
JVM
Java API (应用程序编程接口)
Java编译器(javac.exe)、Java运行时解释器(java.exe)、Java文档化化工具(javadoc.exe)及其它工具及资源
JRE的三项主要功能:
加载代码:由类加载器(class loader)完成;
校验代码:由字节码校验器(bytecode verifier)完成;
执行代码:由运行时解释器(runtime interpreter)完成。
1.5 搭建Java开发环境
下载和安装最新版本的JDK
下载地址: http://java.sun.com/javase/downloads/index.jsp
JDK安装目录介绍:
bin目录:存放java的编译器,解释器等工具(可执行文件);
demo目录:存放演示程序
include目录:存放用于本地方法的文件
jre目录:存放Java运行环境文件
lib目录:存放Java的类库文件
sample目录:一些范例程序
src.zip文件:JDK提供的类的源代码
Sun目录下有个JavaDB 目录:
JDK6附带的一个轻量级的数据库,名字叫做Derby
Java的垃圾回收机制(GC)
• 不再使用的内存空间应回收—-垃圾收集。
• 在C/C++ 等语言中,由程序员负责回收无用内存。
• Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。
• 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。
• Java开发工具集JDK—-Java Development Kits
• Java编译器
• Java运行时解释器
• Java应用程序编程接口
• Java文档化化工具
• 其它工具及资源
• 环境变量
• Path —- 用于指定操作系统的可执行指令的路径
• CLASSPATH —-用于指定Java的类文件存放路径。
1.5.1 设置环境变量
path:用于指定操作系统的可执行指令的路径
classpath:Java虚拟机在运行某个类时会按classpath指定的目录顺序去查找这个类
注:JDK 5.0默认就会到当前工作目录以及JDK的lib目录中查找
验证
javac:Java源文件的编译工具。
java:Java字节码解释程序。
1.5.2 什么是程序
程序一词来自生活,通常指完成某些事务的一种既定方式和过程
在日常生活中,可以将程序看成对一系列动作的执行过程的描述
例如:
去银行办理业务
去商品购物
等等..
计算机中的程序
为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令(即命令)的集合
Java程序的类型
命今行程序
GUI程序
Applet程序
J2EE web 应用程序
1.5.3 Java程序开发的三个步骤
1.6 第一个Java程序
示例
注释 :java程序有三种注释方式
编码规范
常见错误
API文档
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(“Hello World!”);
}
}
• 将上述程序内容保存为一个扩展名为.java的文件,文件命名为HelloWorld.java。
• 进入到java源文件保存的目录,通过下列指令来编译这个java文件:
– javac HelloWorld.java
• 在.java文件编译生成的.class文件所在的路径下,执行如下命令:
– java HelloWorld,然后回车
常见错误
• 编译时:HelloWorld.java:1: class helloworld is public, should be declared in a file named helloworld.java
– public class helloworld
– ^
– 1 error
• 运行时:Exception in thread “main” java.lang.NoSuchMethodError: main
• 运行时:Exception in thread “main” java.lang.NoClassDefFoundError: helloWorld (wrong name: HelloWorld)
注意
• 一个源文件中至多只能有一个public的class声明
• 源文件名必须和它中定义的public的类名相同
• main方法是Java应用程序的入口方法
1.7 常见Java开发工具
编辑器
记事本
EditPlus
UltraEdit (UE)
集成开发环境
JBuilder
Eclipse (http://www.eclipse.org/)
NetBeans (http://www.netbeans.org/)
IDEA
反编译工具
Cavaj.Java.Decompiler
1.8 软件开发活动
• 可行性分析
• 需求分析-对待开发的软件提出的需求进行分析并给出详细的定义并对其加以确切的描述,然后编写出软件需求说明书。
• 系统设计-设计人员把已确定的各项需求转换成相应的体系结构。
• 系统实现-把软件设计转换成计算机可以接受的程序代码,并在实际环境中得以实现。
• 软机测试-保证软件质量的重要手段,贯穿于软件生命周期的各个阶段。
• 运行和维护-软件在运行的过程中由于多方面的原因对其进行的修改。
1.9 面向对象的程序设计
• 程序设计简史
– 过程式程序设计
– 结构化程序设计
– 面向对象程序设计
对象
• Everything is Object:万事万物皆对象。
• 面向对象的编程(OOP)思想力图使对计算机语言中对事物的的描述与现实世界中该事物的本来面目尽可能的一致。
• Class/Object:类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
编程语言发展简史
• 机器语言-直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串组成;可以被计算机直接执行.
• 汇编语言-用容易理解和记忆的符合表示指令、数据以及寄存器等,抽象层次很低,程序圆需要考虑大量的机器细节。
• 高级语言-屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。
• 面向对象的语言-与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。
类
• 类(Class)是用来描述一个对象(Object):
– 类描述了每个对象应包括的数据
– 类描述了每个对象的行为特征
– 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性。
– 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
• 类包括两方面的内容:
– 属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)
– 方法:对对象的属性进行的操作称为对象的方法(也称为行为/操作)
类和对象的关系
对象的创建和使用
• 在Java中,使用new 关键字来创建一个对象(实例化一个类),new后面跟上一个构造器
– 每个类都至少有一个构造器,如果没有定义构造器,则系统将自动提供一个默认的不带任何参数的构造器,如果类没有定义构造器,可以用这个默认的构造起来生成一个对象
• 使用“.”操作符来访问对象的成员,包括对象方法和对象属性
– .
1.10 练习
1. 完成HelloWorld示例
2. 将自己的个人信息打印到控制台上输出。
3. 编写一个去银行取钱的多个命令组成一个程序到控制台上输出。
4. 结合\n换行,\t制表位空几格,println()也是回车换行,打印出自己的名字和心!如图!
* * * *
* *
* *
* *
* *
* *
*
2 、Java编程基础
2.1 变量
2.1.1 变量
变量是什么?为什么为用变量?
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据 。
变量分类:
按所属的数据类型划分:
基本数据类型变量
引用数据类型变量
按被声明的位置划分:
局部变量:方法或语句块内部定义的变量
成员变量:方法外部、类的内部定义的变量
特别注意:类的外面不能有变量的声明
2.1.2 数据类型
布尔型—- boolean 1字节 true/false
字符型—- char 2字节
2.1.3 二进制
计算机中的数据都以二进制数字保存。
二进制:逢二进一。即只有0、1两个值。
如:十进制的10在计算机内保存为二进制的1010
计算机中信息的存储单位
位(Bit):表示一个二进制数码0或1,是计算机存储处理信息的最基本的单位。
字节(Byte):一个字节由8个位组成。它表示作为一个完整处理单位的8个二进制数码。
补码:
事实上,计算机内的二进制数值是以补码形式表示的。
补码:
一个正数的补码和其原码的形式是相同的。
负数的补码是:将该数的绝对值的二进制形式,按位取反再加1。
由此可知,二进制补码数值的最高位(最左位)是符号位:该位为0,表示数值为正数;该位为1,表示数值为负数。
10 = 00000000 00000000 00000000 00001010
-10 = 11111111 11111111 11111111 11110110
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
二进制和十进制之间的互换
二进制数转换成十进制数
按权相加:把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
例:原码1011.01 = 1×23+0×22+1×21+1×20+0×2-1+1×2-2
= 8+0+2+1+0+0.25
=11.25
十进制转换成二进制
整数部分:”除2取余,逆序排列”法
小数部分:”乘2取整,顺序排列”法
2 89
2 44 … 1
2 22 … 0
2 11 … 0
2 5 … 1
2 2 … 1
2 1 … 0
0 … 1
891011001 0.625
X 2
1.25
X 2
0.5
X 2
1.0
0.6250.101
十六进制
二进制表示法太冗长,所以在程序中一般喜欢用十六进制。
十六进制:基数为十六,逢十六进一。它用abcdef表示从0-9之上的值。
Java中十六进制数据要以0x或0X开头。如:0x23D
十六进制转换成二进制只需将每个十六进制数字替换为相对应的四个二进制位即可。
二进制 十六进制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
八进制
八进制:基数为八。
Java中八进制数据要以0开头。如:0123
八进制转换成二进制:只需将每个八进制数字替换为相对应的三个二进制位即可。
现在的计算机系统很少用八进制的了。
二进制 八进制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
2.1.4 标识符
Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
Java标识符命名规则:
由字母、数字、下划线(_)和美元符号($)组成。
不能以数字开头。
区分大小。
长度无限制。
不能是Java中的保留关键字。
标识符命名习惯:见名知意。
示例:
合法标识符:HelloWord、username2、user_name、_userName、$abc_123
非法标识符:2UserName、user#Name、Hello World、class
2.1.5 类型转换
boolean 类型不能转换成任何其它数据类型。
自动类型转换:容量小的类型自动转换成容量大的数据类型
byte,short,int -> long ->float ->double
byte,short,int不会互相转换,它们三者在计算时会转换成int类型
强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符
long l = 100L;
int i = (int)l;
有可能造成精度降低或数据溢出,使用时要小心。
2.2 Java基本语法格式
2.2.1 关键字
Java中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword)。全部是小写。
保留字:没有定义用途,但保留备用。
goto、const
检查下面这些是否是合法的变量名:
2.2.2 常量
常量:程序中持续不变的值,它是值不能改变的数据。
整型常量:123
Java语言整型常量的三种表示形式:
十进制整数:如12, -314, 0。
八进制整数:要求以0开头,如0123表示八进制的123 。
十六进制数:要求0x或0X开头,如0x123。
浮点数(实型)常量:3.14
字符常量:‘a’、‘\t’、‘\u0035’
布尔(逻辑)常量:true、false
字符串常量:“a”、“hello world”
null常量:表示对象的引用为空
注意:
区分字符常量和字符串常量
“常量”还会用在另外语境中表示值不可改变的变量
2.2.3 转义字符
2.3 运算符
运算符包括:算术,赋值,关系,逻辑,位,移位,连接,三目等运算符
算术运算符:+ 、 - 、 * 、 / 、 % 、 ++ 、 –
赋值运算符:= 、 += 、 -= 、 *= 、 /= 、 %=
关系运算符:> 、 < 、 >= 、 <= 、 == 、 !=
逻辑运算符:! 、 & 、 | 、 ^ 、 && 、 ||
位运算符:& 、 | 、 ^ 、 ~ 、 >> 、 << 、 >>>
字符串连接运算符:+
2.3.1 算术运算符
++:如果是前缀:先对此变量加1,再执行其他的操作。
如果是后缀:先执行其他的操作,再对此变量加1
–:同理。
键盘输入:Scanner input=new Scanner(System.in);
练习:
1. 通过键盘输入声明初始化一个圆柱体的高和底面半径,pai值是3.14,求圆柱体的体积, 并显示输出圆柱体的体积; π(r^2)h
2. 通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据.
3. 任意定义一个五位整数,求各个位上的数的和!
4. 根据天数(46)计算周数和剩余的天数,天数是通过键盘输入。
5. 实现一个数字加密器,加密规则是:
加密结果 = (整数*10+5)/2 + 3.14159
加密结果仍为一整数
2.3.2 赋值运算符
赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左
2.3.3 关系运算符
关系运算符作用是比较两边的操作数,结果总是boolean型的。
2.3.4 逻辑运算符
逻辑运算符用于对boolean型结果的表达式进行运算,运算结果总是boolean型,后面结合条件结构讲解。
2.3.5 位运算符
位运算符对两个操作数中的每一个二进制位都进行运算
位运算符功能
按位取反 ~
按位与 &
按位或 |
按位异或 ^
2.3.6 移位运算符
左移:”a<<’b; “将二进制形式的a逐位左移b位,最低位空出的b位补0
带符号右移:”a>>b; “将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
无符号右移:”a>>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补0
2227 = 00000000 00000000 00001000 10110011
2227<<3 = 00000000 00000000 01000101 10011000
2227>>3 = 00000000 00000000 00000001 00010110
2227>>>3 = 00000000 00000000 00000001 00010110
-2227 = 11111111 11111111 11110111 01001101
-2227<<3 = 11111111 11111111 10111010 01101000
-2227>>3 = 11111111 11111111 11111110 11101001
-2227>>>3 = 00011111 11111111 11111110 11101001
2.3.7 字符串连接运算符
String s=”He” + “llo”; 结果”Hello”
“+”除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。
如:String s=”x” + 123; 结果”x123”
2.3.8 三目运算符
X ? Y : Z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
例:
int score = 75;
String type = score >=60 ? “及格” : “不及格”;
2.3.9 操作符优先级
运算符的优先次序
表达式的运算按照运算符的优先顺序从高到低进行,同级运算符从左到右进行:
优先次序 运算符
1 . [] ()
2 ++ – ! ~ instanceof
3 new (type)
4 * / %
5 + -
6 >> >>> <<
7 > < >= <=
8 = = !=
9 &
10 ^
11 |
12 &&
13 ||
14 ?:
15 = += -= *= /= %= ^=
16 &= |= <<= >>= >>>=
2.4 表达式和语句
2.4.1 条件语句
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语句有关规则
表达式的返回值必须是下述几种类型之一:int, byte, char, short,确定的结果;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下面执行!
Case后面的执行体可写{ }也可以不写{ }
例:
令狐冲参加比武大会
如果获得第一名,将出任武林盟主
如果获得第二名,将出任武当掌门
如果获得第三名,将出任峨嵋掌门
否则,将被逐出师门
实现示例:
输入赵本山的考试成绩,显示所获奖励
成绩==100分,爸爸给他买辆车
成绩>=90分,妈妈给他买MP4
90分>成绩>=60分,妈妈给他买本参考书
成绩<60分,什么都不买
实现示例:
张三为他的手机设定了自动拨号
按1:拨爸爸的号
按2:拨妈妈的号
按3:拨爷爷的号
按4:拨奶奶的号
编程实现此业务
练习:
1. Java成绩大于90分,而且音乐成绩大于80分,奖励他手机一个;或者Java成绩等于100分,音乐成绩大于70分,也可以奖励他汽车一部。
2. 要求用户输入两个数a、b,如果a能被b整除或a加b大于1000,则输出a,否则输出b
3. 如果我中了500万我做什么,没有中我做什么。
4. 登录系统取钱。
5. 判断闰年
6. 购物打折
7. 判断一个数的奇数,偶数
8. 多分支月份选择天数
9. 9.判断质数。
(质数或素数:就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数或素数)
2.4.2 循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定代码
循环语句分类
for 循环
while 循环
do/while 循环
(一) while循环
符合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
语法:
while(条件表达式){
//语句块;
}
实现示例:
为了备战,令狐冲锲而不舍地练习,盈盈严格把关…
“盈盈,怎么样,可以了吗?”
“不行,高音部分唱得还不是很好,钢琴还要继续练啊 !”
没有听到“很棒”的评价,看来革命尚未成功, 令狐冲并不气馁:
早上5点练声,上午练钢琴,下午到声乐老师家练习唱歌,晚上练习舞蹈基本功。
使用while循环的步骤
1、分析循环条件和循环操作
2、套用while语法写出代码
3、检查循环是否能够退出
System.out.print(“表演得怎么样 ?(y/n):”);
answer = input.next();
while (! answer.equals(“y”)) {
System.out.println("早上5点开始练声 !");
System.out.println("上午练习钢琴 !");
System.out.println("下午到声乐老师家练习唱歌 !");
System.out.println("晚上练习舞蹈基本功!");
System.out.print("表演得怎样 ?(y/n):");
answer = input.next();
}
System.out.println(“圆满完成 !”);
录入班级人数和学员成绩,计算班级学员的平均成绩
while(i<=stuNum){
System.out.print(“请输入学号” + i + “的成绩:”);
score = input.nextInt();
sum = sum + score;
i++;
}
avg = sum / stuNum ;
2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
提示:
1、循环条件和循环操作分别是什么?
2、int year = 2006;
double students = 80000;
while …
3、2007年培训学员数量 = 80000 * (1 + 0.25 )
(二) do-while循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
苦练半年,眼看大赛在即,
盈盈提议:彩排一次,如果很令人满意,以后就不用彩排了,否则每天都要彩排,
直到现场表现让她满意为止!
他能否用动听的歌声震撼盈盈,用美妙的钢琴声博得赞赏呢?……
语法:
do {
循环操作
}while ( 循环条件 );
连续录入学生姓名,输入“q”则系统退出
String name ;
Scanner input = new Scanner(System.in);
do{
System.out.print("请输入学生姓名:");
name = input.next();
}while ( !name.equals(“q”) );
System.out.println(“程序结束”);
while循环和do-while循环的区别?
(三) for循环
语法:
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
应用举例
public class ForLoop {
public static void main(String [] args){
int result = 0;
for(int i=1; i<=100; i++) {
result += i;
}
System.out.println(“result=” + result);
}
}
练习:用for循环计算1000以内的奇数的和
break语句的使用
continue语句的使用
二重循环
问题1:某次程序大赛,3个班级各4名学员参赛,计算每个班参赛学员的平均分
问题2:用 * 打印一个直角三角形图案
小结:
需要多次重复执行一个或多个任务的问题考虑使用循环来解决
Java Debug调试技术的使用
练习:
1. 输入五次成绩,求平均成绩。
2. 打印输出0~200之间能被7整除但不能被4整除的所有整数;要求每行显示6个数据;
3. Java数阶乘求和sum=1!+2!+…+10!;
2.5 算法
2.5.1 数组
静态数组
int ia[] ={1,2,3,4};
int [] ia=new int[]{3,4,5};
int a[5];//声明数组时,不能指定其长度,编译时将出错
使用数组时要注意的问题
空指针异常
如何得到数组长度
数组越界异常
如何理解多维数组,类似我们的棋盘。
java 中并没有真正的多维数组,只有数组的数组, Java中多维数组不一定是规则矩阵形式。
定义一个多维数组
int[][] xx;
xx=new int[3][];
xx[0]=new int[3];
xx[1]=new int[2];
多维数组中元素的引用方式,如:x[1][2]。
规则矩阵数组可以在一条语句中产生,如:int xx[][]=new int[2][3];
多维数组的静态初始化 ,如:
int[][] xx={{3,2,7},{1,5},{6}};
与数组操作相关的方法:
原始方法数组复制
使用System.arraycopy()函数拷贝数组
在JDK6中,也为Arrays类别新增了数组复制的copyOf()方法
用Arrays.sort 来排序数组
使用数组的步骤是什么?
有一个数列:8,4,2,1,23,344,12
1)循环输出数列的值
2)求数列中所有数值的和
3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
2.5.2 算法
(一) 最大值、最大值及平均值
从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分?
//计算成绩最大值
max = score[0];
for (int index = 1;index < 5;index++) {
if (score[index] > max) {
max = score[index];
}
}
System.out.println(“本次考试的五位学生的最高分是: ” + max);
练习:
小明要去买一部手机,他询问了4家店的价格,分别是2800元,2900元,2750元和3100元,显示输出最低价?
(二) 冒泡排序(重点)
冒泡排序是一种简单的排序算法。此方法将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。
原理:每次比较相邻两数,小的交换到前面,每轮结束后最大的数交换到最后
public class MaoPaoShiXian {
public static void main(String[] args) {
int a[] = { 8, 3, 120, 86, 34 };
// 循环输出数据
System.out.println(“排序前数组中的数据为:”);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + “\t”);
}
// 经过冒泡排序
// 首先控制比较多轮数
int temp;
for (int i = 0; i < a.length - 1; i++) {// 控制轮数
for (int j = 0; j < a.length - i - 1; j++) {// 控制每一轮比较多次数
if (a[j] < a[j + 1]) {// 从小到大与从大到小改变><符号就行
temp = a[j];// 交换两个数据的位置
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
//
System.out.println(“\n排序后数组中的数据为:”);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + “\t”);
}
// 我要正序进行输出
System.out.println(“\n正序进行输出”);
for (int i = a.length - 1; i >= 0; i–) {
System.out.print(a[i] + “\t”);
}
}
}
冒泡排序速记口诀(升序):
N 个数字来排队
两两相比小靠前
外层循环 N-1
内层循环 N-1-i
(三) 增强for循环
加强的for each循环语法
for(type element : array) {
System.out.println(element)….
}
JavaSE5.0之前
int[] arr = {1, 2, 3, 4, 5};
for(int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
在JavaSE5.0之后
int[] arr = {1, 2, 3, 4, 5};
for(int element : arr)
System.out.println(element);
如果是对象的话
String[] names = {“caterpillar”, “momor”, “bush”};
for(String name : names)
System.out.println(name);
二维数组
int[][] arr = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
for(int[] row : arr) {
for(int element : row) {
System.out.println(element);
}
}
练习:
2.5.3 注释
Java语言中定义了三种注释形式:
// 单行注释—-注释到行尾
/* 单行或多行注释 */
/* 可以用于文档化处理的单行或多行注释 /
JDK中提供了一个文档自动生成工具javadoc,在自定义类中public的成员前以/*…/形式加入的注释内容均可被自动提取到生成的说明文档中。
用法:javadoc source.java
Javadoc只处理源文件在类/接口、方法、域、构造器之前的注释,忽略其他地方的注释
/**
*javadoc演示程序–JavaDoc
*@author Alex Wen
*@version 1.0 2003/12/15
*/
public class JavaDoc
{
/**
*在main( )方法中使用的显示用字符串
*@see #main(java.lang.String[])
*/
static String SDisplay;
/**
*显示JavaDoc
*@param args 从命令行中带入的字符串
*@return 无
*/
public static void main(String args[])
{
SDisplay = “Hello World ” ;
System.out.println( SDisplay );
}
• javadoc 注释可以用于生成API文档
• 从javadoc注释中生成API文档的时候,主要从以下几项内容中提取信息:
– 包;
– 公有(public)类与接口;
– 公有(public)方法和受保护(protected)方法;
– 公有(public)属性和受保护(protected)属性。
• 常常在javadoc注释中加入一个以“@”开头的标记,结合javadoc指令的参数,可以在生成的API文档中产生特定的标记
• 常用的javadoc标记
– @author:作者
– @version:版本
– @docroot:表示产生文档的根路径
– @deprecated:不推荐使用的方法
– @param:方法的参数类型
– @return:方法的返回类型
– @see:”参见”,用于指定参考的内容
– @exception:抛出的异常
– @throws:抛出的异常,和exception同义
• 一条语句是以分号(;)结尾的一行代码
• 一个语句块是以一对花括号({})为边界的语句的集合
• Java中允许有任意多的空格 ,包括换行