课件.docx
《课件.docx》由会员分享,可在线阅读,更多相关《课件.docx(67页珍藏版)》请在冰豆网上搜索。
课件
第1章JAVA程序设计概述
1JAVAWEB编程
针对WEB程序
J2EE
企业级应用
J2ME
2移动设备、语法基础、面向对象、异常处理、数组、常用类、容器、I/O、线程、网络、GUI
3读写查
只看不练
只听不练
照猫画虎
钻到细节里拔不出来(初学者)
修正:
明确目标,集中精力,心无旁骛
对计算机心存敬畏
不敢动(装卸软件,安装系统)
不敢调试BUG
4计算机基础操作
①英语
计算机语言的历史及JAVA语言的历史地位
JAVA自身的发展史
JAVA的特点
JAVA的运行机制
JAVA运行环境的安装与配置
第一个程序HelloWorld
第一代语言打孔机——纯机器语言
第二代语言汇编语言
第三代语言
C、Pascal、Fortran面向过程的语言
C++面向过程/面向对象
JAVA跨平台的纯面向对象语言
.NET跨语言的平台
1995年,SUN发布JDK1.0
1998年:
JDK2.0,更名为JAVA2
后续JDK1.3,1.4
JDK1.5,更名为JDK5.0
最新版本为JDK7.0
一种面向对象的语言
一种平台无关的语言,提供程序运行的解释环境
一种健壮的语言,吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如:
指针,内存的申请与释放等)
①JAVA虚拟机(JavaVirtualMachine)
②垃圾收集机制(Garbagecollection)
5JAVA虚拟机可以理解为一个以字节码为及其指令的CPU
对于不同的运行平台,有不同的虚拟机
⑴JAVA虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”
⑵不再使用的内存空间应回收
在C/C++等语言中,由程序员负责无用内存的回收
JAVA语言消除了程序员回收无用内存空间的责任:
它提供一种系统级线程跟踪存储空间的分配情况。
并在JVM空闲时,检查并释放那些可被释放的存储器空间。
垃圾回收在程序运行过程中自动进行,程序员无法精确控制和干预
JDK:
JavaDevelopmentKit
(软件开发包)
JRE:
JavaRuntimeEnvironment
(Java运行环境)
下载:
安装
6配置环境变量
path:
windows系统在执行命令时要搜寻的路径
classoath:
java在编译和运行时要找的class所在的路径
验证
java运行java程序
javac:
编译java程序
①Java源文件以”java”为扩展名。
源文件的基本组成部分是类(class),如本例中的HelloWorld类。
②一个源文件中最多只能有一个public类
③Java应用程序的执行入口是main()方法,它有固定的书写格式:
Publicstaticvoidmain(Stringargs[]){....}
④Java语言严格区分大小写
Java方法有一条条语句构成,每个语句以分号结束
Java语言有三种注释方式:
“//”;“/*...*/”;“/**...*...*/”
第2章基本语法.
1标识符、关键字、JAVA的基本数据类型、运算符、表达式和语句、分支、循环
2方法
JAVA对各种变量、方法和类等要素命名时使用的字符序列成为标识符
凡是自己可以起名字的地方都叫标识符
3JAVA标识符命名规则:
标识符由字母、下划线、美元符”$”或数字组成
标识符应以字母、下划线、美元符开头
JAVA标识符大小写敏感,长度无限制
约定俗称:
JAVA标识符选取因注意”见名知意”
合法的标识符
不合法的标识符
HelloWorld
class
DataClass
DataClass#
_983
98.3
$bS5_c7
HellWorld
JAVA中一些赋以特定含义,用做专门用途的字符串称为关键字(keyword)
大多数编辑器会将关键字用特殊方式标出
所有JAVA关键字都是小写英文
goto和const虽然从未使用,但也作为关键字保留
JAVA的常量值用字符串表示,区分为不同的数据类型
如整形常量:
123
实型常量:
3.14
字符常量:
’a’
逻辑常量:
true、false
字符串常量”helloworld”
注意:
区分字符常量和字符串常量
注意:
”常量”这个名词还会用在其他语境中表示值不可变的变量
4参见final关键字
JAVA变量时程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
JAVA程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明的格式为:
typevarName[=value][{,varName[=value]}]
例如:
intI=100;
floatf=12.3f;
doubled1,d2,d3=0.123;
Strings=“hello”
5变量必须先声明(申请空间),再赋值(填内容)
按被声明的位置划分:
局部变量:
方法或语句块内部定义的变量
成员变量:
方法外部、类的内部定义的变量
注意:
类外面(与类对应的大括号外面)不能有变量的声明
按所属的数据类型划分:
基本数据类型变量
引用数据类型变量
6JAVA中定义了4类8种基本数据类型
逻辑型——boolean
文本型——char
整数型——byte,short。
Int,long
浮点数型——float,double
boolean类型适于逻辑运算,一般用于程序流程控制
boolean类型数据只允许取值true或false,不可以0或非0的整数代替true和false,这点和C语言不同
用法举例:
booleanflag
flag=true;
if(flag){
//dosomething
}
7char型数据用来表示通常意义上的“字符”
字符常量为单引号括起来的单个字符,例如:
chareChar=‘a’;
charcChar=‘中’;
JAVA字符采用unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示,例如:
charc1=‘\u0061’;
注:
unicode是全球语言统一编码
8JAVA语言还允许使用转义字符’\’来将其后的字符转变为其他的含义,例如:
charc2=‘\n’;//’\n’代表换行符
9JAVA各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证JAVA程序的可移植性。
10JAVA语言整形常量的三种表示形式:
十进制整数,如:
12,-314,0
八进制整数,要求以0开头,如:
012
十六进制整数,要求0x或0X开头,如:
0X12
JAVA语言的整形常量默认为int类型,声明long类型常量可以后加’l’或’L’,如:
inti=600;//正确
longl=88888888888L;//必须加L否则会出错
与整数类型类似,JAVA浮点类型有固定的表数范围和字段长度,不受平台影响。
11JAVA浮点类型常量有两种表示形式:
十进制数形式,如:
3.14,314.0,.314
科学计数法形式,如:
3.14e2,3.14E2,100E-2
JAVA浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F,如:
doubled=12345.6;//正确
floatf=12.3f;//必须加f否则会出错
boolean类型不可以转换为其他的数据类型
整形、字符型、浮点型的数据在混合运算中的相互转换,遵循以下原则:
12容量小的类型自动转换为容量大的数据类型:
byte,short,char->int->long->float->double
byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出
13有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
JAVA语言支持如下运算符:
算数运算符:
+,-,*,/,%,++,--
关系运算符:
>,<,>=,<=,==,!
=
逻辑运算符:
!
,&,|,^,&&,||
位运算符:
&,|,^,~,>>,<<,>>>
赋值运算符:
=
扩展赋值运算符:
+=,-=,*=,/=
字符串连接运算符:
+
自加和自减运算符:
++(--)
在前时先运算再取值
在后时先取值再运算
逻辑运算符
①当“=”两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转换原则进行处理,如:
longl=100;inti=(int)l;
注意:
可以将整形常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
byteb=12;charc=100;//正确
bytebb=256;shorts=-32769//错误
②“+”除用于算术加法运算外,还可用于对字符串进行连接操作,如:
intid=800+90;
Strings=“hello”+“world”;
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接
intc=12;
System.out.println(“c=”+c);
③当进行输出时,无论任何类型,都自动转为字符串进行打印
④表达式是符合一定语法规则的运算符和操作数的序列
a
5.0+a
(a-b)*c–4
I<30&&i%10!
=0
⑤表达式的类型和值
对表达式中操作数进行运算得到的结果称为表达式的值
表达式值得数据类型即为表达式的类型
⑥表达式的运算顺序
应按照运算符的优先级从高到低的顺序进行
优先级相同的运算符按事先约定的方式进行运算
⑦语法格式:
x?
y:
z;
其中x为boolean类型表达式,先计算X的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值
举例
intscore=80;
Stringtype=score<60?
“不及格”:
“及格”;
System.out.println(“type=”+type);
条件语句-根据不同条件,执行不同语句
if
if…else
if…elseif…else
switch
循环语句–重复执行某些动作
for
while
do…while
break语句用于终止某个语句的执行,用在循环语句体中,可以强行退出循环
continue语句用在循环语句体重,用于终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开始下一次循环过程
14JAVA的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,格式如下:
[修饰符1修饰符2…]返回值类型方法名(形参表){
java语句….
}
形式参数:
在方法被调用时用于接收外界输入的数据
实参:
调用方法时实际传给方法的数据
返回值:
方法在执行完后返还给调用它的环境的数据
返回值类型:
事先约定的返回值的数据类型,如无返回值,必须给出返回值类型void
①JAVA语言中使用下述形式调用方法:
对象名.方法名(实参列表);
实参的书目、数据类型和次序必须和所调用的方法声明的形参列表匹配
return语句终止方法的运行并指定要返回的数据
②JAVA中进行方法调用中传递参数时,遵循值传递的原则:
基本类型传递的是该数据值本身,引用类型传递的是对对象的引用,而不是对象本身
第3章面向对象基础.
编程语言的发展
面向过程的设计思想
面向对象的设计思想
对象和类的概念
类之间的关系
JAVA类的定义
对象和引用
对象的创建和使用
构造方法
this关键字
static关键字
package和import语句
访问控制
类的继承
方法的重写
final关键字
Object类
对象转型
多态
抽象类
接口
1机器语言——直接由计算机的指令组成,指令、数据、地址都以“1”和“0”的符号串组成;可以被计算机直接执行。
2汇编语言——用容易理解和记忆的符号表示指令、符号以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。
3高级语言——屏蔽了机器细节,提高了语言的抽象层次接近与人的自然语言,60年代提出的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。
4面向对象的语言——与已往各种语言的根本不同是,它的设计出发点就是为了能更直接的描述问题域中客观存在的事物。
5编程语言的发展是朝着人类更容易理解的方向前进
我开车去北京
面向过程
我上车,我挂档,我踩油门,我过陕西,我过山西,我过河北,我到北京
面向对象
我命令车去北京
车怎么去与我无关
信息封装在车这个类的内部
我不用去了解车开动的过程细节
面向对象的基本思想是,从现实世界中客观存在的事物出发构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。
6面向对象更加强调运用人类在日常的思维逻辑中经常采用的思想方法和原则,如抽象、分类、继承、聚合、多态等。
对象是用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物的静态属性和动态属性。
7类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所具有的静态和动态属性。
类可以看做一类对象的模板,对象可以看做该类的一个具体实例。
职员
类
对象
实例化
关联关系:
继承关系:
XX是一种XX
聚合关系:
聚集
组合
实现关系:
多态:
抽象出下面系统中的“类”及其关系:
①对象是JAVA程序的核心,在JAVA程序中“万事万物皆对象”
②对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体
类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法
J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。
8面向对象的编程——一组对象互相配合通过沟通完成特定功能
对象都有对外服务的接口
通过继承可以复用
对象隐藏内部服务的实现
通过聚合可以复用
面向对象更加容易使我们达到这些年来苦苦追求的境界
reusable、extensibility、维护和替换更加方便
组件——比对象更高层次上的抽象
EJB、WebService、CORBA、COM…
//用class关键字定义一个类,例如:
classPerson{
//成员变量定义
intid;
intage=20;
//方法定义
publicintgetAge(){returnage;}
pubicvoidsetAge(inti){age=i;}
publicintgetId(){returnid};
}
JAVA语言中除基本类型之外的变量类型都称之为引用类型
JAVA中的对象是通过引用对其操作的,如:
/*声明了一个String类型的引用变量
*但并没有使它指向一个对象
*/
Strings;
/*使用new语句创建了一个String类型对象并用s指向它
*以后可以通过s完成对其的操作
*/
s=newString(“helloworld!
”);
必须使用new关键字创建对象
使用对象(引用).成员变量来引用对象的成员变量
使用对象(引用).方法(参数列表)来调用对象的方法
同一类的每个对象有不同的成员变量存储空间
同一类的每个对象共享该类的方法
使用”new+构造方法”创建一个新的对象
构造方法定义在JAVA类中的一个用来初始化对象的方法
构造方法与类同名且没有返回值
例如:
Person类的构造方法:
publicclassPerson{
intid;intage;
Person(intn,inti){
id=n;
age=i;
}
}
创建对象时,使用构造方法初始化对象的成员变量
publicclassTest{
publicstaticvoidmain(Stringargs[]){
Persontom=newPerson(1,25);
Personjohn=newPerson(2,27)
}
}
当没有指定构造方法时,编译器为类自动添加形如
类名(){}的构造方法
例如:
classPoint{
publicintx;
publicinty;
}
....
Pointp=newPoint();
....
类名的首字母大写
变量名和方法名的首字母小写
见名知意
运用驼峰标识
方法的重载是指一个类中可以定义有相同名字,但参数不同的多个方法。
调用时,会根据不同的参数表选择对应的方法
例如:
在Person类中添加如下方法:
voidinfo(){
System.out.println(“Myidis”+id);
}
voidinfo(Stringt){
System.out.println(t+“”+id+““+age);
}
与普通方法一样,构造方法也可以重载
例如:
Person类的构造方法可以修改为:
Person(){
id=0;
age=20;
}
Person(inti){
id=0;
age=i;
}
Person(intn,inti){
id=n;age=i;
}
在类的方法定义中使用的this关键字代表使用该方法的对象的引用
当必须指出当前使用方法的对象是谁时要使用this
有时使用this可以处理方法中成员变量和参数重名的情况
this可以看作是一个变量,它的值是当前对象的引用
在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份
用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员
静态方法不再是针对某个对象调用,所以不能访问非静态成员
可以通过对象引用或类名(不需要实例化)访问静态成员
为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,JAVA引入包(package)机制,提供类的多重类命名空间
package语句作为JAVA源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包),它的格式为:
packagepkg1.pkg2.pkg3...;
JAVA编译器把包对应于文件系统的目录管理,package语句中,用’.’来指明包(目录)的层次,例如使用语句
packagecom.lutcte
则该文件中所有的类位于.\com\lutcte目录下
如果将一个类打包,则使用该类时,必须使用该类的全名(例如:
com.lutcte.MyClass),JAVA编译器才会找到该类
也可以使用import语句,在文件开头引入要使用到的类,例如:
importcom.lutcte.MyClass;
importjava.io.*;
注:
java.lang包中的类可以不适用import语句直接使用
JAVA中使用extends关键字实现类的继承机制,其语法规则为:
class[extends]
{......}
通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)
JAVA只支持单继承,不允许多继承
一个子类只能有一个父类,一个父类可以派生出多个子类
JAVA权限修饰符public、protected、private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限
对于class的权限修饰只可以用public和default
public类可以在任意地方被访问,default类只可以被同一个包内部的类访问
修饰符
类内部
同一个包
子类
任何地方
private
Yes
default
Yes
Yes
protected
Yes
Yes
Yes
public
Yes
Yes
Yes
Yes
在子类中可以根据需要对从基类中继承来的方法进行重写
重写方法必须和被重写方法具有相同的方法名称、参数列表和返回类型
重写方法不能使用比被重写方法更严格的访问权限
在继承中使用super关键字来引用基类的成分
子类的构造过程中必须调用基类的构造方法
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法
使用this(argument_list)调用本类的另外的构造方法
如果调用super,必须写在子类构造方法的第一行
如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法
如果子类构造方法中既没有显式调用基类构造方法而基类中又没有无参数的构造方法,则编译出错
Object类是所有JAVA类的根基类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类,如:
publicclassPerson{
...
}
等价于:
publicclassPersonextendsObject{
...
}
Object类中定义有”publicStringtoString()”方法,其返回值类型是String,描述当前对象的有关信息。
可以根据需要在用户自定义类中重写toString()方法
在进行String与其它类型数据连接时,如:
System.out.println(“info”+person)
将自动调用person对象所属类的toString方法
Object类中定义有
”publicbooleanequals(Objectobj)”方法
提供定义对象是否“相等”的逻辑
Object的equals方法定义为:
x.equals(y);当x和y是同一个对象的引用时返回true,否则返回false
J2SDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(不一定是相同对象)返回true,否则返回false
用户自定义类中可以重写equals方法
一个基类的引用类型变量可