收藏 分销(赏)

Java学习重点笔记.pdf

上传人:曲**** 文档编号:230021 上传时间:2023-03-20 格式:PDF 页数:54 大小:2.12MB
下载 相关 举报
Java学习重点笔记.pdf_第1页
第1页 / 共54页
Java学习重点笔记.pdf_第2页
第2页 / 共54页
Java学习重点笔记.pdf_第3页
第3页 / 共54页
Java学习重点笔记.pdf_第4页
第4页 / 共54页
Java学习重点笔记.pdf_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、一、常用的DOS命令dir(directory):列出当前目录下的文件以及文件夹md(make directory):仓建目录rd(remove directory):删除目录cd(change directory):进入指定目录cd.:退回到上一级目录cd:退回到根目录exit:退出dos命令行二、第一个程序什么是JDKJRE下载及安装jdk步骤:1).将Java代码编写到扩展名为Java得文件中:.需要确保原文件是.JAVA为扩展名.代码:class HelloWorldpublic static void main(String args)System.out.println(/Hell

2、o world);2).通过javac编译.需要设置环境变量.Javac HelloWorld.java3).通过 java 命令运行 class 文件:jjava HelloWorld三、注释单行注释格式:注释文字多行注释格式:/*注释文字*/文档注释四、数据类型数值型一整数类型(byte,short,int,long)数据类型基本 数据类型,浮点类型(float,double)字符型(char)引用布尔型(boolean)类(class)f-F字符串在这里数据类型 n 接口(interface)L数组()Java的整型常量默认为int型,声明long型常量须后加 T 或L int i=13

3、;long count=14L;Java的浮点型默认为double型,声明float常量须后加甲或F double st=12.23;float ss=12.32F;boolean类型数据只允许取值true和false,不可以。或非0的整数替代true和false boolean flag=true;自动的类型转换float f2=12;强制类型转换int i2=(int)12.32;有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算long result=12+12L;byte,short,char之间不会相互转换,他们三者在计算时首先转换为int

4、类型 byte bl=12;byte b2=13;int b3=bl+b2;而不是 byte b3字符串不能直接转换为基本类型boolean类型不可以转换为其它的数据类型类型占用存储空间表数范围byte1字书-128 127short2字书-215 215.1int4字书,231 231-1long8字书-263 263.1五、运算符1)如果对负数取模,可以把模数负号忽略不记,如:5%-2=lo但被模数是负数就不能忽略 符号;2)对于除号“/,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分 而舍弃小数部分;3)“+”除字符串相加功能外,还能把非字符串转换成 字符串.例如:Sys

5、tem,out.printin(5+5=+5+5);4)赋值运算符(=):将等号右边表达式的结果赋值给等号左边的变量;5)算术运算符(+-*/%+):i+;等同于i=i+1;i+;i类型占用存储空间表数范围单精度float4字节-3.403E38-3.403E38双精度double8字节-1.798E308-1.798E308符符 算算-1运运.一,系辑+1关逻+6)7)!=):主要用于进行比较运算,返回结果为布尔型“+”除字符串相加功能外,还能把非字符串转换成 字符串.例如:System.out.println(5+5=+5+5);打印结果是 5+5=55;扩展赋值运算符:+=,-=,*=,

6、/=,%=z+=100;即 z=z+100;位运算是直接对二进制进行运算“&”和“&”的区另小单&时,左边无论真假,右边都进行运算;双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。和“|”的区别同理,双或时,左边为真,右边不参与运算。异或(”与或(I)的不同之处是:对于人而言,当左右都为true时一,结果为false。8)三元运算符格式:(条件表达式)?表达式1:表达式2;如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2;六、规则1、若一个java文件中有public声明的类,则java文件的文件名必须和类名一致。2、在一个java

7、文件中可以声明多个类,但只能有一个public类型的类。七、IFpublic class TestAgepublic static void main(String args)TestAge t=new TestAge();t.age(75);public void agefint age)if(age250)System.out.printing 是个妖怪!);else System.out.printin(此人芳龄+age+马马乎乎啦!)八、SWITCHpublic class Testpublic static void main(String args)int i=1;switch(i

8、)case 0:System.out.println(zero);break;case 1:System.out.println(one);/break;default:System.out.println(default);break;)七、循环1、循环语句分类for循环while循环do/while 循环2、for循环public class ForLoop public static void main(String args)int result=0;for(int i=l;i=100;i+)result+=i;)System.out.println(result=+result);)

9、3、while 循环public class WhileLoop public static void main(String args)int result=0;int i=l;while(i=100)result+=i;i+;)System.out.println(result=+result);)4、do/while 循环public class WhileLoop public static void main(String args)int result=0,i=l;doresult+=i;i+;while(i=100);System.out.println(result=+resu

10、lt);八、break、cont i nue1、break只能用于switch语句和循环语句中。continue只能用于循环语句中。2、Break 示例public class TestBreakpublic static void main(String args)for(int i=0;i10;i+)if(i=3)break;System.out.println(i=+i);System.out.println(Game Over!);3、Continue 示例public class ContinueTest public static void main(String args)for

11、(int i=0;i default、private修饰符同一个类同一个包子类整体privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes2、方法覆盖 在子类中可以根据需要对从父类中继承来的方法进行改造一覆盖方法(方法的重置、重 写),在程序执行时,子类的方法将覆盖父类的方法。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。覆盖方法不能使用比被覆盖方法更严格的访问权限。3、在Java类中使用super来引用父类的成分 super可用于访问父类中定义的属性public String getlnfo()return s

12、uper.getlnfo()+w,school:w+school;)super可用于调用父类中定义的成员方法 super可用于在子类构造方法中调用父类的构造方法 super的追溯不仅限于直接父类 子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法(构造器不能被继 承)5、调用父类构造方法 在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法 如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载 的其它构造方法,则系统默认调用父类无参数的构造方法 如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错十六、多态

13、多态一在Java中,子类的对象可以替代父类的对象使用 一个变量只能有一种确定的数据类型 一个引用类型变量可能指向(引用)多种不同类型的对象Person p=new Student();Object o=new Person();/Object类型的变量o,指向Person类型的对象=new Student。;“Object类型的变量o,指向Student类型的对象 父类类型的变量可以指向子类的对象 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就 不能再访问子类中添加的属性和方法Student m=new Student();m.school=pku”;合法,Stud

14、ent 类有 school 成员变量Person e=new Student();e.school=pku;非法,Person 类没有 school 成员变量属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编译错误。1、在多态情况下,可以对对象强制的类型转换Person p2=new Man();P2.walk();Man man=(man)p2;Man.work();以下转换会发生运行异常Woman woman=(Woman)p2;Woman.shopping();2、只有在父子关系的情况下,才能进行强制的类型转换3、父类的对象可以转为任何子类的类型,但有可能

15、发生java.Iang.ClassCastException4、对Java对象的强制类型转换成为造型 从子类到父类的类型转换可以自动进行 从父类到子类的类型转换必须通过造型(强制类型转换)实现 无继承关系的引用类型间的转换时非法的 在造型前可以使用instanceof操作符测试一个对象的类型(x instanceof A:检验x是 否为A的对象,返回值为布尔类型)十七、object类1、Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类public class Person 等价于:public class Person ex

16、tends Object 2、equals。方法是Object类的方法,用于判断两个对象是否指向同一个内存空间。由于所有 类都继承Object类,也就继承了 equal)方法。只能比较引用类型,其作用与“=”相同,比较是否指向同一个对象。格式:objl.equals(ob 3、特例:当用equals。方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;4、=操作符与equals方法的区别:=:引用类型比较引用(是否指向同一个对象);Person pl=new Person();Person p2=new

17、 Person();if(pl=p2).基本类型比较值;int a=5;if(a=6)用=进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;3、toString 方法 toString。方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。在进行String与其它类型数据的连接操作时,自动调用toString()方法 Date now=new Date();System.out.println(/now=w+now);相当于 System.out.println(now=v+now.toString();/now=Date 1223

18、45 可以根据需要在用户自定义类型中重写toString。方法 如String类重写了 toString()方法,返回字符串的值。sl=hello;System.out.println(sl);/目当于 System.out.println(sl.toStringO);在ToStringl.java中的类A里覆盖toString方法,使其输出类A对象的cint属性值。基本类型数据转换为String类型时,调用了对应封装类的toString。方法int a=10;System.out.println(a=+a);5、虚拟方法调用(多态情况下)Person e=new Student();e.ge

19、tlnfo();调用 Student 类的 getlnfo()方法编译时类型和运行时类型编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的 getlnfo。方法。动态绑定十八、封装类1、基本数据类型封装类booleanBooleanbyteByteshortShortintIntegerlongLongcharCharacterfloatFloatdoubleDouble2、封装类就是基本数据类型对应的引用类型十九、关键字static1、static标记的变量或方法由整个类(所有实例)共享,如访问控制权限允许,可不必创建该 类对象而直接用类名加调用。2、类

20、变量(类属性)由该类的所有实例共享,类属性类似于全局变量3、不用创建对象就可以访问静态成员,访问方式:类名.类属性类名.类方法4、没有对象的实例时一,可以用类名方法名()的形式访问由static标记的类方法5、在static方法内部只能访问类的static属性,不能访问类的非static属性。6、因为不需要实例就可以访问static方法,因此static方法内部不能有this,(也不能有 super?)7、在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访 问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才 可使用,而静态方法在使用前不用

21、创建任何对象。8、静态方法不能以任何方式引用this和super关键字。与上面的道理一样,因为静态方 法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产 生。9、main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例 对象,因而在main。方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个 实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中 会多次碰到。二十、类属性、类方法的设计思想1、类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同 而改变,将这些属性设

22、置为类属性。相应的方法设置为类方法。2、如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可 以调用类方法,从而简化了方法的调用3、静态初始化:一个类中可以使用不包含在任何方法体中的静态代码块(static block),当 类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。static块通常用于初始化static(类)属性class Person public static int total;static total=100;为 total 赋初值其它属性或方法声明4、设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以

23、及解决问题的思考方式。5、所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对 某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。public class Single/l.在类的外郃不能通过new构造25的方式创建实例./杷构后器悬减配来,即构患器乂有化private Single()/2.因为在类的外方不能创业类的实例,只能在类的内净创戏./3.为让类的外部可以直接使用该实例,使用static修饰.1/4.不能在臭的外部可以修改该国性:私有化该属性,日时提供公有的get方法/来访问private static Single instance=new Sing

24、le();public static Single getlnstance()return instance;public class TestSingle(public static void main(String args)/Single singlel=new Single();/Single single2=new Single();Single instancel=Single.getInstance;Single instance2=Single.getlnstance();System.out.println(instancel=instance2);Single.getIns

25、tance()null)Single instance3Singleinstance!二H-、final 关键字1、在Java中声明类、属性和方法时,可使用关键字final来修饰。2、final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。必须在声明时被初始化,或在非静态代码块中(或构造器中)初始化。3、final标记的类不能被继承。提高安全性,提高程序的可读性。4、final标记的方法不能被子类重写。增加安全性。5、final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。二十二、抽象类1、有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做

26、抽象类。2、用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。抽象方法:只有方法的声明,没有方法的实现。以分号结束。abstract int abstractMethodl(int a);含有抽象方法的类必须被声明为抽象类。但抽象类中可以没有抽象方法。抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方 法,并提供方法体。不能用abstract修饰私有方法,构造方法,静态方法。3、案例:Java允许类设计者指定:超类声明一个方法但不提供实现,该方法的实现由子类提供。这样 的方法称为抽象方法。有一个或更多抽象方

27、法的类称为抽象类。Vehicle是一个抽象类,有两个抽象方法。public abstract class Vehiclepublic abstract double calcFuelEfficiency();计算燃料效率的抽象方法public abstract double calcTripDistance();计算行驶距离的抽象方法)public class Truck extends Vehiclepublic double calcFuelEfficiency()写出计算卡车的燃料效率的具体方法 public double calcTripDistance()写出计算卡车行驶距离的具体方

28、法 public class RiverBarge extends Vehiclepublic double calcFuelEfficiency()写出计算驳船的燃料效率的具体方法public double calcTripDistance()写出计算驳船行驶距离的具体方法)注意:抽象类不能实例化 new Vihicle。是非法的二十三、interface 接口1、接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没 有变量和方法的实现。2、接口的特点:用interface来定义。接口中的所有成员变量都默认是由

29、public static final修饰的。常量的命名规范:多个单词组成,每个字母都需要大写,且多个单词使用连接。接口中的所有方法都默认是由publicabstract修饰的。接口没有构造方法。实现接口的类中必须提供接口中所有方法的具体实现内容。实现接口使用implements关键字 多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口Public class OrderDao implements Dao,Test 与继承关系类似,接口与实现类之间存在多态性 接口也可以继承另一个接口,使用extends关键字。Public interface BaseDao extends Dao

30、 如果类继承父类的同时又实现多个接口,那么继承应该在前面,即:Public abstract class OrderDao extends BaseDaoImpI implements Dao,Test二十四、内部类1、在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类 内部类和外层封装它的类之间存在逻辑上的所属关系 Inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。Inner class的名字不能与包含它的类名相同;Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;Inner class可以声明

31、为抽象类,因此可以被其它的内部类继承。也可以声明为final的。和外层类不同,Inner class可以声明为private或protected;Inner class可以声明为static的,但此时就不能再使用外层封装类的非static的成员变 量;非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员;2、在类的外部如何创建内部类对象?对于非静态内部类:必须先创建外部类对象,然后再创建内部类对象 OuterClass oc=new OuterClass();创建外部类对象 InnerClass ic=oc.new lnnerCl

32、ass();创建内部类对象 lc.test();正常调用方法 静态内部类:内部类使用static来修饰,所以创建该类的对象可以没有外部类对象。静态内部类的方法不能访问外部类的非静态成员。StaticInnerClass sic=new OuterClass.StaticlnnerClass();二十五、异常处理1、Java提供的是异常处理的抓抛模型。2、异常处理是通过try-catch-finally语句实现的。try(可能产生异常的代码)catch(ExceptionNamel e)(.当产生ExceptionNamel型异常时的处置措施catch(ExceptionName2 e)(.当产

33、生ExceptionName2型异常时的处置措施)finally.无条件执行的语句 3、try捕获异常的第一步是用try语句块选定捕获异常的范围,将可能出现异常的代码放在 try语句块中。catch(Exceptiontype e)在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个 catch语句,用于处理可能产生的不同类型的异常对象。finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流 转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try、catch代码块中是 否发生了异常事件,finally块中的语

34、句都会被执行。finally语句是可选的4、如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类 作为catch的参数。异常类的父类要放在异常类的子类的后面。可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者 用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。5、捕获异常的有关信息:与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。getMessage()方

35、法,用来得到有关异常事件的信息printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。6、运行时异常和编译时异常前面但使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:即 使没有使用try和catch捕获,Java自己也能捕获,并且编译通过(但运行时会发生异常使 得程序运行终止)o如果抛出的异常是Exception类的异常,则必须捕获,否则编译错误。7、声明抛出异常是Java中处理异常的第二种方式如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该

36、方法的调用 者负责处理。在方法声明中用throws子句可以声明抛出异常的列表,throws后面的异常类型可以是 方法中产生的异常类型,也可以是它的父类。8、Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要 人工创建并抛出首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。lOException e=new IOException();throw e;可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法 错误:throw new String(want to throw);10、重写方法不能抛出比被重

37、写方法范围更大的异常类型(均指非运行时异常)11、自定义异常:自己定义的异常类,通常情况下继承RuntimeExciption自定义异常的作用:看见异常类的名字,就知道出现了什么问题。二十六、集合1、Java集合可分为Set、List和Map三种体系Set:无序、不可重复的集合List:有序,可重复的集合Map:具有映射关系的集合2、Collection 接口是 List、Set 和 Queue 接口的父接口。该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合二十七、co I I ect i onpackage lesson7;import java.util.Ar

38、rayList;import java.util.Collection;import java.util.Iterator;import org.junit.Test;/*Collection:集合*1、添加元素的*2、获取元素&查找指定元素*3、移除元素*4、工具方法*/public class CollectionTest/*1、clear():清空集合*2、remove(obj):移除指定的元素,通过equals()方法在集合中查找指定的元素*若存在,则移除。*3、removeAII(Collection coll):移除 coll 中有的元素*4、retainAII(Collectio

39、n coll):保存 coll 中有的元素。*/Testpublic void testRemove()Collection collection=new ArrayList();collection.add(ABC);Person p=new Person(Jim”,12);collection.add(p);collection.add(new Person(Tom,12);collection.add(new Person(Jerry,13);collection.add(new Person。Mike,14);/collection.clear();System.out.println

40、(collection.size();collection.remove(p);System.out.println(collection.size();/*在collection中无法获取指定的元素,*但可以遍历所有的元素*1、使用增强的for循环。*2、使用Iterator迭代器*2.1获取迭代器对象:调用Collection的iterator()方法,获取Iterator接口的对象*2.2调用Iterator接口的方法进行迭代*/Testpublic void testlterator()Collection collection=new ArrayList();collection.a

41、dd(ABC);collection.add(new Person(Tom,12);collection.add(new Person(Jerry,13);collection.add(new Person。Mike,14);for(Object obj:collection)(System.out.println(obj);)System.out.println();Iterator it=collection.iterator();while(it.hasNext()Object obj=it.next();System.out.println(obj);若下一条记录无效,还调用next(

42、)方法,则抛出NoSuchElement/Object obj=it.next();/*addAII(Colletion coll):添加一组元素到集合中*/Testpublic void testAddAII()Collection collection2=new ArrayList();collection2.add(ATGUIGU);Collection collection=new ArrayList();collection.add(ABC);collection.add(new Person(Tom,12);collection.add(new Person(Jerry,13);c

43、ollection.add(new Person(Mike,14);collection2.addAII(collection);System.out.println(collection2.size();/*add(Object obj):添加一个元素*/Testpublic void testAdd()Collection collection=new ArrayList();System.out.println(collection.size();collection.add(ABC);collection.add(new Person(Tom,12);collection.add(ne

44、w Person(Jerry,13);collection.add(new Person。Mike,14);System.out.println(collection.size();二十八、set集合1、Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则 添加操作失败。Set判断两个对象是否相同不是使用=运算符,而是根据equals方法2、关于 Hashset Hashset是set的最典型实现 Hashset中不能有重复的元素,判定两个元素相等的标准,equals()方法返回true Hashset根据hashCode()值来存放元素,所以不能保证元素的顺序 如

45、果两个对象通过equals。方法返回true,这两个对象的hashCode值也应该相同。HashSet不是线程安全的3、为什么在hashCode方法中有质数(prime)的存在,而不是直接相加?Person pl:name 的 hashCode 值为 1000,age 的 hashCode 值为 22Person pl:name 的 hashCode 值为 2,age 的 hashCode 值为 1000fublic int hashCode()final int prime=31;int result=1;result=prime*result+age;result=prime*result

46、+(name=null)?0:name.hashCode();return result;4、LinkedHashSet 是 HashSet 的子类 LinkedHashSet集合根据元素的hashCode值来决定元素的存储位置,但它同时使用链 表维护元素的次序,这使得元素看起来是以插入顺序保存的。LinkedHashSet性能插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很 好的性能。LinkedHashSet不允许集合元素重复。5、TreeSetTreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方法:自然

47、排序和定制排序。默认情况下,TreeSet采用自然排序。6、自然排序 排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小 关系,然后将集合元素按升序排列。public int compareTo(To):若返回0代表两个元素相等,若返回整数,代表当前元素 大,若返回负数,代表当前元素小。栗子方法1Public int compareTo(Object o)lf(o intstanceof Person)Person person=(Person)o;return-this.age+person.age;elsethrow new ClassC

48、astExcption(不能转为 Person 类型);)栗子方法2创建Comparator接口的实现类对象实现compare(Object ol,Object o2)方法来比较两个对象的大小。Comparator comparator=new Comparator()overridePbulic int compare(Object ol,Object o2)lf(ol instanceof Personl&o2 instanceof Personl)Personl pl=(Personl)ol;Personl p2=(Personl)o2;Return-pl.getAge()+p2.get

49、Age();Throw new ClassCastException(不能转为 Personl 类型);如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable接口。实现Comparable的类必须实现compareTo(Object obj)方法,两个对象即通过 compareTo(Object obj)方法的返回值来比较大小。Comparable的典型实现:a)BigDecimak Biginteger以及所有的数值型对应的包装类:按它们对应的数值大小 进行比较b)Character:按字符的UNICODE值来进行比较c)Boolean:true对应的包装类实例大

50、于false对应的包装类实例d)String:按字符串中字符的UNICODE值进行比较e)Date、Time:后边的时间、日期比前面的时间、日期大 因为只有相同类的两个实例才会比较大小,所以向TreeSet中添加的应该是同一个类的 对象 当需要把一个对象放入TreeSet中,重写该对象对应的equals()方法时,应保证该方 法与compareTo(Object obj)方法有一致的结果:如果两个对象通过equals()方法比较 返回true,则通过compareTo(Object obj)方法比较应返回07、定制排序如果需要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comp

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 软件工程

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服