资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,基础培训,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,基础培训,#,第一章 Java语言概述,Java,基础知识培训,主要内容提要,Java,基础培训,Java程序的开发环境,Java程序相关问题,Java语言的主要特性,Java语言的发展历史,Java程序的开发过程,Java语言的发展历史,Java,基础培训,Internet迅猛发展Java语言正式问世被美国著名杂志PC Magazine,评为1995年十大优秀科技产品之一,James Gosling领导的Green小组开发了面向数字家电的Oak语言,推出了Java2平台。性能上有所提高,而且对Java的基本模式进行了完善,并提供了更为丰富的API,1991,1995,1998,Java2 的版本划分,Java,基础培训,Java 2,J2ME,J2SE,J2EE,Java语言的主要特性,Java,基础培训,平台无关性,简单性,面向对象,分布式、动态性、,可靠性、安全性,多线程,Java程序相关问题Java虚拟机,Java虚拟机,在真实机器中用软件模拟实现的一种抽象的机器。(Java虚拟机规范),Java虚拟机主要由五个部分组成:指令系统、寄存器、栈、存储区、碎片回收区,解释和执行Java程序编译后产生的字节码,Java,基础培训,Java程序相关问题Java API,Java API是Java系统提供的预先定义好的软件组件的集合,它们提供了许多可供程序员调用的常用功能,丰富的API为程序员提供了极大的方便,但也是学习的难点,要学会使用Java API手册(,The Java2 Platform API Specification,),Application),是独立完整的程序,在命令行调用独立的解释器软件即可运行,主类必须有main方法,这也是程序的入口,Java小程序,Java Applet是指在客户端运行的Java小程序,一般来说客户端是指用户所使用的浏览器,Java Servlet是在服务器端执行的Java小程序,为了能够支持Servlet的运行,服务器端必须安装包含Java虚拟机的服务器软件,这种能够支持服务端小程序的服务器一般被称为应用服务器,Java,基础培训,Java开发环境,JDK/J2SDK(Java Developer Kit),JDK1.02,JDK1.1.x,JDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5),Java集成开发环境(IDE),NetBeans,JBuilder,Eclipse,JCreator,Forte for Java,Visual J+,WSAD,Java,基础培训,JDK的安装与设置,从,本的JDK(本课程采用J2SDK1.3以上版本),在Windows平台上运行安装程序,以安装JDK,设置PATH(文件路径)参数。由于JDK提供的实用程序都在安装目录下的子目录bin下,为了能在任何目录下直接使用文件名调用这些程序,必须设置操作系统的文件路径参数,Java,基础培训,环境设置,在Windows环境下,为了快速进入指定目录的命令行窗口,可在注册表中增加项目:,HKEY_CLASSES_ROOTDirectoryshell进入命令行command,默认值设为:,cmd /k cd%1,Java,基础培训,JDK的目录结构,Java,基础培训,bin目录中包含了所有JDK5.0提供的实用程序,demo目录中包含了JDK5.0自带的实例程序,inculde目录中包含了一些支持Java native方法的CC+头文件,jre目录中包含了Java运行环境所需的所有文件,这个目录中所包含的java运行环境是JDK私有的,它只为JDK的实用程序提供支持,lib目录中包含了Java开发环境所需的库文件,它们以jar文件的形式保存,sample目录中包含的是体现JDK5.0新特性的一些例程,JDK实用程序简介,javac:Java编译器,将Java源代码编译为字节码;,java:Java解释器,用来解释执行Java程序的字节码文件;,appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器;,javadoc:根据Java源代码及其说明语句生成的HTML文档;,jdb:Java调试器,可以逐行地执行程序、设置断点和检查变量;,javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件;,javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。,Java,基础培训,Java程序的开发过程,编辑源代码,编译源代码文件,运行程序,Java,基础培训,Java程序的开发过程编辑源代码,一般情况下,我们可以使用系统平台下的任何文本编辑器进行源代码的编辑,在Windows平台下常用的是Window系统自带的“记事本”程序或“写字板”程序,Java源码大小写敏感,Java源码文件的扩展名:.java,Java源程序文件也不能随意命名,其文件名必须与程序中主类的类名完全相同,包括大小写在内,Java,基础培训,public class MyFirstJavaApp,public static void main(String args),System.out.println(“This is My First Java Application!”);,Java程序的开发过程编译源代码,使用JDK实用程序javac对源代码文件进行编译,C:MyJavajavac MyFirstJavaApp.java,如果系统提示符再次出现并且没有任何消息产生,那么编译便成功了,如果有系统报错消息产生,则表示程序编译出错,程序员必须阅读报错信息,并根据这些信息对程序进行修改,程序成功编译后,在与源代码文件同一目录下会生成一个新的文件,其文件名与源代码文件名相同,扩展名为“.class”。这个文件就是源代码文件编译产生的程序字节码文件,MyFirstJava.class,Java,基础培训,Java程序的开发过程运行程序,要执行一个Java程序非常简单,只需在字节码文件所在目录下输入下列命令就可以了:,java 字节码文件名,Java,基础培训,Question?,第2章 面向对象的编程概念,主要内容提要,Java,基础培训,什么是接口,什么是继承,什么是类,什么是消息,什么是对象,面向对象 vs.面向过程,面向对象(OOP)Object-Oriented Programming,用类class封装数据以及与数据相关的操作,用类的继承性来实现类的重用性,多态性,面向“对象”,由对象提供服务,面向过程(POP)Procedure-Oriented Programming,以功能为组织单元,通过数据结构来描述具体的问题,数据在功能(函数)之间以参数的形式被传送,Java,基础培训,现实世界中的对象,现实世界是由对象构成的,现实世界中任何实体都可以看作是对象,现实世界中的对象有两个共同特征:,状态,行为,Java,基础培训,软件对象(Object),软件对象是现实世界对象的抽象,软件对象同样具有状态和行为,定义:对象是变量和相关方法的软件组合,Java,基础培训,变量,方法,现实对象,软件对象,Java,基础培训,方法,叫,咬,吃,是否饿了:否,名字:小Q,颜色:黑,封装(Encapsulation),封装性体现了面向对象程序设计的一个特性,将方法和数据组织在一起,隐藏其具体实现而对外体现出公共的接口,模块化,隐藏信息,Java,基础培训,变量,方法,消息(Message),复杂的行为必须通过对象之间的交互来实现,软件对象与其它对象进行交互与通讯是通过互发消息来实现的,Java,基础培训,对象B,对象 A,消息,消息的组成,消息的目的对象,要执行的方法的名称,方法所需参数,Java,基础培训,你的车,你,换档(低档),消息的性质,同一对象可接收不同形式的多个消息,产生不同的响应,同一个消息可以发给不同的对象,所做出的响应可以截然不同,发送方不需要知道接受方如何对请求予以响应的,Java,基础培训,类(Class),定义,:类是蓝图或原型,它定义了所有某种类的对象的共有的变量和方法,类是具有共同属性和行为的对象的抽象与集合,Java,基础培训,私有的实现细节,公共API,实例(Instance),定义:,特定类所描述的一个,具体,对象,Java,基础培训,对象、类与实体的关系,Java,基础培训,对象,类,计算机逻辑的实现,映射,计算机世界,实例化,抽象,实体,抽象数据类,现实世界,概念世界,抽象,继承(Inheritance),广义地说,继承是指能够直接获得已有的性质和特性,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制。,Java,基础培训,共性部分,继承部分,个性部分,父类,子类,单重继承与多重继承,单重继承:一个子类只有一个唯一确定的父类,单重继承所构成的类的关系结构是一棵树,多重继承:一个子类可以有多个不同的父类,多重继承所构成的类的关系结构是一个格,Java语言仅支持单重继承,Java,基础培训,继承的作用,使软件系统具有开放性,更好地进行抽象与分类,实现代码的复用,提高可维护性,Java,基础培训,类型(Type),在面向数值的编程中,类型通常用作数据的表示。在Java这样的强类型语言中,在编译期,每一个变量和表达式都有一个类型与之相对应,Java中的类型:基本类型、类、接口,Java,基础培训,接口(Interface),接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是,抽象方法,(即没有实现的方法)。,接口中所定义的方法由实现(implement)该接口的类来实现,一个类可以同时实现多个接口,接口机制使Java的面向对象编程变得更加灵活。解决了单重继承带来的问题,接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。,Java,基础培训,面向对象的示例,本例中包含很多对象:点、窗口、颜色、点击事件,代码:,ClickMeApp.java,ClickMe.java,,,Spot.java,Java,基础培训,Spot类,Java,基础培训,public class Spot,/instance variables,private int size;,public int x,y;,/constructor,public Spot(),x=-1;,y=-1;,size=1;,/methods for access to the size instance variable,public void setSize(int newSize),if(newSize=0),size=newSize;,public int getSize(),return size;,Spot对象,Java,基础培训,private Spot spot=null;,.,spot=new Spot();,示例中的消息,Java,基础培训,g2d.setColor(Color.WHITE);,g2d.fillRect(0,0,getWidth()-1,getHeight()-1);,示例中的继承和接口,Java,基础培训,public class ClickMe,extends JComponent,implements MouseListener,.,public class ClickMe extends JComponent,implements MouseListener,.,/Methods required by the MouseListener interface.,public void mousePressed(MouseEvent event),if(spot=null),spot=new Spot();,spot.setSize(RADIUS);,spot.x=event.getX();spot.y=event.getY();repaint();,public void mouseClicked(MouseEvent event),public void mouseReleased(MouseEvent event),public void mouseEntered(MouseEvent event),public void mouseExited(MouseEvent event),欢迎提问,Question!,第三章 Java语言基础,变量(Variable),对象将它的状态存储在变量中,定义:变量是一个由标识符命名的数据项,变量名必须是一个合法的,标识符,-一个以字母开头的无限制的Unicode字符序列。,变量的声明:,类型 名称=初始值,;,int i;,double pi=3.1415926;,String name;,Java,基础培训,数据类型,每个变量都必须有一个数据类型.一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。,Java编程语言有两大类数据类型:,原始类型(primitive),引用类(reference),Java,基础培训,Java的数据类型,Java,基础培训,Java type system,primitive,reference,char,numeric,boolean,class,interface,array,integer,floating,-,point,byte,short,int,long,float,double,Java type system,primitive,reference,char,numeric,boolean,class,interface,array,integer,floating,-,point,byte,short,int,long,float,double,原始类型,原始类型变量包含单个值,其大小和格式与它的类型匹配:数字、字符或布尔值。,Java语言没有unsigned类型,0 xFFFF和0 xFF谁大?,Java语言必须强制类型转换,float f=0.1;,boolean b=1;,Java,基础培训,引用类型,数组,类和接口就是引用数据类型.与原始类型变量的值不同的是,,引用类型变量的值是对应变量代表的一个值或一组值的引用(也就是其地址),在其他语言里引用被称为指针或者内存地址。Java不支持显示地使用地址,而是使用变量的名称代替。,Java,基础培训,变量的引用,通过变量名引用变量的值,简单名称:由单个标识符组成的名称,限定名称:通过类名或对象名引用,该,类或对象中的成员变量,System.out.println(i+spot.x);,Java,基础培训,作用范围,变量的作用范围是可以通过简单名称引用该变量的程序区域,作用范围也决定了系统为该变量创建和释放内存的时间,Java,基础培训,例子,Java,基础培训,int i=10;,if(i 0),int i=20;,System.out.println(“The value of i=”+i);,System.out.println(“The value of i=”+i);,最终变量,你可以在任意范围里将一个变量定义为最终变量(final),最终变量的值一经初始化就不能改变,类似于C语言中的常量(const),Java,基础培训,final int aFinalVar=0;,final int blankfinal;,.,blankfinal=0;,操作符、表达式、语句和块,Java,基础培训,自学!,第四章 对象基础和简单数据对象,主要内容,Java,基础培训,数组,数字,字符和字符串,对象的生存周期,对象的生命周期,Java,基础培训,CreateObjectDeom,Java,基础培训,public class CreateObjectDemo,public static void main(String args),/创建一个Point对象和两个Rectangle对象,Point origin_one=new Point(23,94);,Rectangle rect_one=new Rectangle(origin_one,100,200);,Rectangle rect_two=new Rectangle(50,100);,/显示rect_one的宽、高以及面积,System.out.println(Width of rect_one:+rect_one.width);,System.out.println(Height of rect_one:+rect_one.height);,System.out.println(Area of rect_one:+rect_one.area();,rect_two.origin=origin_one;,/,设置rect_two的位置,/显示rect_two的位置,System.out.println(X Position of rect_two:+rect_two.origin.x);,System.out.println(Y Position of rect_two:+rect_two.origin.y);,/移动rect_two并且显示它的新位置,rect_two.move(40,72);,System.out.println(X Position of rect_two:+rect_two.origin.x);,System.out.println(Y Position of rect_two:+rect_two.origin.y);,对象的创建,Java,基础培训,类型名 引用变量=new 构造器(构造器的参数),声明一个变量来引用对象,为了声明一个变量来引用对象,你可以使用类或者接口的名字作为变量的类型,声明并没有创建新对象,。在对该引用变量赋值前,该引用为空,称为空引用(null),Java,基础培训,类型名 引用变量=new 构造器(构造器的参数),Point origin_one,实例化对象,new,操作符通过为新对象分配内存来实例化一个类,new操作符需要一个后缀参数,即,构造器,的一个调用,new操作符返回一个对它所创建对象的引用,通常该引用被赋值给具有适当类型的引用变量,如果new操作符返回的引用没有被赋给任何变量,那么当new操作符所在的语句执行完后,将无法访问该对象,Java,基础培训,类型名 引用变量=new 构造器(构造器的参数),初始化对象,构造器(Constructor):,是一个用来创建对象的特殊方法,用来初始化对象的属性。,构造器的名字与类名相同,构造器没有返回值,构造器所包含的语句用来对所创建的对象进行初始化,没有参数的构造器称为“无参构造器”,每个Java类都,至少有一个,构造器,如果该类没有显式地声明任何构造器,系统会默认地为该类提供一个不包含任何语句的无参构造器,Java,基础培训,类型名 引用变量=new 构造器(构造器的参数),对象创建的实例,Java,基础培训,public class Point,public int x=0;,public int y=0;,public Point(int x,int y),this.x=x;,this.y=y;,Point origin_one=new Point(23,94);,问 题,Java,基础培训,Point origin_one=new Point(23,94);,Point origin_two=new Point(23,94);,oringin_one=oringin_two,?,Point origin_one=new Point(23,94);,Point origin_two=origin_two;,oringin_one=oringin_two,?,构造器的重载(Overload),一个类可以包含多个构造器,这种情况成为,构造器的重载,同一个类中的多个构造器通过参数的数目及类型的不同来区分,Java,基础培训,public class Rectangle,public int width=0;,public int height=0;,public Point origin;,public Rectangle(),origin=new Point(0,0);,public Rectangle(Point p),origin=p;,public Rectangle(int w,int h),this(new Point(0,0),w,h);,public Rectangle(Point p,int w,int h),origin=p;,width=w;,height=h;,.,对象的使用,对象的使用有两种方式,操作或者检查它的变量,调用它的方法,要使用对象的实例成员,首先需要得到该对象的引用,Java,基础培训,变量,方法,实例成员与类成员,实例成员包括实例变量与实例方法,实例成员依赖于实例存在,同一个类的不同实例都拥有一份实例变量的拷贝,对某个实例的实例变量的操作不影响到其它实例,实例变量遵循对象的生命周期,随着对象的创建而创建,随着对象的消亡而消亡,必须通过实例的引用来调用实例方法,类成员包括类变量与类方法,类成员不依赖于实例存在,同一个类的不同实例共享同一个类变量,对类变量的改变会影响到所有实例,类变量的生存期不依赖于对象,其它类可以不用通过创建该类的实例,直接通过类名访问它们。同样,类方法也可以直接通过类名访问。,Java,基础培训,实例成员与类成员,Java,基础培训,class ABCD,char data;,static int share_data;,class Demo,ABCD a,b,c,d;,/实例化,实例变量的引用,简单名称,当实例变量处在作用域内(即对象的类的代码内)的时候,限定名称,objectReference.variableName,当实例变量处在作用域外时使用限定名称,Java,基础培训,System.out.println(Width of rect_one:+,rect_one.width,);,System.out.println(Height of rect_one:+,rect_one.height,);,int height=new,Rectangle().height;,关于变量访问,的说明,建议不要通过其它对象或类直接操作对象的变量,可能引起无效值,理想情况下,类会提供一些方法,其他对象可以通过他们检查或修改变量,确保值有效,而且如果变量的类型和名称发生了变化,不会影响它的使用者,在某些情况下,可以允许对对象变量的直接访问,以使类更小更简单,也可使变量适用于更广泛范围;,JAVA编程语言提供了一个访问控制机制,通过这种机制,类可以决定那些其它的类可以直接访问它的变量(第五章中介绍)。,Java,基础培训,调用对象的方法,使用限定名称来调用对象的方法,objectReference.methodName(argumentList);,或者,objectReference.methodName();,Java,基础培训,System.out.println(Area of rect_one:+,rect_one.area(),);,rect_two.move(40,72);,int areaOfRectangle=,new Rectangle(100,50).area();,关于方法调用,方法被声明为public,就可以被任何其它的类所访问。有时,类需要限制对它的方法的访问,类可以使用与控制变量访问相同的机制来对它的方法进行访问控制(第五章中介绍),Java,基础培训,对象的清除,JAVA运行时环境在当对象不再被使用的时候清除它们,这个过程就是所谓的“垃圾收集”(garbage collection),Java的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把,没有引用的对象,作为垃圾收集起来并释放。,垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。,Java,基础培训,无用对象的判定,当某个对象不在被任何引用变量引用时,该对象是无用对象,将被清除。一般有如下两种情况:,Java,基础培训,引用变量超出了作用域,StringBuffer s=newStringBuffer(“thisisatest”);,/超出对象作用域,引用变量引用了其它对象或引用了空对象,StringBuffer s=new StringBuffer(“test1”);,s=new StringBuffer(“test2”);/引用了新的对象,s=null;/引用为空,finalize()方法,在对对象进行垃圾收集前,Java运行时系统会自动调用对象的finalize()方法来释放系统资源。,某些情况下,程序员可能需要实现该方法来释放不由垃圾收集器所控制的资源。但这种情况非常少见,finalize()方法是在Object中有缺省实现,在用户自定义的类中,它可以被覆盖,但一般在最后要调用父类的finalize()方法来清除对象所使用的所有资源,Java,基础培训,问题一,下列程序的运行结果?,Java,基础培训,public class SomethingIsWrong,public static void main(String args),Rectangle myRect;,myRect.width=40;,myRect.height=50;,System.out.println(myRects area is +myRect.area();,问题二,现有一个Point和Rectangle对象,代码执行后有多少引用指向它们?有没有对象需要垃圾收集?,Java,基础培训,Point point=new Point(2,4);,Rectangle rectangle=new Rectangle(point,20,20);,point=null;,字符和字符串,Java API提供了三个处理字符数据的类:,Character,:这个类的实例可以容纳单一的字符数值。该类还定义了一些简洁的方法来操作或者检查单一字符数据。,String,:这个类用于处理由多个字符组成的不可变数据。,StringBuffer,:这个类用于存储和操作由多个字符组成的可变数据。,Java,基础培训,字符类(Character),字符类的对象包含单个字符值,当需要使用对象时,可以用字符对象替代原始的char类型的变量,Java,基础培训,字符类,构造器和方法,Character(char)Character类唯一的构造器,它创建一个字符对象,其中包含由参数提供的值,一旦创建了Character对象,它包含的值就不能改变。,compareTo(Character)这个实例方法比较两个字符对象包含的值,这个方法返回一个整数值,表示当前对象中的值是大于、等于还是小于参数所包含的值,Java,基础培训,字符类,构造器和方法,equals(Object)这个实例方法比较当前对象包含的值与参数对象包含的值,如果两个对象包含的值相等,那么这个方法返回true,toString()这个实例方法将此对象转换为字符串,charValue()这个实例方法以原始char值的形式返回此字符对象包含的值,isUpperCase()这个实例方法判断一个原始char值是否是大写字母,Java,基础培训,字符类例程,Java,基础培训,public class CharacterDemo,public static void main(String args),Character a=new Character(a);,Character a2=new Character(a);,Character b=new Character(b);,int difference=pareTo(b);,if(difference=0),System.out.println(a is equal to b.);,else if(difference 0),System.out.println(a is greater than b.);,System.out.println(a is+(a.equals(a2)?equal:not equal)+to a2.);,System.out.println(The character +a.toString()+is,+(Character.isUpperCase(a.charValue()?upper:lower)+case.);,程序的输出:,a is less than b.,a is equal to a2.,The character a is lowercase,.,字符类类方法,Java,基础培训,问题,Java,基础培训,Character a=new Character(a);,Character b=new Character(a);,下列boolean表达式的值是true还是false?,(1)pareTo(b)=0,(2)a.equals(b),(3)a=b,字符串和字符串缓冲区,Java平台提供两个类String和StringBuffer,它们用于存储和操作字符串由多个字符组成的字符数据。,String类用于其值不能改变的字符串;,StringBuffer类用于被修改的字符串,通常用来动态的构造字符数据。,字符串是常量,比字符串缓冲区更高效,而且字符串可以被共享。,Java,基础培训,字符串(String),使用字符串常量时,需要创建String对象,和其它对象不同,String对象可以通过简单赋值语句创建:,String name=“Petter”;,此外,也可根据String类的构造函数创建String对象:,String name=new String(“Petter”);,对于程序任何位置出现的双引号标记的字符串,系统都会自动创建一个String对象。,可通过String对象的方法对字符串进行操作,Java,基础培训,字符串构造器,Java,基础培训,字符串的不可变性?,String类用于其值不能改变的字符串,观察下列程序:,Java,基础培训,public class StringTest,public static void main(String args),String s=abc;,s=s+“defg;,System.out.println(s);,程序运行结果是abc还是abcdefg?,字符串的不可变性?,Java,基础培训,abc,s,defg,“defg”,s+”defg”,abcdefg,s=s+”defg”,字符串缓冲区(StringBuffer),String对象表示的是不可更改的字符串对象,如果需要修改String对象所表示的内容,必须重新创建一个对象:,String str=“Petter”;,str=str+“,当修改操作频繁,或字符串的值很大时,会额外分配大量内存,因此,Java语言引入了一个StringBuffer类,用来表示内容可以扩充和修改字符串对象,Java,基础培训,StringBuffer构造器,必须使用new操作符创建字符串缓冲区,Java,基础培训,String s=Dot saw I was Tod;,StringBuffer dest=new StringBuffer(s);,访问器方法,用于获取关于对象的信息的方法被称为访问器方法。,字符串和字符串缓冲区都可以使用的一个访问器方法就是length方法。,length方法返回字符串和字符串缓冲区中包含的字符数。,Java,基础培训,String palindrome=Dot saw I was Tod;,int len=palindrome.length();,容量,在StringBuffer类中还有一个capacity()方法,它返回分配给这个字符串缓冲区的容量,而不是使用量。使用量会改变,但是容量始终是不变的。,Java,基础培训,通过索引得到字符,charAt()访问器方法,通过索引从字符串或者字符串缓冲区得到字符,索引值从零开始。,Java,基础培训,String anotherPalindrome=Niagara.O roar again!;,char aChar=anotherPalindrome.charAt(9);,substring方法,如果要从字符串或者字符串缓冲区得到多个字符,可以使用substring方法。,String substring(int),String substring(int,int),Java,基础培训,String anotherPalindrome=Niagara.O roar again!;,String roar=anotherPalindrome.substring(11,15);,search,string类提供两个访问器方法,返回特定的字符或者子字符串在字符串中的位置。,indexOf()方法从字符串的开头查找;,lastindexOf()方法从字符串的末尾查找;,stringBuffer类不支持indexOf()和lastindexOf()方法。,Java,基础培训,search,Java,基础培训,search example,public class Filename,private String fullPath;,private char pathSeparator,extensionSeparator;,public Filename(String str,char sep,char ext),fullPath=str;,pathSeparator=sep;,extensionSeparator=ext;,public String extension(),int dot=fullPath.lastIndexOf(extensionSeparator);,return fullPath.substring(dot+1);,public String filename(),int dot=fullPath.lastIndexOf(extensionSeparator);,int sep=fullPath.lastIndexOf(pathSeparator);,return fullPath.substring(sep+1,dot);,public String path(),int sep=fullPath.lastIndexOf(pathSeparator);,return fullPath.substring(0,sep);,Java,基础培训,search example,Java,基础培训,public class FilenameDemo,public static void main(String args),Filename myHomePage=new Filename(/home/mem/index.html,/,.);,System.out.println(Extension=+myHomePage.extension();,System.out.println(Filename=+myHomePage.filename();,System.out.println(Path=+
展开阅读全文