欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《Java就业培训教程》张孝祥.ppt

    • 资源ID:6525836       资源大小:1.98MB        全文页数:110页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《Java就业培训教程》张孝祥.ppt

    张孝祥IT课堂Java就业培训教程,主讲老师:,第一讲,Java的特点Java程序开发的基本过程学习Java的前提知识,“一次编译,到处运行”的原理,“一次编译,到处运行”的原理,JVM虚拟机类似Windows操作系统 Java虚拟机可以是硬件,也可以是软件 Java跨平台的原因 Java兼顾解释性与编译性语言的特点,Java具有三个方面的内涵,是一种编程语言是一套开发工具是一个运行环境,学Java编程首先要掌握开发工具和运行环境的搭建与使用。详细介绍开发工具和运行环境,才能让初学者在学习时迅速上手。,Java的开发环境的搭建(1),什么是JDK(Java Development Kit)开发工具,Javac及基础核心类运行环境,java及基础核心类按Java的应用环境划分J2EE(Java2PlatformEnterpriseEdition)J2SE(Java2PlatformStandEdition)J2ME(Java2PlatformMicroEdition)下载网址 http:/,Java的开发环境的搭建(2),JDK的安装及目录结构使用Javac与java中碰到的路径问题直接运行Java进行检查运行Java verbose进行检查,环境变量的介绍,什么是环境变量 查看环境变量的两种方式如何设置系统环境变量 path环境变量的作用%path%的意义如何解决使用java命令中的问题,体验Java编程的过程,编辑工具的简要介绍Test.java源文件的解释用Javac编译源文件(可能碰到的问题)用Java 运行编译后的字节码文件,Classpath的设置,实际操作讲解classpath的作用Java解释器是如何处理当前目录的如何解决当前目录的问题配置classpath的几个注意事项,JVM(虚拟机)的运行过程,代码的装入 代码的校验 代码的执行,JVM(虚拟机)的运行过程,反编译工具,JAD FrontEnd,第二讲,java 编程基础,Java的基本语法(1),java代码的位置 java是严格区分大小写的 java是一种自由格式的语言 代码分为结构定义语句和功能执行语句功能执行语句的最后必须用分号结束 java程序有三种注释方式,java中的标识符 java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是关键字。,合法的标识符:indentifierusernameuser_name_userName$username,非法的标识符:class98.3Hello World,Java的基本语法(2),java的关键字,注:java 无sizeof,goto,const 关键字,但不能用goto const作为变量名,java中的常量(1),整型常量十进制(12),十六进制(0 x12),八进制(012)长整型常量13L单精度浮点数 5.1f,.4f,2e3f,0f双精度浮点数 5.1,.4,2e-3,0d布尔常量 true和false,java中的常量(2),字符常量 a,8,u0027 r表示接受键盘输入,相当于按下了回车键;n是换行;t是制表符,相当于table键;b是退格键,相当于Back Space;是单引号,而“是双引号;是一个斜杠“”。字符串常量“Hello World“,”123”,Welcome nXXXnull常量 null常量只有一个值,用null表示,表示对象的引用为空,变量的概念与作用,变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据。int x=0,y;y=x+3;执行这两条语句的过程中,内存分配及变化情况。X在被取值前必须被初始化。,java的变量类型,数据类型,基本数据类型,引用数据类型,数值型,字符型(char),布尔型(boolean),整数类型(byte,short,int,long),浮点类型(float,double),类(class),接口(interface),数组,变量字节大小及有效取值范围,byte占用一个字节,数字大小为-2727-1short占用两个字节,数字大小为-215215-1 int占用四个字节,数字大小为-231231-1 long占用八个字节,数字大小为-263263-1 float占用四个字节,数字大小为1.4E-453.4E+38,-1.4E-45-3.4E+38。用二进制的指数形式表示一个浮点数的格式,如:101*22,101*2-3double占用八个字节,数字大小为4.9E-3241.7E+308,-4.9E-324-1.7E+308。char占两个字节,数字大小为0216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。Boolean占一个字节,其取值只有两个,true和false。,浮点数在内存中的表示方式,在JDK文档中查找Float.intBitsToFloat的说明打印出最大数和最小数及它们的二进制格式打印出无穷大与NaN及它们的二进制格式分析0 x50000000所对应的浮点数,类型转化,自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)类型转换的原理 及什么时候要用 强制类型转换表达式的数据类型自动提升所有的byte型、short型和char的值将被提升到int型。如果一个操作数是long型,计算结果就是long型;如果一个操作数是float型,计算结果就是float型;如果一个操作数是double型,计算结果就是double型。分析 System.out.println(a+1)与 System.out.println(“”+a+1)的区别。,变量的生命周期与作用域,变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。public class TestScope public static void main(String args)int x=12;int q=96;/x和q都可用 int x=3;/错误的定义,Java中不允许有这种嵌套定义 System.out.println(x is+x);System.out.println(q is+q);q=x;/*错误的行,只有x可用,q 超出了作用域范围*/System.out.println(x is+x);,函数,函数(子程序)的概念与作用。定义一个函数的格式 编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.)程序代码 return 返回值;其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况,函数的调用,函数调用的格式在函数中使用return提前返回函数调用的过程分析,函数的重载,函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。如:public class Testpublic static void main(String args)int isum;double fsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5);public static int add(int x,int y)reutrn x+y;public static int add(int x,int y,int z)return x+y+z;public static double add(double x,double y)return x+y;,java中的运算符,运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符,算术运算符,算术运算符的注意问题,“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。int x=3510;x=x/1000*1000;实际运行结果是3000,想想为什么?,算术运算符的应用技巧,思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上:其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。思考题2:假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。答案:int x=0;while(true)x=(x+1)%10;,赋值运算符,注1:在JAVA里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此类推。,比较运算符,注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“=”不能误写成“=”,切记!切记!,逻辑运算符,注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&”的左边为false,则将不会计算其右边的表达式。“|”和“|”的区别与“&”和“&”的区别一样。,“&”和“&”的区别分析,public class TestAnd public static void main(String args)int x=0;int y=3;if(x!=0 上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错,位运算符,任何信息在计算机中都是以二进制的形式保存的,&,|,除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。只有参加运算的两位都为1,&运算的结果才为1,否则就为0。只有参加运算的两位都为0,|运算的结果才为0,否则就为1。只有参加运算的两位不同,运算的结果才为1,否则就为0。我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:右移 无符号右移,“”和“”区别的实例分析,public class ShiftTestpublic static void main(String args)int x=0 x80000000;int y=0 x80000000;x=x1;y=y1;System.out.println(“0 x800000001=”+Integer.toHexString(x);System.out.println(“0 x800000001=”+Integer.toHexString(y);运行结果如下:0 x800000001=c00000000 x800000001=40000000十六进制与二进的对比0 x8000000016=1000,0000,0000,0000,0000,0000,0000,000020 xc000000016=1100,0000,0000,0000,0000,0000,0000,00002 0 x4000000016=0100,0000,0000,0000,0000,0000,0000,00002,移位运算的注意事项及小技巧,移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字。对于long型整数移位时ab,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1 x;,运算符的优先级,我们可以使用括号改变运算赋的优先级,分析int a=2;int b=a+3*a;语句的执行过程 与int a=2;int b=(a+3)*a;语句的执行过程的区别。,如何避免多个运算符带来的问题,对于int a=2;int b=a+3*a+;这样的语句,b最终等于多少呢?作者试验得到的结果是8。对于int a=2;int b=(a+)+3*a;这样的语句,b最终等于多少呢?作者试验得到的结果是11。,如何避免多个运算符带来的问题,与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。,程序的流程控制,顺序结构选择结构循环结构顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。,if语句的选择结构,if(表达式)语句;if(表达式)语句1;else 语句2;if(表达式1)语句1;else if(表达式2)语句2;else if(表达式2)语句3;else 语句n;每个语句可以是使用 组成的复合语句变量 布尔表达式?语句1:语句2;If语句还可以嵌套使用if(表达式1)if(表达式2)语句1;else语句2;esle if(表达式2)语句3;else语句4;嵌套时最好使用确定层次界限,举例说明,switch语句的选择结构,Switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n;default语句是可选的,它接受除上面接受值的其他值,通俗的讲,就是谁也不要的都归它。case后面可以跟多个语句,这些语句可以不用大括号括起来。switch语句判断条件可接受int,byte,char,short型,不可以接受其他类型一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件,while循环语句,While(表达式)语句;int x=1;while(x3)System.out.println(x=+x);x+;,脚下留心:while表达式的括号后面一定不要加“;”,do-while循环语句,do 语句while(表达式);public class TestDopublic static void main(String args)int x=3;while(x=0)System.out.println(ok1);x+;int y=3;do System.out.println(ok2);y+;while(y=0);,do-while循环语句,编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读到字符q时,程序结束。提示:调用();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么样的情况下,用do-while循环语句比while循环语句方便。,for循环语句,for(表达式1;表达式2;表达式3)语句for(int x=1;x=10)break;System.out.println(x=+x);x+;,break语句,break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,dofor或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:st:while(true)while(true)break st;,continue语句,continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。用continue语句的打印出 0到10之间的所有奇数的程序例子。for(int i=0;i10;i+)if(i%2=0)continue;System.out.println(i);,数组,为什么有数组?堆内存和栈内存int x;x=new int100;x=null;的内存状态变化情况,数组,静态数组int ia=1,2,3,4;int ia=new int3,4,5;int a5;/声明数组时,不能指定其长度,编译时将出错 使用数组时要注意的问题 空指针异常如何得到数组长度 数组越界异常,多维数组,如何理解多维数组,类似我们的棋盘。java 中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。定义一个多维数组int xx;xx=new int3;xx0=new int3;xx1=new int2;,多维数组,多维数组中元素的引用方式,如:x12。规则矩阵数组可以在一条语句中产生,如:int xx=new int23;多维数组的静态初始化,如:int xx=3,2,7,1,5,6;,与数组操作相关的函数,使用System.arraycopy()函数拷贝数组 用Arrays.sort 来排序数组,第三讲,面向对象(上),理解面向对象的概念,面向过程 在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口操作的函数与窗口本身的定义没有任何关系,如HideWindow,MoveWindow,MinimizeWindow,这些函数都需要接受一个代表要被操作的窗口参数,是一种谓语与宾语的关系。面向对象 定义窗口时,除了要指定在面向过程中规定的那些属性,如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作,如隐藏,移动,最小化等。这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的,这是一种主语与谓语的关系。面向对象的三大特征封装(Encapsulation)继承(Inheritance)多态(Polymorphism),类与对象,类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。,如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。,类的定义,class Personint age;void shout()System.out.println(“oh,my god!I am“+age);age是类的属性,也叫类成员变量。shout是方法也叫类的成员函数。shout方法可以直接访问同一个类中的age变量,如果一个方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量。,对象的产生,Person p1=new Person();执行完后的内存状态,对象的产生,当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。,对象的使用,创建新的对象之后,我们就可以使用“对象名.对象成员”的格式,来访问对象的成员(包括属性和方法)class TestPersonpublic static void main(String args)Person p1=new Person();Person p2=new Person();p1.age=-30;p1.shout();p2.shout();上面程序运行的内存布局如下图,对象的生命周期,对象的比较,“=”运算符与equals()方法的区别怎样比较两个数组对象的内容是否相等,匿名对象,我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象,如:new Person().shout();如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。我们经常将匿名对象作为实参传递给一个函数调用。,实现类的封装性,如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。,实现类的封装性,为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。,类的封装所带来的优点,隐藏类的实现细节;让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;,编程试验:我们在一个类中定义了一个private类型的成员变量,接着产生了这个类的两个实例对象,请问第一个对象的方法中,能否以“第二个对象.成员”的格式访问第二个对象中的那个private成员变量?,构造函数的定义与作用,构造方法的特征它具有与类相同的名称;它不含返回值;它不能在方法中用return语句返回一个值注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。,构造方法的重载,和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new 类名(参数列表);重载构造方法可以完成不同初始化的操作,如:p3=new Person(“Tom”,18);语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量p3。,p3=new Person(“Tom”,18)的内存状态变化过程分析,构造方法的一些细节,在java每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。声明构造方法,如无特殊需要,应使用public关键字,在我们前面例子中,可以使用private访问修饰符吗?,this是什么?,如果func2方法被调用,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。在func2内部能引用别的对象,同样也能引用func2所属的那个对象。在func2中,自己所属的那个对象的引用名称是什么呢?this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。,this引用句柄的存放位置,每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系如图,this引用句柄的应用,一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的:让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。,垃圾回收过程分析,c+中的析构方法 java中的finalize()方法 System.gc的作用,函数的参数传递基本数据类型的参数传递,函数的参数传递引用数据类型的参数传递,函数的参数传递引用参数传递的一个问题分析,static静态变量,当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。编写使用静态变量统计一个类产生的实例对象的个数的程序,static静态方法,在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。静态方法不能以任何方式引用this和super关键字(super关键字在下一章讲解)。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中会多次碰到。,静态代码块,一个类中可以使用不包含在任何方法体中的静态代码块(static block),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。,单态设计模式,设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就想是经典的棋谱,不同的棋局,我们用不同的棋谱,免得我们自己再去思考和摸索。失败为成功之母,但是要以大量的时间和精力为代价,如果有成功经验可借鉴,没有人再愿意去甘冒失败的风险,我们没有理由不去了解和掌握设计模式,这也是Java开发者提高自身素质的一个很好选择。使用设计模式也许会制约你去创新,不过真正有意义的创新只能出自少数天才,即使你就是那个天才,虽不必因循守旧,但也不可能完全不去了解和借鉴前人的成功经验。,单态设计模式,所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。,理解main方法的语法,由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数。,内部类在类中直接定义的内部类,嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是嵌套类的成员却不能被嵌套它的类直接访问。在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个外部类对象的引用。,内部类在类中直接定义的内部类,如果用static修饰一个内部类,这个类就相当于是一个外部定义的类,所以static的内部类中可声明static成员,但是,非static的内部类中的成员是不能声明为static的。static的内部类不能再使用外层封装类的非static的成员变量,这个道理不难想象!所以static嵌套类很少使用。,内部类 在类中直接定义的内部类,如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的方式来明确指定我们真正要访问的变量。public class Outer private int size;public class Inner private int size;public void doStuff(int size)size+;/引用的是doStuff函数的形参 this.size+;/引用的是Inner类中的成员变量+;/引用的Outer类中的成员变量,内部类如何被外部引用,class Outer private int size=10;public class Inner public void doStuff()System.out.println(+size);public class TestInner public static void main(String args)Outer outer=new Outer();Outer.Inner inner=outer.new Inner();inner.doStuff();,内部类在方法中定义的内部类,嵌套类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。例如,在方法中,或甚至在for循环体内部,都可以定义嵌套类。在方法中定义的内部类只能访问方法中的final类型的局部变量,用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。,使用Java的文档注释,import java.io.*;/*Title:engineer类*Description:通过engineer类来说明java中的文档注释*Copyright:(c)2003*Company:锐智科技咨询中心*author 张孝祥*version 1.00*/public class engineerpublic String Engineer_name;/*这是engineer对象的构造函数*param name engineer的名字*/public engineer(String name)/*这是repairing方法的说明*param sum 需要修理的机器总数*param alltime 需要修理的总时间*return Repairing的数量*/public int repairing(int sum,int alltime),使用Java的文档注释,文档注释以“/*”开始,以“*/”标志结束,相应的信息和批注所对应的位置很重要!类的说明应在类定义之前,方法的说明应在方法的定义之前。批注参数来标记一些特殊的属性及其相应的说明。authorversionparam return,第四讲,面向对象(下),类的继承,通过继承可以简化类的定义。Java只支持单继承,不允许多重继承。可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表)调用父类的构造方法。如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。,子类对象的实例化过程,分配成员变量的存储空间并进行默认的初始化,就是用new关键字产生对象后,对类中的成员变量按第三章的表3.1中的对应关系对对象中的成员变量进行初始化赋值。绑定构造方法参数,就是new Person(实际参数列表)中所传递进的参数赋值给构造方法中的形式参数变量。如有this()调用,则调用相应的重载构造方法(被调用的重载构造方法又从步骤2开始执行这些流程),被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到步骤6执行显式或隐式追溯调用父类的构造方法(一直到Object类为止,Object是所有Java类的最顶层父类,在本章后面部分有详细讲解),父类的构造方法又从步骤2开始对父类执行这些流程,父类的构造方法的执行流程结束后,回到当前构造方法,当前构造方法继续往下执行。进行实例变量的显式初始化操作,也就是执行在定义成员变量时就对其进行赋值的语句,如:执行当前构造方法的方法体中的程序代码,子类对象的实例化过程,思考:1).为什么super()和this()调用语句不能同时在一个构造函数中出现?2).为什么super()或this()调用语句只能作为构造函数中的第一句出现?,覆盖父类的方法,覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。如果在子类中想调用父类中的那个被覆盖的方法,我们可以用super.方法的格式。覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限。,final关键字,在Java中声明类、属性和方法时,可使用关键字final来修饰。final标记的类不能被继承。final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期

    注意事项

    本文(《Java就业培训教程》张孝祥.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开