尚学堂课件J2SE上半部分课件

上传人:磨石 文档编号:243147448 上传时间:2024-09-16 格式:PPT 页数:196 大小:909KB
返回 下载 相关 举报
尚学堂课件J2SE上半部分课件_第1页
第1页 / 共196页
尚学堂课件J2SE上半部分课件_第2页
第2页 / 共196页
尚学堂课件J2SE上半部分课件_第3页
第3页 / 共196页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,手把手教程,V3.0,版权所有:尚学堂科技,尚学堂,内容,第一章:JAVA概述,第二章:JAVA语言基础,第三章:面向对象编程,第四章:JAVA异常处理机制,第五章:数组,第六章:JAVA常用类,第七章:JAVA容器类,第八章:JAVA流技术,第九章:JAVA多线程机制,第十章:JAVA网络编程,第十一章:GUI编程,第一章:J2SE 之 JAVA概述,想学习J2ME、JSP/Servlet、J2EE吗?,请打好基础J2SE,内容,计算机语言的历史以及,Java,语言的历史地位,Java,自身的发展史,Java,体系,Java,的特点,Java,的运行机制,Java,运行环境的安装与配置,第一个程序,HelloWorld,计算机语言发展史及Java的历史地位,第一代语言,第一代语言,或,机器语言,是一种低级的面向计算机的程序设计语言,使用0和1表示各种命令。,第二代语言,汇编,第三代语言,C、Pascal、Fortran面向过程的语言,C+面向过程/面向对象,Java跨平台的纯面向对象的语言,.NET跨语言的平台,Java发展史与java体系,95年,Sun发布JDK1.0,98年,JDK1.2,更名为Java2,后续JDK1.3、1.4,目前JDK1.5,更名为Java 5.0 (最新为,JDK 6 Update 3,),我们使用5.0,j2se,java web,j2ee,j2me,移动增值,JAVA能开发那些类型的程序?,Java语言的特点,一种面向对象的语言。,一种平台无关的语言,提供程序运行的解释环境。,一种健壮的语言,吸收了C/C+ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。,Java程序运行机制及运行过程,源程序,(*.java文件),字节码,(*.class文件),Java编译器,类装载器 Class Loader,字节码校验器 byte verifier,解释器 interpretor,系统平台,核心机制之Java虚拟机,Java虚拟机可以理解成一个以字节码为机器指令的 CPU。,对于不同的运行平台,有不同的虚拟机。,Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。,UNIX,JVM for UNIX,Windows,JVM for Windows,Other Platform,JVM for Other,*.java,*.class,编译,执行,核心机制之垃圾收集,garbage collector,不再使用的内存空间应回收垃圾收集。,在C/C+ 等语言中,由程序员负责回收无用内存。,Java语言消除了程序员回收无用内存空间的责任;它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。,垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。,J2SDK & JRE,Software Devleopment Kit (软件开发包),Java Runtime Environment (Java运行环境),开发需要JDK,用户只需JRE,开发JDK的不止一家,最主流的是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,IBM公司开发的JDK, IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多,BEA公司的Jrocket,专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多,GNU组织开发的JDK,Java开发环境的下载 安装 配置,配置Java开发环境步骤(WindowsXP),下载并安装最新版本的J2SDK。,设置 Windows 环境变量。,PATH/CLASSPATH,选择合适的文本编辑器或使用集成开发环境。,下载,安装,配置 path & classpath,验证,java 运行java程序,javac 编译java程序,HelloWorld.java,Java Application初步,Java源文件以“java”为扩展名。源文件的基本组成部分是类(class),如本例中的 HelloWorld 类。,一个源文件中最多只能有一个public 类。其它类的个数不限,如果源文件包含一个public 类,它必需按该类名命名。,Java 应用程序的执行入口是 main() 方法。它有固定的书写格式:,public static void main(String args) ,Java 语言中严格区分大小写。,Java 方法由一条条语句构成,每个语句以分号结束。,Java语言有三种注释方式:,/ 用于单行注释,/*,用于多行注释,*/,/*,* 用于多行注释,且可以被 doc 工具解析,*/,常见Java 开发环境,编辑器,UltraEdit,EditPlus,集成开发环境(IDE Integrated Development Environment):,JBuilder (),Eclipse (http:/www.eclipse.org),Sun One Studio Net Beans(),WSAD,RAD,(,),WebSphere Application Developer,Rational Application Developer,IntelliJIDEA,常见错误,出现如下错误的原因:,java 不是内部或外部命令,也不是可运行的程序或批处理文件。,编译javac Test.java,明明看到该文件,为何找不到?,HelloWorld.java.txt,显示扩展名!,程序员的桌面设置 (详细列表 / 显示所有文件 / 标题栏地址栏全路径),java命令运行的是那个版本?,如果安装了多个版本jdk,那么java命令运行的是那个版本的呢?,java version,java verbose,java -verbose HelloWorld,有时候,修改了一个jdk下面的配置,但始终无法生效。就是这个道理。,第二章:J2SE 之 基础语法,内容,标识符,关键字,Java,基本数据类型,运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用,标识符,Java 语言中,对各种,变量,、,方法,和,类,等要素命名时使用的字符序列称为标识符。,Java 标识符有如下命名规则:,标识符由字母、下划线“_” 、美元符“$”或数字组成。,标识符应以字母、下划线 、美元符开头。,Java 标识符大小写敏感,长度无限制。,约定俗成:,Java 标识符选取因注意“见名知意”且不能与 Java 语言的关键字重名。,合法的标识符,不合法的标识符,HelloWorld,class,DataClass,DataClass#,_983,98.3,$bS5_c7,Hell World,关键字,Java 中一些赋以特定的含义,用做专门用途的字符串称为关键字(keyword)。,所有Java关键字都是小写英文字符串。,goto 和 const 虽然从未使用,但也作被为 Java 关键字保留。,abstract,default,if,private,this,boolean,do,implements,protected,throw,break,double,import,public,throws,byte,else,instanceof,return,transient,case,extends,int,short,try,catch,final,interface,static,void,char,finally,long,strictfp,volatile,class,float,native,super,while,const,for,new,switch,null,continue,goto,package,synchronized,Java常量,Java 的常量值用字符串表示,区分不同的数据类型。,如整型常量 123,实型常量 3.14,字符常量 a,逻辑常量 true、false,字符串常量 “helloworld”,null,注意:,区分字符常量和字符串常量,区分 null 和 “”,Java变量,Java变量是程序中最基本的存储单元,其要素包括,变量名,,,变量类型,和,作用域,。,Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:,type varName =value,varName=value,例如:,int i = 100; float f = 12.3f; double d1, d2, d3 = 0.123;,String s = “hello”;,从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先申请(声明),然后必须进行赋值(填充内容),才能使用,值,名字,提示: 程序执行过程,硬盘,程序,内存,代码,操作系统代码,1:Load到内存区,2:找到main方法开始执行,heap,stack,data segment,code segment,3:执行过程中的内存管理,存放代码,静态变量,字符串常量,局部变量,new出来的东西,Java变量的分类,按被声明的位置划分:,局部变量,:方法或语句块内部定义的变量,成员变量,:方法外部、类的内部定义的变量,注意:类外面(与类对应的大括号外面)不能有变量的声明,按所属的数据类型划分:,基本数据类型,变量,引用数据类型,变量,Java局部变量与成员变量,方法体内部声明的变量(包括形参)称为局部变量:,方法体内部是指与方法对应的大括号内部,在方法体外,类体内声明的变量成为成员变量,public void method() ,int i;,int j = i+5 ; / 编译出错,变量i还未被初始化,double d = 3.14;,注:以上程序目前还不能编译,TestVar.java,Java数据类型的划分,数据类型,基本数据类型,引用数据类型,数值型,字符型(char),布尔型(boolean),整数类型(byte,short,int,long),浮点类型(float, double),类(class),接口(interface),数组,Java基本数据类型,Java中定义了4类8种基本数据类型。,逻辑型boolean,字符型 char,数值型,整数型 byte, short, int, long,浮点数型 float, double,逻辑型Boolean,boolean 类型适于逻辑运算,一般用于程序流程控制 。,boolean 类型数据只允许取值 true 或 false ,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。,用法举例:,boolean flag;,flag = true;,if(flag) ,/do something,字符型char,char 型数据用来表示通常意义上的“字符”,字符常量为用单引号括起来的单个字符,例如:,char eChar = a; char cChar =中;,Java 字符采用,Unicode,编码,每个字符占两个字节,因而可用十六进制编码形式表示,例如:,char c1 = u0061;,注:Unicode是全球语言统一编码,Java 语言中还允许使用转义字符 来将其后的字符转变为其它的含义,例如:,char c2 = n;,/n代表换行符,补充:2进制、10进制、16进制之间的转换,1101 11 0 2 1 4 1 8,13 1 4 8 1101,1101 D,类 型,占用存储空间,表数范围,byte,1,字节,-128 127,short,2,字节,-2,15, 2,15,-1,int,4,字节,-2,31, 2,31,-1,long,8,字节,-2,63, 2,63,-1,整数类型,Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。,Java 语言整型常量的三种表示形式:,十进制整数,如:12, -314, 0。,八进制整数,要求以 0 开头,如:012。,十六进制数,要求 0x 或 0X 开头,如:0x12 。,Java语言的整型常量默认为int型,声明long型常量可以后加 l 或 L ,如:,int i1 = 600; /正确 long l1 = 88888888888L; /必须加l否则会出错,类 型,占用存储空间,表数范围,float,4,字节,-3.403E383.403E38,double,8,字节,-1.798E3081.798E308,浮点类型,与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响。,Java 浮点类型常量有两种表示形式,十进制数形式,例如: 3.14 314.0 .314,科学记数法形式,如 3.14e2 3.14E2 100E-2,Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F ,如:,double d = 12345.6; /正确 float f = 12.3f; /必须加f否则会出错,下面列出 Java 的各种浮点类型,TestVar2.java,java中可以从,任意基本类型,转型到另外的基本类型,例外,boolean 类型不可以转换为其他的数据类型。,转换分为默认转换和强制转换,整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:,容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:,byte,short,char-int-long-float-double,byte,short,char,之间不会互相转换,他们三者在计算时首先回转换为int类型,容量大的数据类型转换为容量小的数据类型时,要加上,强制,转换符,但可能造成精度降低或溢出;使用时要格外注意。,有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。,(看下页),实数常量(如:1.2)默认为 double。整数常量(如:123)默认为 int 。,基本数据类型转换,TestConvert.java,多种类型的数据混合运算,有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。,如果其中一个运算对象是double类型的,另一个也会被转换成double类型。,否则,如果其中一个运算对象是float类型的,,另一个也会被转换成float类型的。,否则,如果其中一个运算对象是long类型的,,另一个也会被转换成long类型的。,否则,如果其中一个运算对象是int类型的,,另一个也会被转换成int类型的。,否则,如果其中一个运算对象是short类型的,,另一个也会被转换成short类型的。,void public method(),int,i=1,j;,float,f1=0.1;,float,f2=123;,long,l1 = 12345678,l2=8888888888;,double,d1 = 2e20,d2=124;,byte,b1 = 1,b2 = 2,b3 = 129;,j = j+10;,i = i/10;,i = i*0.1;,char,c1=,a,c2=125;,byte,b = b1-b2;,char,c = c1+c2-1;,float,f3 = f1+f2;,float,f4 = f1+f2*0.1;,double,d = d1*i+j;,float,f = (,float,)(d1*5+d2);,课堂练习,说出下面程序片断中编译错误或可能产生计算溢出的部分,课堂练习,TestConvert2.java,程序格式,大括号对齐,遇到缩进,Tab/Shift+Tab,程序块之间加空行,并排语句之间加空格,运算符两侧加空格有特定条件,前面有空格,成对编程,运算符,Java 语言支持如下运算符:,算术运算符: +,-,*,/,%,+,-,关系运算符: ,=,,赋值运算符: =,扩展赋值运算符:+ =,- =,* =,/ =,字符串连接运算符:+,public,class,Test ,public,static,void,main(String arg) ,int,i1 = 10, i2 = 20;,int,i = i2+;,System.out.print(,i=,+ i);,System.out.println(, i2=,+ i2);,i = +i2;,System.out.print(,i=,+ i);,System.out.println(, i2=,+ i2);,i = -i1;,System.out.print(,i=,+ i);,System.out.println(, i1=,+ i1);,i = i1-;,System.out.print(,i=,+ i);,System.out.println(, i1=,+ i1);,自加和自减运算符,输出:i=20 i2=21,i=22 i2=22,i=9 i1=9,i=9 i1=8,注意:,+(-),在前时先运算再取值。,在后时先取值再运算。,逻辑运算符,:!,逻辑非,&, 逻辑与,|, 逻辑或, 逻辑异或,&, 短路与,|, 短路或,&, |,!,逻辑运算符只能用于,boolean,身上。,a,b,!a,a&b,a|b,ab,a&b,a|b,true,true,false,true,true,false,true,true,true,false,false,false,true,true,false,true,false,true,true,false,true,true,false,true,false,false,true,false,false,false,false,false,逻辑运算符,public,class,Test,public,static,void,main(String args),boolean,a,b,c;,a =,true,; b =,false,;,c = a ,c = a | b; System.out.println(c);,c = a b; System.out.println(c);,c = !a; System.out.println(c);,c = a ,c = a | b; System.out.println(c);,public class Test,public static void main(String args) ,int i=1,j=2;,boolean flag1 = (i3),/第二个操作数将不再计算,boolean flag2 = (i2)|(i+j)6);,/第二个操作数将不再计算,赋值,运算符,(=),当“,=”,两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转换原则进行处理,long l = 100;,int,i = (,int)l,;,注意:可以将整型常量直接赋值给,byte, short, char,等类型变量,而不需要进行强制类型转换,只要不超出其表数范围,byte b = 12; char c = 100;,X,byte bb = 256;,X,short s = -32769;,赋值运算符与扩展赋值运算符,运算符,用法举例,等效的表达式,+=,a += b,a = a+b,-=,a -= b,a = a-b,*=,a *= b,a = a*b,/=,a /= b,a = a/b,%=,a %= b,a = a%b,字符串连接符,“+” 除用于算术加法运算外,还可用于对字符串进行连接操作,int id = 800 + 90;,String s = hello + world;,“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。,int c = 12;,System.out.println(c= + c);,表达式,表达式是符合一定语法规则的运算符和操作数的序列,a,5.0 + a,(a-b)*c-4,i ,L to R, = instanceof,L to R,= !=,L to R,&,L to R,L to R,|,L to R,&,L to R,|,R to L,? :,R to L,= *= /= %= += -= = = &= = |=,低,高,计算细节,char c = (char)(Math.random()*26+a);,Math.random()返回一个double值,所以26被转成double进行乘法运算,乘积是个double,为了完成加法,a必须被转成double,最后获得的double再转成char,如果从29.7转成char,是30还是29?,Math.random()输出01之间的数。0,1),“三目条件运算符,语法格式:,x ? y : z,其中,x,为,boolean,类型表达式,先计算,x,的值,若为,true,,则整个三目运算的结果为表达式,y,的值,否则整个运算结果为表达式,z,的值。,举例:,int,score = 80;,int,x = -100;,String type = score 0 ? 1 : (x = 0 ? 0 : -1);,System.out.println(type,= + type);,System.out.println(flag,= + flag);,type= 及格,flag= -1,三目条件运算符,语句,条件语句 - 根据不同条件,执行不同语句。,if,if . else,if . else if,if . else if . else if . else,switch,循环语句 重复执行某些动作,for (JDK1.5语法),while,do . while;,if语句,if,if . else .,if . else if .,if . else if . else if .,if . else if . else if . else,只有一句需要执行的语句时,可以省略 ,但是不推荐省略,小心不要在if后面加 ;,TestIF.java,for 循环语句,for,语句为如下形式:,for(,表达式1; 表达式2; 表达式3),语句,; ; ,执行过程首先计算表达式,1,,接着执行表达式,2,,若表达式,2,的值,=,ture,,则执行语句,接着计算表达式,3,,再判断表达式,2,的值;依此重复下去,直到表达式,2,的值,=falsefor,语句中三个表达式都可以省略,JDK1.5,新补充的,for,语法(后面课程中补充,数组),=true,表达式2值,结束for,语句,计算表达式3,语 句,计算表达式1,=false,public class Test ,public static void main(String args) ,long result = 0;,long f = 1;,for (int i = 1; i = 10; i+) ,f = f * i;,result += f;,System.out.println(result= + result);,计算 result = 1!+2!+10!,课,堂 练,习,编写程序,用一个 for 循环计算1+3+5+7 + + 99的值,并输出计算结果,。(OddSum.java),while & do while 语句,while 语句为如下形式:,while(逻辑表达式) 语句; ; ,执行过程,先判断逻辑表达式的值。若=true.则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止,while 语句为如下形式:,do 语句; ; while(逻辑表达式);,执行过程,先执行语句,再判断逻辑表达式的值,若为true,再执行语句,否则结束循环。,表达式值,语 句,结束,While 语句,语 句,表达式值,结束,do-While 语句,TestWhile.java,变量的作用域,内部,Scope.java,break & Continue 语句,break,语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环;例如:,public class Test ,public static void main(String,args,) ,int,stop = 4;,for (,int,i = 1; i = 10; i+) ,/,当,i,等于,stop,时,退出循环,if (i = stop) break;,System.out.println,( i= + i);,i = 1,i = 2,i = 3,continue,语句用在循环语句体中,用于终止某次循环过程,跳过循环体中,continue,语句下面未执行的循环,开始下一次循环过程;例如:,public class Test ,public static void main(String,args,) ,int,skip = 4;,for (,int,i = 1; i = 5; i+) ,/,当,i,等于,skip,时,跳过当次循环,if (i = skip) continue;,System.out.println(i,= + i);,i = 1,i = 2,i = 3,i = 5,循环语句举例,/ 输出1100内前5个可以被3整除的数。,public class Test ,public static void main(String args),int num = 0, i = 1;,while (i = 100) ,if (i % 3 = 0) ,System.out.print(i + );,num+;,if (num = 5) ,break;,i+;,/输出101200内的质数,,public class Test ,public static void main(String,args) ,for (int i=101; i200; i+=2) ,boolean f = true;,for (int j = 2; j 2 ),public class Test public static void main(String arg) System.out.println(f(5); public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); ,课堂练习试用非递归调用的方法解决上面,Fibonacci,数列问题,Fab.java,main,f5,f4,f3,f2,f1,f2,f3,f2,f1,public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); ,1,2,3,n1,n2,result,Ex5,汉诺塔,(编程思想训练),游戏的目标,把,A,杆上的金盘全部移到,C,杆上,并仍按原有顺序叠好。,条件,每次只能移动一个盘,,并且在每次移动都不允许大盘移到小盘之上。,编程要求,利用递归调用技术给出,N,个盘从,A,杆移到,C,杆的移动过程。,Ex5,汉诺塔,HANOI(N,A,B,C),1.,以,C,盘为临时杆,从,A,杆将,1,至,N-1,号盘移至,B,杆。,HANOI(N-1,A,C,B),2.,将,A,杆中剩下的第,N,号盘移至,C,杆。,3.,以,A,杆为临时杆,从,B,杆将,1,至,N-1,号盘移至,C,杆。,HANOI(N-1,B,A,C),汉诺塔参考代码,1.以C盘为临时杆,从A杆将1 至N-1 号盘移至B 杆。,2.将A杆中剩下的第N 号盘移至C杆。,3.以A杆为临时杆,从B杆将1 至N-1 号盘移至C 杆。,public class Test,public static void main(String args),Test t = new Test();,t.hanoi(3,A,B,C);,public void hanoi(int num,char a,char b,char c),if(num = 0) return;,this.hanoi(num-1,a,c,b);,System.out.println(move plate p + num + from + a + to + c);,this.hanoi(num-1,b,a,c);,hanoi(3,a,b,c),hanoi(2,a,c,b),move 3 from a to c,hanoi(2,b,a,c),hanoi(1,a,c,b),move 2 from a to c,hanoi(1,b,a,c),hanoi(1,a,c,b),move 2 from a to c,hanoi(1,b,a,c),hanoi(0,a,c,b),move 1 from a to c,hanoi(0,b,a,c),hanoi(0,a,c,b),move 1 from a to c,hanoi(0,b,a,c),hanoi(0,a,c,b),move 1 from a to c,hanoi(0,b,a,c),hanoi(0,a,c,b),move 1 from a to c,hanoi(0,b,a,c),if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,if,(num = 0),return,;,Classpath,程序格式的视频是否看了,别使用UtralEdit运行java,递归,想象成又拷贝了一份方法,当前方法由于没有确定的值,尚没有返回,UltraEdit有没有高亮显示?,第三章:J2SE 之 面向对象编程,本章内容,编程语言的发展,面向过程的设计思想,面向对象的设计思想,对象和类的概念,类之间的关系,对象和引用,Java 类的定义,构造函数,对象的创建和使用,this 关键字,static 关键字,package 和 import 语句,访问控制,类的继承,方法的重写,Object类,对象转型,多态,抽象类,接口,编程语言的发展,机器语言直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串组成;可以被计算机直接执行。,汇编语言用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。,高级语言屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。,面向对象的语言与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。,语言的发展是朝着人类更容易理解的方向前进,面向对象编程语言三大特征,隐藏/封装,继承,多态,面向过程的设计思想和面向对象的设计思想,我要去新疆,面向过程,我开车,我挂档,我踩油门,我过河北,我过陕西,面向对象,我命令车去新疆,车怎么去不关我事,信息封装在车这个类的内部,我不用去了解车整个开动的过程,对象和类的概念,对象用计算机语言对问题域中事物的描述,对象通过,“属性(attribute)”和“方法(method)”,来分别对应事物所具有的静态属性和动态属性。,类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。,类可以看成一类对象的模板,对象可以看成该类的一个具体实例。,职员A,类,对象,实例化,抽象,类(对象)之间的关系 之 关联关系,继承关系(一般和特殊),XX是一种XX,聚合关系(整体和部分),聚集,组合,实现关系,多 态,Java与面向对象,对象是Java程序的核心,在Java程序中“万事万物皆对象”。,类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。,类可以看成是静态属性(成员变量)和动态属性(方法)的封装体。,J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。,我们的语言:成员变量属性 方法函数,为什么用对象?,面向对象的编程一组对象互相,配合,通过,沟通,完成特定功能,所有的paradigm都是对现实问题的抽象,汇编是对机器语言的抽象,面向过程的语言是对汇编的抽象,对象更加符合对于现实问题的抽象,对象都有对外服务的接口,通过继承可以复用,对象隐藏内部服务的实现,通过聚合可以复用,面向对象更加容易使我们达到这些年来苦苦追求的境界,Reusability、Extensibility、Maintainablity维护和替换更加方便、.,组件比对象更高的层次上的抽象(二进制级别),EJB、Web Service、CORBA、COM、.,Java 类的定义,成员变量的声明,方法的声明,/用 class 关键字定义一个类,例如:,class Person ,/成员变量定义,private int id; private int age = 20;,/方法定义,public int getAge() return age; public void setAge(int i) age = i; public int getId() return id;,类的定义主要由两方面组成,成员变量,和,方法,。,声明成员变量,的格式为:, type =,defaultValue, ;,例如:,private,int,id; private,int,age = 20;,声明方,法的格式为:, () ,例如:,public,int,getAge,() return age;,成员变量,成员变量可以使用Java语言中,任何,一种数据类型(包括,基本类型,和,引用类型,)。,在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(右图),成员变量的作用范围为整个类体。,成员变量类型,取值,byte,0,short,0,int,0,long,0L,char,u0000,float,0.0F,double,0.0D,boolean,false,所有引用类型,null,Java面向对象基本概念 引用,Java,语言中除基本类型之外的变量类型都称之为引用类型。,Java,中的对象是通过引用对其操作的。例如:,/*,* 声明了一个String类型的引用变量,,* 但并没有使它指向一个对象,*/,String s;,/*,* 使用new语句创建了一个String,* 类型的对象并用s指向它,* 以后可以通过s完成对其的操作,*/,s = new String(hello world!);,String s;,null,s = new String(hello world!);,0x3a123b, , , ,0x3a123b,堆内存,如何在内存中区分类和对象?,类是静态的概念,代码区,对象是,new,出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。,方 法(复习),Java,的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,声明格式:,修饰符,1,修饰符,2 ,返回值类型 方法名,(,形式参数列表,),Java,语句;, ,形式参数:在方法被调用时用于接收外界输入的数据。,实参:调用方法时实际传给方法的数据。,返回值:方法在执行完毕后返还给调用它的环境的数据。,返回值类型:事先约定的返回值的数据类型,,如无返回值,必须给出返回值类型,void,。,Java,语言中使用下述形式调用方法:,对象名,.,方法名,(,实参列表,),实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配,,return,语句终止方法的运行并指定要返回的数据。,Java,中进行函数调用中传递参数时,遵循值传递的原则:,基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身,。,TestMethod.java,类和对象的关系,类C的代码,(code seg),(heap seg),class C ,int i;,int j;,.main. ,C c1 = new C();,C c2 = new C();,xx,xx,xx,xx,c1,c2,c1.i,c1.j,c2.i,c2.j,对象的创建和使用,必须使用 new 关键字创建对象。,Person person=,new,Person ();,使用对象(引用),.,成员变量来引用对象的成员变量。,person.age,使用对象(引用),.,方法(参数列表)来调用对象的方法。,person. setAge(23),同一类的每个对象有不同的成员变量存储空间。,同一类的每个对象共享该类的方法。,构造方法,使用,new +,构造方法 创建一个新的对象。,构造方法是定义在,Java,类中的一个用来初始化对象的方法。,构造方法与类同名且没有返回值。,例如:,Person,类的构造函数:,public class Person ,int id;,int age;,Person(int n,int i),id = n;,age = i;,构造方法的调用,public class Test ,public static void main(String args) ,Person tom = new Person(1,25);,Person john = new Person(2,27);,创建对象时,使用构造方法初始化对象的成员变量。,堆内存,*,1,25,2,27,#,tom,john,内存分析 (1),public class Test ,public static void main(String args) ,Person p1 = new Person(1, 22);,Person p2 = new Person(2, 23);,int age = 25;,p1.setAge(age);,p2.setAge(age+);,堆内存,*,*,22,1,23,2,p1,p2,栈内存,TestPerson1/TestPerson.java,内存分析 (2),public class Test ,public static void main(String args) ,Person p1 = new Person(1, 22);,Person p2 = new Person(2, 23);,int age = 25;,p1.setAge(age);,p2.setAge(age+);,堆内存,*,*,25,22,1,23,2,p1,p2,age,栈内存,code seg,java Test,Test.class,Java.exe JVM,1:load the Test.class,classpath,2:verify the class code,3:execute,main(),execute main,args,allocate spaces for args,Person p1 = new Person(1, 25),Person.class,1:find the Person.class,classpath,2:lo
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!