SUN----JAVA补充知识

上传人:sx****84 文档编号:243040147 上传时间:2024-09-14 格式:PPT 页数:74 大小:254.50KB
返回 下载 相关 举报
SUN----JAVA补充知识_第1页
第1页 / 共74页
SUN----JAVA补充知识_第2页
第2页 / 共74页
SUN----JAVA补充知识_第3页
第3页 / 共74页
点击查看更多>>
资源描述
单击以编辑母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Java基本类,1,Java API,Java的应用程序接口(API)以包的形式来组织,每个包提供了大量的类和接口。程序员利用这些标准类库中的类来高效地编写解决实际问题的程序,如果掌握了API就可以避免许多重复编码的工作,会调用现成的模块就行了。了解和掌握这些包常用的类的常用方法对初学者是必须的,学会如何查看分析API,以便将来边用边查更为重要。,学习途径:读书、查看API、阅读他人程序,加以努力实践。,2,字符串类,因为字符串很重要,Java将字符串与通常的字符数组区别开,以减少错误。,Java.lang,包中有两个处理字符串的类,String,和,StringBuffer.,String,类描述,固定长度的字符串,其内容不变。,StringBuffer,类描述,长度可变,内容可变的字符串,3,(1)String类常量,String s=Hello World;,String p=Hello World;,注意:常量 Hello World 本身就是一个对象,如果后面还用到相同的字符串常量,系统会使用同一个串。如对于上面的两个串,下面的输出为true;,System.out.println (s=p);,4,(2)String的构造方法,(a) public String() /构造一个空的字符串对象,(b) public String(char value),/将参数字符数组复制为字符串,(c) public String(char value, int offset, int count),/* 将字符数组中下标offset开始的count个字 符组成字符串对象*/,(d) String(String value),/用字符串初始化String类对象,(e)String(StringBuffer buffer),/将StringBuffer对象转换为字符串对象,5,String使用示例:,String s=new String() ; /生成一个空串,char chars1=a,b,c;,String s1=new String(chars1); s1=abc,char chars2=a,b,c,d,e;,String s2=new String(chars2,0,3); s2=abc,byte ascii1=97,98,99;,byte ascii2=97,98,99,100,101;,String s3=new String(ascii1); s3=abc,String s4=new String(ascii2,0,3); s4=abc,6,字符串比较:,1. public boolean equals(Object anObject),/字符串内容相同则返回true,Object类的equals方法(测试是否指向同一个对象),在String类中重写了该方法,变为测试内容是否相同,2. public boolean equalsIgnoreCase(String anotherString),/与equals()方法类似,但忽略大小写,3. public int compareTo(String anotherString),按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。,4. public int compareToIgnoreCase(String str),7,例:,boolean b1=Java.equals(java); /b1=false,boolean b2=Java.equalsIgnoreCase(java); /b2=true,int i1=Java.compareTo(java); /i1=-32,int i2=Java.compareToIgnoreCase(java); /i2=0,8,字符串连接:,String concat(String str) /字符串拼接,例:to.concat(get).concat(her),返回 together,String s1=Hello!;,String s2=s1.concat(World);/s2=Hello!World,String s=Hello!+World;,9,查找单个字符:,public int indexOf(int ch),public int indexOf(int ch, int fromIndex),public int lastIndexOf(int ch),public int lastIndexOf(int ch,int fromIndex),例:,String s=She is a student;,int i1=s.indexOf(s); /i1=5,int i2=s.indexOf(s,7); /i2=9,int i3=s.lastIndexOf(s); /i3=9,int i4=s.lastIndexOf(s,7); /i4=5,10,查找字符串:,public int indexOf(String str),/*返回子串在当前字符串中出现的位置。未找到则为-1。,public int indexOf(String str, int fromIndex),public int lastIndexOf(String str),public int lastIndexOf(String str,int fromIndex),例:,String s=I love Java,I use Java!;,int i1=s.indexOf(Java);,/i1=7,int i2=s.indexOf(Java,9);,/i2=18,int i3=s.lastIndexOf(Java);,/i3=18,int i4=s.lastIndexOf(Java,9);,/i4=7,11,大、小写转换:,public String toLowerCase(),public String toUpperCase(),例:,String s1=Java.toLowerCase();,/s1=java,String s2=Java.toUpperCase();,/s2=JAVA,12,子串:,public String substring(int beginIndex),public String substring(int beginIndex,int endIndex),例:,unhappy.substring(2),/返回字符串happy,Harbison.substring(3),/返回字符串bison,emptiness.substring(9,) /返回字符串,hamburger.substring(4,8),/返回字符串urge,smiles.substring(1, 5),/返回字符串mile,13,String的一些常用方法:,(提供了字符串处理功能,需要全面熟悉掌握!),(a) char charAt(int index),/返回字符串中下标为index处的字符。,/ index范围 0 到 length() - 1,(b) int length(),/*该方法返回串的长度,注意数组的元素个数用其属性length得到,不是方法*/,String s=Hello,Java World;,int i=s.length();/i=16,14,(c),public static String valueOf(),/*该方法被重载,以将参数中的基本数据类型数据、字符数组或对象转换成相应的字符串,并返回*/,还有方法:,replace 替换,,trim 去前后空格,等其它方法,15,StringBuffer类,StringBuffer 类对象的内容是可以动态改变,而且带有缓冲区。,StringBuffer类的每个对象都是可以扩充和修改的字符串变量。对StringBuffer类对象的内容可以进行追加、插入、删除、替换等操作。,16,(1)StringBuffer的构造方法,(a) public StringBuffer(),/构造一个空的字符串缓冲区,长度为16个字符空间,(b) Public StringBuffer(int length),/构造一个长度为length的字符串缓冲区,(c) public StringBuffer(String str),/构造缓冲区并初始化其内容为str,并附加16个 /字符的空间备用,17,(2)StringBuffer的常用方法:,除了有与String类似的方法length,charAt等还有下面几类方法:,(a)添加操作:,public StringBuffer.append(参数类型 参数名),/*一批同名的重载方法,将参数转换为字符串类型,再追加到当前字符串缓冲区的尾部*/,18,例:,StringBuffer sbs=new StringBuffer(1+2=);,int nThree=3;,sbs.append(nThree);,System.out.println(sbs.toString();,注意:,println方法不接受StringBuffer类型的参数,若希望在屏幕上显示出来,必须先调用toString方法把它转换成字符串常量。,19,(b) 插入操作,public StringBuffer.insert(int 插入位置,参数类型 参数名);,/*一批重载方法, 可以向字符串缓冲区插入逻辑变量,字符,字符数组,数值型量、字符串和Object类型的对象等的字符串表达*/,(c) 删除字符,delete(int start, int end) /删除字符串缓冲区中起始到结束位置的字符,deleteCharAt(int index) /删除一个字符,20,(d) String toString(),/将字符串缓冲区内容转换为字符串String类型,例如:,StringBuffer sb=new StringBuffer(Hello World);,String s;,s=sb.toString(),(e) int capacity() /*返回字符串缓冲区当前的容量,注意:length()返回的是内容的长度*/,21,例:,StringBuffer myStrBuff = new StringBuffer();,myStrBuff.append(Hello, Guys!);,System.out.println(myStrBuff.toString();,myStrBuff.insert(6,30);,System.out.println(myStrBuff.toString();,结果:,Hello, Guys!,Hello,30 Guys!,22,StringBuffer,的用来修改字符串的方法:,public void setCharAt(int index, char ch);,例:,StringBuffer myStrBuff = new StringBuffer(goat);,System.out.println(myStrBuff.toString();,myStrBuff.setCharAt(0, c );,System.out.println(myStrBuff.toString();,结果:,goat,coat,23,Object类,Object,类是,Java,程序中所有类的直接或间,接父类,也是类库中所有类的父类。所有类都,是从,Object,类派生出来的,所以,Object,类包含,了所有,Java,类的公有属性。,24,(1)equals方法:,public boolean equals(Object obj),比较两个对象的,内存地址,是否相同(不是对象的值),相同则返回true,否则返回false。,由于equals方法是属于Object类的,而Object类是所有类的父类,所以在任何类里都可以直接使用这个方法。,25,调用,equals,方法的语法如下:,object1.equals,(,object2,),默认,equals,方法的定义如下:,public boolean equals(Object obj),return(this=obj);,26,在Object类中equals方法与运算符“=”是等效的。,但两者有如下的区别:,equals方法只能用于,引用类型,,而= =可用于所有类型(包括简单数据类型),27,class Value ,int i;,public class EqualsMethod2 ,public static void main(String args) ,Value v1 = new Value();,Value v2 = new Value();,v1.i = v2.i = 100;,System.out.println(v1.equals(v2);, /:,如果输出语句前加一句:,v1=v2; 结果如何呢?,28,如比较两个字符时,使用关系运算符= =,而比较两个字符串则需要使用equals方法。,class A,int a = 1;,public class aa,public static void main (String args),A obj1=new A();,A obj2=new A();,String s1,s2,s3=abc,s4=abc;,s1=new String(abc);,s2=new String(abc);,System.out.println(s1=s2,是,+(s1=s2);,System.out.println(s1.equals(s2),是,+(s1.equals(s2);,29,System.out.println(s1=s3,是,+(s1=s3);,System.out.println(s1.equals(s3),是,+(s1.equals(s3);,System.out.println(s3=s4,是,+(s3=s4);,System.out.println(s3.equals(s4),是,+(s3.equals(s4);,System.out.println(s2=s3,是,+(s2=s3);,System.out.println(s2.equals(s3),是,+(s2.equals(s3);,System.out.println(obj1=obj2,是,+(obj1=obj2);,System.out.println(obj1.equals(obj2),是,+(obj1.equals(obj2);,obj1=obj2;,System.out.println(obj1=obj2,后,obj1=obj2,是,+(obj1=obj2);,System.out.println(obj1=obj2,后,obj1.equals(obj2),是,+(obj1.equals(obj2);,30,输出结果为:,s1=s2,是,false,s1.equals(s2),是,true,s1=s3,是,false,s1.equals(s3),是,true,s3=s4,是,true,s3.equals(s4),是,true,s2=s3,是,false,s2.equals(s3),是,true,obj1=obj2,是,false,obj1.equals(obj2),是,false,obj1=obj2,后,obj1=obj2,是,true,obj1=obj2,后,obj1.equals(obj2),是,true,31,由输出结果可以看出,,对于字符串变量来说:,“=”,运算符用来比较两个变量本身的值,即两个对象在内存中的首地址,而,“equals()“,方法则用来比较两个字符串中所包含的内容是否相同。,(有程序可知,s3,、,s4,这两个由字符串常量生成的变量在内存中存放的地址是相同的。),对于非字符串变量来说:,=,和,equals(),方法则都用来比较两个类类型的变量是否指向同一对象,即比较其在堆内存中的首地址。,32,非常重要的是:Java的及,包装类,等对equals方法进行了重写,比较的是对象的值,而不是对象的内存地址了,如上面的例子就是关于String的。,33,注意:,如果equals方法比较的两个对象的类型不同,虽然值一样但结果仍然是false。,例如:,Long m =new Long(21L);,Integer n=new Integer(21);,System.out.println(n.equals(m);,/输出false,34,总结,“=”及Object 的“equals()” 方法,注意以下几点区别:,1) 引用类型比较引用;基本类型比较值。,2) equals()方法只能比较引用类型,“= =”既可比较引用也可比较基本类型。,35,3) 当用equals()方法进行比较时,,对类、Date及封装类来说,,是比较类型及内容。而且先比较类型, 如果数据类型不同则为false,不论值是否相同。,类型相同再比较值是否相同。,4) 用“= =”进行比较时,符号两边的数据类型必须一致(可相互转换的基本类型除外),,否则编译出错。,5) 我们自己定义类的时候往往也要重写equals() 方法,36,(2),toString,方法,toString,方法,用来返回对象的类型和内存地址信息。,即将调用此toString,方法的对象的内容转换为字符串并返回其内容。,默认情况下,返回的字符串由该对象所属的类名、,at,符号,“,”,和代表该对象的无符号十六进制数组成。,37,class Cat,private int catNo;,Cat(int n),catNo=n;,38,class Dog,private int dogNo;,Dog(int n),dogNo=n;,public String toString(),return +dogNo;,39,public class MyToString,public static void main(String args),Cat c=new Cat(1);,System.out.println(c.toString();,System.out.println(c);,Dog d=new Dog(1);,System.out.println(d.toString();,System.out.println(d);,System.out.println(Dog No.+d);,40,输出结果为:,Cat126b249,Cat126b249,1,1,Dog No.1,41,(3)getClass()方法,返回的是调用该方法的对象所属类的名称,值是Class类型。,(4)对象运算符instanceof,测试一个指定的对象是否是指定类或它的子类的实例,若是,则返回true,否则返回false,(5)getName()方法,返回一个类的名称,返回值是String类型。,(6)getSuperclass()方法,获得父类,42,/Person.java,public class Person,static int count=0;,protected String name;,protected int age;,public Person(String n1,int a1),name=n1;,age=a1;,this.count+;,public String toString(),return this.name+.+this.age;,43,public void display(),Class cla=this.getClass();,System.out.print(本类为+cla+;);,System.out.println(本类名+,this.getClass().getName(),);,cla=this.getClass().getSuperclass();,System.out.print(父类为+cla+;);,System.out.println(“父类名,+,this.getClass().getSuperclass().getName(),);,System.out.print(Person.count=+this.count+ );,System.out.print(Student.count=+Student.count+ );,Object obj=this;,if(obj instanceof Student,),System.out.println(obj.toString()+是Student类对象。);,else,if(obj instanceof Person,),System.out.println(obj.toString()+是Person类对象。);,44,class Student extends Person,static int count=0;,protected String dept;,protected Student(String n1,int a1,String d1),super(n1,a1);,dept=d1;,this.count+;,public String toString(),return super.toString()+,+dept;,public void display(),super.display();,System.out.print(super.count=+super.count);,System.out.println(;this.count=+this.count);,45,public static void main(String args),Person per=new Person(王永涛,23);,per.display();,Student stu=new Student(张小三,22,计算机系);,stu.display();,本类为class Person;本类名Person,父类为class java.lang.Object;父类名java.lang.Object,Person.count=1 Student.count=0 王永涛.23是Person类对象。,本类为class Student;本类名Student,父类为class Person;父类名Person,Person.count=2 Student.count=1 张小三.22,计算机系是Student类对象。,super.count=2;this.count=1,46,clone()方法,(1)返回值为Object类的一个对象。若用Object类的子类对象引用变量指向返回对象,必须使用强制类型转换成该子类的引用。,(2)被克隆对象所属的class类型必须实现了java.lang.Cloneable接口。,(3)Object类的clone()方法只做浅层复制,即复制类的实例字段(包括实例成员变量和常量字段),且只能复制基本数据类型和对象的引用变量,不复制引用所指的对象。,47,/ObjectClone.java:,class A implements Cloneable, int i;,public A(int ii), i=ii;,public Object clone(), Object o=null;,try,o=super.clone();,catch(CloneNotSupportedException e),System.out.println(A类对象不能克隆!);,return o;,public boolean equals(Object obj), if(obj instanceof A),return (A)obj).i=i;,return false;,public String toString(), return +i; ,48,class B implements Cloneable,A a;,public B(int i),a=new A(i);,/浅拷贝,public Object clone(),Object o=null;,try,o=super.clone();,catch(CloneNotSupportedException e),System.out.println(B类对象不能克隆!);,return o;,49,class C implements Cloneable, A a;,public C(int i), a=new A(i); ,/深拷贝,public Object clone(),C o=null;,try,o=(C)super.clone();,catch(CloneNotSupportedException e),System.out.println(C类对象不能克隆!);,o.a=(A)o.a.clone();,return o;,class D,50,public class ObjectClone,public static void main(String args),A a1=new A(1);,A a2=(A)a1.clone();,System.out.println(a2是a1的克隆);,if(a1=a2),System.out.println(a1、a2指向同一对象!);,else,System.out.println(a1、a2指向不同对象!);,if(a1.equals(a2),System.out.println(a1、a2中的内容相等!);,else,System.out.println(a1、a2中的内容不相等!);,51,B b1=new B(1);,B b2=(B)b1.clone();,System.out.println(b2是b1的克隆);,if(b1=b2),System.out.println(b1、b2指向同一对象!);,else,System.out.println(b1、b2指向不同对象!);,if(b1.a =b2.a),System.out.println(b1.a、b2.a指向同一对象!);,else,System.out.println(b1.a、b2.a指向不同对象!);,b2.a.i=10;,System.out.println(b1.a.i=+b1.a.i);,System.out.println(b2.a.i=+b2.a.i);,52,C c1=new C(1);,C c2=(C)c1.clone();,System.out.println(c2是c1的克隆);,if(c1=c2),System.out.println(c1、c2指向同一对象!);,else,System.out.println(c1、c2指向不同对象!);,if(c1.a =c2.a),System.out.println(c1.a、 c2.a指向同一对象!);,else,System.out.println(c1.a、 c2.a指向不同对象!);,c1.a.i=10;,System.out.println(c1.a.i=+c1.a.i);,System.out.println(c2.a.i=+c2.a.i);,D d=new D();,if(d instanceof Cloneable),System.out.println(D类对象可以克隆!);,else,System.out.println(D类对象不能克隆!);,53,54,Math类,Math类用来完成一些常用的数学运算,它提供若干实现不同标准数学函数的方法。这些方法都是static的类方法,,所以在使用时不需要创建Math类的对象,而直接用类名做前缀,就可以很方便地调用这些方法。,int i = 9, j = 7, k ;,k = Math . max( i, j ) ;,int i = (int )(Math.random( ) * 10)+1;,55,56,Random类,Random类是一个伪随机数产生器,随机数是按照某种算法产生的。用相同的种子产生的随机数序列是固定的。,该类的构造方法有两个:,public Random(),/*用当前时间来作种子创建随机数序列产生器,可以减少随机数序列相同的可能性*/,public Random(longseed),/*,用程序员设定的种子创建随机数序列产生器*/,57,常用的方法举例:,public int nextInt(intn) /*从随机数序列产生器的序列中返回一个值在0到n之间的数。*/,例:,new Random().nextInt(100) /*从随机数序列产生器的序列返回一个0到100之间的int型整数*/,注意方法返回的是基本数据类型,58,import java.util.*;,class RandomInts ,static Random r = new Random();,public static void compareRand() ,int a = r.nextInt(); /A,int b = r.nextInt(); /B,System.out.println(a = + a + , b = + b);,if(a b),System.out.println(a b),System.out.println(a b);,else,System.out.println(a = b);,59,public static void main(String args) ,for(int i = 0; i 25; i+),compareRand();,如果将,A,、,B,两行改为:,int a = r.nextInt(100);,int b = r.nextInt(100);,就可以将结果限制在0-100之间。,60,System类,一些与系统相关的重要方法和变量收集到了一个统一类System中。该类中的所有成员都是静态的。,System类的常用方法:,(1),void arraycopy(Objectsrc, intsrcPos, Objectdest,intdestPos, intlength),功能是数组复制,将数组src下标srcPos开始的length个元素复制到数组dest中,从下标destPost开始存放。,61,(2) long currentTimeMillis(),返回自1970年1月1日0点0分0秒起至当前时钟的以毫秒为单位的时间。,(3) void exit(intstatus),结束程序运行,返回系统。System.exit(0); 表示正常结束。参数给非零的值表示发生各种异常情况。,(4) Properties getProperties(),获得当前虚拟机的所有环境属性变量和值。,(5) String getProperty(String key),获得当前虚拟机的属性key的值。,62,键相关值的描述,java.versionJava 运行时环境版本,java.vendorJava 运行时环境供应商,java.vendor.urlJava 供应商的 URL,java.homeJava 安装目录,java.vm.specification.versionJava 虚拟机规范版本java.vm.specification.vendorJava 虚拟机规范供应商,java.vm.specification.nameJava 虚拟机规范名称,java.vm.versionJava 虚拟机实现版本,java.vm.vendorJava 虚拟机实现供应商,java.vm.nameJava 虚拟机实现名称,63,java.specification.versionJava 运行时环境规范版本java.specification.vendorJava 运行时环境规范供应商,java.specification.nameJava 运行时环境规范名称,java.class.versionJava 类格式版本号,java.class.pathJava 类路径,java.library.path加载库时搜索的路径列表java.io.tmpdir默认的临时文件路径,piler要使用的 JIT 编译器的名称java.ext.dirs一个或多个扩展目录的路径,64,os.name操作系统的名称,os.arch操作系统的架构,os.version操作系统的版本,文件分隔符(在 UNIX 系统中是“/”),path.separator路径分隔符(在 UNIX 系统中是“:”),line.separator行分隔符(在 UNIX 系统中是“/n”),user.name用户的账户名称,user.home用户的主目录,user.dir用户的当前工作目录,65,Date与Calendar、DateFormat类,Java,中最早的日期类是,Date,类,但它没有考虑国际化,并且起始日期是,Unix,诞生的时间:,1970,年,1,月,1,日。,Java 1.1,中增加了一个新的日期类,Calendar,类,及其子类,GregorianCalendar,类。可以表示公历的任何日期,包括公元前和公元后。,抽象类,DateFormat,及其唯一子类,SimpleDateFormat,进行日期格式化转换。,66,Date和Calendar类在java.util包中,,DateFormat和SimpleDateFormat类在java.text包中。,Date、GregorianCalendar、Calendar类的月份从0开始。,取得当前日期时间:,Date d=Calendar.getInstance().getTime();,Thu Aug 30 16:01:06 CST 2007,67,利用一批重载的set方法来设置日期:,public void,set,(intfield, intvalue),public final void,set,(intyear,int month, int date),例:,Calendar yd=Calendar.getInstance();,yd.set(2008,0,1);,yd.set(yd.YEAR,2008);,yd.set(yd.MONTH,0);,yd.set(yd.DAY_OF_MONTH,1);,68,例如:设置春节的日期:,Calendar c=Calendar.getInstance();,c.set(2008,0,1);,然后再将日期对象,c,的值转换为以毫秒为单位的值:,long springFestival=c.getTimeInMillis();,通过此长整数减去以毫秒为单位的当前时间值就可以得到目前时间距2006年春节还有多少毫秒,再换算成天,则可以算出距春节的天数来。,69,编写一个倒计时程序,计算距,2008,年 元旦(,1,月,1,日)还有多少天。,import java.util.*;,class HowManyDays,public static void main(String args),long now=System.currentTimeMillis();,Calendar yd=Calendar.getInstance();,yd.set(2008,0,1);,System.out.println(距离2008元旦还有 +(yd.getTimeInMillis() -now)/1000/3600/24+天!);,70,编写打印日历的程序,示例如下:,71,import java.util.*;,class Test,public static void showCalendar(),int year,month,day, max_days;,Calendar cc=Calendar.getInstance();,year=cc.get(cc.YEAR);,month=cc.get(cc.MONTH);,System.out.println (month+1+, +year+n);,72,day=1;,cc.set(year,month,day);,max_days=cc.getActualMaximum(Calendar.DAY_OF_MONTH);,System.out.println (Sun Mon Tue Wed Thu Fri Sat);,for (int j=1; jcc.get(Calendar.DAY_OF_WEEK); j+),System.out.print ( );,for(int i=0;imax_days;i+) ,if (day10) System.out.print ( );,System.out.print (day+ );,73,if (cc.get(cc.DAY_OF_WEEK)=7),System.out.println ();,day+;,cc.set(year,month,day);,System.out.println ();,System.out.println ();,public static void main(String args),showCalendar();,74,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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