面向对象程序设计教案.docx
《面向对象程序设计教案.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计教案.docx(16页珍藏版)》请在冰豆网上搜索。
面向对象程序设计教案
1课程内容:
JAVA重要基础知识
推荐教材:
《面向对象程序设计》(第3版),叶乃文等编著,清华大学出版社
推荐参考书:
《ThinkinginJAVA》(中文版书名:
JAVA编程思想)网上可以下载到电子书
2知识点:
3具体内容
3.1JAVA的发展历史
Java是一门完整的编程语言,包括自己的语法和各种底层的支持。
SUN:
斯坦福网络
1991年SUN公司为了竞争一个叫做GREEN的项目,就是利用各种硬件设备,控制家电的项目,他的技术人员本来打算用C++来开发的,但是C++本身比较复杂,所以他们又自己开发一个新的平台——Oak(橡树),但是,很遗憾,这个语言没有竞标成功,那么这门语言就意味着死亡。
后来,Sun公司的开发人员又开始跟网景学习了浏览器技术,开发了一款浏览器叫做HOTJAVA,在1995年的时候将Oak重新更名为Java。
到了1998年的时候,SUN正式将JAVA更名为JAVA2,主要是JAVA2中增加了一系列的轻量级的开发包,这些开发包主要都是用在图形界面的开发上,这些个图形界面统一称为JFC,这个时代很快就过去了。
现在的开发已经基本上不用JFC了,主要是拜微软所赐。
微软的.net战略,它开发出了J#,实际上就是将JAVA语言进行了改写,他想把JAVA做成VB的风格,但是这样一来呢,就把JAVA中各种底层API改写掉了。
这样微软构成侵权,SUN就把微软告上方法庭,微软公司进行赔付,所以在WindowsXP之后就不再支持JVM加了,这样SUN又告了微软,当然又得赔钱。
后来微软为了继续发展他的.net战略,根据J#重新进行了改革,新开发出了一套C#语言,所以现在看到的.net主推平台就是ASP.NET+C#了。
SUN其实对JAVA的期望还是在于嵌入式系统的开发上,但现在的嵌入式系统基本都是在做游戏开发。
JAVA的主要分支方向:
●J2SE:
是Java的标准版本,提供基本的底层支持,图形界面等等。
⏹在2005年Java十周年庆祝大会上,正式更名为JAVASE。
●J2EE:
是Java的一个主要方向,主要用于构建企业的应用系统。
⏹在2005年Java十周年庆祝大会上,正式更名为JAVAEE。
●J2ME:
是Java的微型版本,主要就是用于嵌入式系统的开发,现在主要就是做游戏的
⏹在2005年Java十周年庆祝大会上,正式更名为JAVAME。
JAVA的最大特点是面向对象。
面向对象的概念最早是在70年代的时候由Smalltalk语言提出来的,Smalltalk是IBM开发出来的语言。
JAVA语言是属于编译型和解释型的语言,这意味着,所有的JAVA源程序代码,需要先编译,编译之后再在电脑上进行解释,所以JAVA的语言执行分为两步。
实际上JAVA的基础语法是和C语言的格式是完全一样的。
在JAVA中不存在指针的概念,但是存在引用的概念,实际上传递的也是内存地址。
JAVA的安全性也是最高的,因为所有的操作都是以字节码(class)文件的形式保存的。
JAVA是由C++开发出来的,它的最大特点是跨平台。
JAVA的所有程序都是在一台虚拟的电脑上执行的,就是JVM。
Source.Java经过编译之后形成Sourse.class执行。
JAVA的运行中,会根据不同的操作系统提供一个JVM的版本支持,所有的程序执行都知识找到JVM,由JVM去直接适应操作系统,这样一来,所有的程序就可以在任意的操作系统上执行。
所有的代码如果可以由A直接到B,这样的代码肯定是不好用的,中间加入过渡端
A——C——B
3.2JAVA基础部分重要知识
3.2.1两个环境属性
JDK安装完成之后,实际上所有的命令都在C:
\ProgramFiles\Java\jdk1.7.0_15\bin目录下,但是所有的JAVA程序的编译和执行都必须在命令行窗口中完成,为了让Windows知道bin目录下有执行的命令,就需要配置path属性。
范例:
编写一个简单的Java程序。
程序编写完成之后,要用javac和java命令进行编译和执行:
●编译:
javac类名称.java
●执行:
java类
publicclassHelloWorld{//声明一个类,类名称的命名规范:
所有单词的首字母必须大写
publicstaticvoidmain(Stringargs[]){//主方法
System.out.print("HelloWorld!
!
!
");//系统输出,在屏幕上打印
}
}
刚才我们正常执行程序,在执行HelloWorld类的时候在testjava目录下,生成了HelloWorld的class文件。
3.2.2publicclass和class的区别
在编写类的时候可以使用两种方法来定义类:
●publicclass类名称
●class类名称
如果一个类声明的时候使用了publicclass进行声明,则类名称必须与文件名称完全一致。
publicclassHelloDemo{//声明一个类,类名称的命名规范:
所有单词的首字母必须大写
publicstaticvoidmain(Stringargs[]){//主方法
System.out.print("HelloWorld!
!
!
");//系统输出,在屏幕上打印
}
}
使用class进行声明的时候,可以编译执行。
此类使用了publicclass进行声明,类名称是HelloDemo,但是文件名称是HelloWorld.java,所以此时编译将产生以下问题:
以上的错误信息表示:
因为使用的是publicclass声明,所以类名称应该与文件名保持一致,也就是说,我们应该用HelloDemo.java来为文件命名。
如果类的声明采用了class,则类名称可以与文件名称不一致,但是执行的时候肯定执行的是生成后的类名称。
在一个*.java的文件中,只能有一个publicclass的声明,但是允许有多个class的声明。
3.2.3一个小的注意事项
System.out.print()属于完成屏幕打印的功能,如果后面加上一个“ln”则表示输出之后换行。
publicclassHelloWorld{//声明一个类,类名称的命名规范:
所有单词的首字母必须大写
publicstaticvoidmain(Stringargs[]){//主方法
System.out.println("HelloWorld!
!
!
");
System.out.println("HelloWorld!
!
!
");//系统输出,在屏幕上打印
}
}
Java中类名称、变量名等都有标识符的规范:
由字母、数字、下划线、$(以后在文件名称上看到有$符号的,则在程序中一律使用“.”来表示)组成,其中不能以数字开头,不能是java中的保留字。
关于保留字,java中一共存在49个保留字,关于保留字有一些说明:
●JAVA产生的时候就预留了两个保留字,goto,const
●JDK1.4时增加了assert保留字
●JDK1.5时增加了enum保留字
●在java中以下的内容不属于保留字,但是是有意义的名称:
ture,false,null
所有的保留字大家没必要都记住。
3.2.4数据类型的划分
Java中的数据类型主要划分为两类:
●基本数据类型
⏹数值型
◆整数:
byte,short,int,long
◆小数:
float,double
⏹字符型:
char
⏹布尔型:
boolean,取值只能是true或false
●引用数据类型:
实际上就类似于C语言的指针操作,传递的是内存的空间地址。
⏹数组
⏹类
⏹接口
3.2.5数字的操作中会存在数据的溢出
任何一种数据类型都有其最大的取值,如果已经是最大的值,则加1后变成最小值,最小值减1之后变成最大值。
publicclassSimpleDemo{//声明一个类,类名称的命名规范:
所有单词的首字母大写
publicstaticvoidmain(Stringargs[]){//主方法
intmax=Integer.MAX_VALUE;//求出整型的最大值
intmin=Integer.MIN_VALUE;//求出整型的最小值
System.out.println("int的最大值:
"+max);
System.out.println("int的最大值+1:
"+(max+1));
System.out.println("int的最小值:
"+min);
System.out.println("int的最小值-1:
"+(min-1));
}
}
3.2.6数据的默认类型
在java中,一个整型数字的默认类型是int型
一个小数的默认类型是double型。
Double的取值要比float要打,所以会出现丢失精度的问题,此时,可以用以下方式来解决:
publicclassSimpleDemo2{//声明一个类,类名称的命名规范:
所有单词的首字母必须大写
publicstaticvoidmain(Stringargs[]){//主方法
doublex=30.3;//声明小数
floaty=30.3f;//声明小数
}
}
3.2.7数据类型的转换
在Java中存在以下的数据类型的转换操作:
●Char——int互相转换,转换成ASCII码;
publicclassSimpleDemo03{//声明一个类,类名称的命名规范:
所有单词的首字母大写
publicstaticvoidmain(Stringargs[]){//主方法
charc1='a';//使用”'“括起来表示字符
intx1=c1;//将char变为int型
x1++;//自增
charc2=(char)x1;//将int-->char,进行强制转换
System.out.println(c2);
}
};
●byte—short—int—long
●int—float—double,double的数据长度是最大的,可以装下全宇宙所有的数据。
●但是转换的时候有一点需要特别注意:
如果我们碰到的是字符串,则所有类型都向字符串转换。
●
publicclassSimpleDemo04{//声明一个类,类名称的命名规范:
所有单词的首字母大写
publicstaticvoidmain(Stringargs[]){//主方法
Stringstr="hello";//表示字符串
inti=10;
System.out.println(str+(i+20));
}
};
此时并没有执行加法操作,而是将全部的数字变成字符串,使用“+”完成字符串的连接操作。
System.out.println(1l+11);
3.3循环控制
任何语言的循环控制的基本代码都是一致的。
分支结构:
if、if…elseif….else
循环结构:
while、do…while、for
循环控制:
break、continue
3.4数组
数组是属于引用型的数据类型,使用的时候需要开辟内存空间的。
1.声明时直接开辟内存空间
数据类型数组名称[]=new数据类型[长度];如:
inti[]=newint[10];
数据类型[]数组名称=new数据类型[长度];
2.分步声明
关键字new只要一出现,则肯定表示数据类型是引用的数据类型,要进行堆-栈空间的开辟。
范例:
声明一个数组
开辟的内容都用默认值表示,如果想要为数组的元素赋值,则需要通过下面的方式来进行访问:
开辟栈内存空间
Intscore[]=null;
开辟栈内存空间的意义在于,就相当于表示一个人的名字
开辟堆内存空间
score=newint[3];
数组只有开辟了堆内存空间之后才可以使用。
之前的代码数组的操作属于动态初始化,因为我们在开辟数组的时候并不知道数组中的具体内容是多少,而只是采用了默认值表示,所以,我们还可以采用另一种方式叫做静态初始化的操作:
数据类型数组名称[]={若干取值,…};
范例:
使用静态初始化完成
publicclassArrayDemo02{
publicstaticvoidmain(Stringargs[]){
inti[]={1,2,3,4,6,7};//此时属于静态初始化
System.out.print("数组开辟之后的内容:
");
for(intx=0;xSystem.out.print(i[x]+"、");
}
}
};
之前的数组都属于一维数组。
动态初始化:
数据类型数组名[][]=new数据类型[行的个数][列的个数]
静态初始化
数据类型数组名[][]={{11,22,33},{21,22,23}};
范例:
二维数组
publicclassArrayDemo03{
publicstaticvoidmain(Stringargs[]){
inti[][]={{1,2},{2,3,4},{3,4,5,6,7}};//此时属于静态初始化
System.out.print("数组开辟之后的内容:
");
for(intx=0;xfor(inty=0;y
System.out.print(i[x][y]+"、");
}
System.out.println("");
}
}
};
3.5方法
方法就是一段可以重复调用的代码段,但是,现在的方法是使用主方法直接调用的,所以,定义格式为:
publicstatic返回值类型|void方法名称([参数列表]){
[return返回内容;]
}
范例:
publicclassMethodDemo01{
publicstaticvoidmain(Stringargs[]){
print();//调用方法
print();//调用方法
print();//调用方法
print();//调用方法
}
publicstaticvoidprint(){
System.out.println("HelloWorld!
!
!
");
}
};
以上的代码在类中定义了一个print()方法,之后我们在主方法中连续重复调用了四次,所以输出了四条语句。
Void表示这个方法是没有任何的返回值类型,不需要使用return语句。
(判断题)
范例:
完成一个加法操作。
publicclassMethodDemo02{
publicstaticvoidmain(Stringargs[]){
System.out.println(add(10,20));
System.out.println(add(20,20));
}
publicstaticintadd(intx,inty){
inttemp=x+y;
returntemp;
}
};
在方法的使用中,还存在一种概念,叫方法的重载。
重载:
指的是方法名称相同,但是参数的类型或者个数可以不同。
(判断题)
publicclassMethodDemo03{
publicstaticvoidmain(Stringargs[]){
System.out.println(add(10,20));
System.out.println(add(20,20,10));
System.out.println(add(20.01f,20.05f));
}
publicstaticintadd(intx,inty){
inttemp=x+y;
returntemp;
}
publicstaticintadd(intx,inty,intz){
inttemp=x+y+z;
returntemp;
}
publicstaticfloatadd(floatx,floaty){
floattemp=x+y;
returntemp;
}
};
实际上,重载的概念大家一直在接触,System.out.print()可以接收任意类型的参数,所以此方法也属于重载,但在使用重载的时候一定要注意,重载看的不是方法的返回值类型,而是参数的类型或个数。
在方法的使用过程中还可以使用return来结束一个方法的操作,当执行到return的时候会直接返回到方法的调用处继续执行。
publicclassMethodDemo04
{
publicstaticvoidmain(Stringargs[]){
fun(10);
fun(3);
}
publicstaticvoidfun(intx){
System.out.println("进入方法。
");
if(x==3)
{
return;
}
System.out.println("结束方法。
");
}
}