java重点总结.docx
- 文档编号:4660723
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:9
- 大小:21.05KB
java重点总结.docx
《java重点总结.docx》由会员分享,可在线阅读,更多相关《java重点总结.docx(9页珍藏版)》请在冰豆网上搜索。
java重点总结
final,finally,finalize的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供finally块来执行任何清除操作。
如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize—方法名。
Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在Object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
String和StringBuffer的区别
JAVA平台提供了两个类:
String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
这个String类提供了数值不可改变的字符串。
而这个StringBuffer类提供的字符串进行修改。
当你知道字符数据要改变的时候你就可以使用StringBuffer。
典型地,你可以使用StringBuffers来动态构造字符数据。
forward和redirect的区别
使用forward的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;
使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。
forward,转发页面和转发到的页面可以共享request里面的数据.
redirect,不能共享数据.
ArraryList与vector的区别
ArrayList是List接口的一个可变长数组实现。
实现了所有List接口的操作,并允许存储null值。
除了没有进行同步,ArrayList基本等同于Vector。
在Vector中几乎对所有的方法都进行了同步,但ArrayList仅对writeObject和readObject进行了同步,其它比如add(Object)、remove(int)等都没有同步。
因此,Vector是线程安全的,但ArrayList不是。
这使得ArrayList要比Vector快速。
对于一些最新的JVM,两个类在速度上的差异可以忽略不计:
严格地说,对于这些JVM,这两个类在速度上的差异小于比较这些类性能的测试所显示的时间差异。
简单说:
ArrayList——实现的是数组功能,不同步,效率高
Vector——实现的是数组的功能,同步,控制简单
equal和==的区别
java中equal和==的比较
默认分类2009-12-1419:
43:
41阅读131评论2字号:
大中小
java中equals方法和“==”的区别:
equals方法是java.lang.Object类的方法。
有两种用法说明:
(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
Strings1,s2,s3="abc",s4="abc";
s1=newString("abc");
s2=newString("abc");
那么:
s1==s2是false//两个变量的内存地址不一样,也就是说它们指向的对象不一样,
故不相等。
s1.equals(s2)是true//两个变量的所包含的内容是abc,故相等。
注意
(1):
如果:
StringBuffers1=newStringBuffer("a");
StringBuffers2=newStringBuffer("a");
结果:
s1.equals(s2)//是false
解释:
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意
(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符
串常量所生成的变量,其中所存放的内存地址是相等的,
所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
(2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其
对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
比如:
classA
{
Aobj1=newA();
Aobj2=newA();
}
那么:
obj1==obj2是false
obj1.equals(obj2)是false
但是如加上这样一句:
obj1=obj2;
那么obj1==obj2是true
obj1.equals(obj2)是true
总之:
equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较
其指向的对象是否相同的。
==比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。
所以是true。
关于equals与==的区别从以下几个方面来说:
(1)如果是基本类型比较,那么只能用==来比较,不能用equals
比如:
publicclassTestEquals{
publicstaticvoidmain(String[]args)
{
inta=3;
intb=4;
intc=3;
System.out.println(a==b);//结果是false
System.out.println(a==c);//结果是true
System.out.println(a.equals(c));//错误,编译不能通过,equals方法
//不能运用与基本类型的比较
}
}
(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。
比如:
publicclassTestEquals{
publicstaticvoidmain(String[]args)
{Integern1=newInteger(30);
Integern2=newInteger(30);
Integern3=newInteger(31);
System.out.println(n1==n2);//结果是false两个不同的Integer对象,故其地址不同,
System.out.println(n1==n3);//那么不管是newInteger(30)还是newInteger(31)结果都显示false
System.out.println(n1.equals(n2));//结果是true根据jdk文档中的说明,n1与n2指向的对象中的内容是相等的,都是30,故equals比较后结果是true
System.out.println(n1.equals(n3));//结果是false因对象内容不一样,一个是30一个是31
}
}
这是Integer的实例,如果是其他的比如Double、Character、Float等也一样。
(3)注意:
对于String(字符串)、StringBuffer(线程安全的可变字符序列)、StringBuilder(可变字符序列)这三个类作进一步的说明。
(a)首先,介绍String的用法,请看下面的实例:
publicclassTestEquals{
publicstaticvoidmain(String[]args){
Strings1="123";
Strings2="123";
Strings3="abc";
Strings4=newString("123");
Strings5=newString("123");
Strings6=newString("abc");
System.out.println(s1==s2);//
(1)true
System.out.println(s1.equals(s2));//
(2)true
System.out.println(s1==s3);//(3)flase
System.out.println(s1.equals(s3));//(4)flase
System.out.println(s4==s5);//(5)flase
System.out.println(s4.equals(s5));//(6)true
System.out.println(s4==s6);//(7)flase
System.out.println(s4.equals(s6));//(8)flase
System.out.println(s1==s4);//(9)false
System.out.println(s1.equals(s4));//(10)true
}
}
答案解释:
s1与s2分别指向由字符串常量”123”创建的对象,在常量池中,只有一个对象,内容为123,有两个引用s1和s2指向这个对象,故这两个引用变量所指向的地址是相同的,因而
(1)处的运行结果为true,又因为s1.equals(s2)是比较s1和s2所指向的对象的内容是否相等,而我们知道这两个对象的内容都是字符串常量”123”,故标记
(2)处的运行结果是true。
用同样的方法分析,s1和s3所指向的对象不一样,内容也不一样,故标记(3)和(4)处运行结果是false。
再看看s4和s5,这两个引用变量所指向的对象的内容都是一样的(内容都是123),但是这两个对象是用new操作符创建处类的,是在内存中分配两块空间给这两个对象的,因而这两个对象的内存地址不一样,故事两个不同的对象,标记(5)处的s4==s5运行结果为false,但是内容一样,故标记(6)处的s4.equals(s5)运行结果为true。
同理,s4和s6所指向的对象地址不同,内容也不相同。
故标记(7)(8)处运行结果为false。
s1和s4分别指向两个不同的对象(之所以这样称呼,是因为这两个对象在内存中的地址不相同,故而对象不相同),故标记为(9)处的s1==s4运行结果为false,而标记为(10)处的s1.equals(s4)运行结果疑问:
乍一看结果,有点惊讶,为什么不是true呢,不是说equals方法是比较内容的吗?
解释:
不错,如果在新类中被覆盖了equals方法,就可以用来比较内容的。
但是在上面的例子中类Value并没有覆盖Object中的equals方法,而是继承了该方法,因此它就是被用来比较地址的,又v1和v2的所指向的对象不相同,故标记
(1)处的v1.equals(v2)运行结果为false,标记为
(2)处的v1==v2运行结果也为false。
Overload和Override的区别
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
抽象类与接口的区别?
?
抽象类里面可以有非抽象方法
但接口里只能有抽象方法
声明方法的存在而不去实现它的类被叫做抽像类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract类的实例。
然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。
不能有抽像构造函数或抽像静态方法。
Abstract类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。
取而代之,在子类中实现该方法。
知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。
在接口中,所有方法都是抽像的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽像的,没有一个有程序体。
接口只可以定义staticfinal成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。
然后,它可以在实现了该接口的类的任何对像上调用接口的方法。
由于有抽像类,它允许使用接口名作为引用变量的类型。
通常的动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。
冒泡排序
publicclassio{
staticvoidsort(int[]nums){
//从此一个位开始循环数组
for(inti=0;i //从第i+1为开始循环数组 for(intj=i+1;j //如果前一位比后一位小,那么就将两个数字调换 //这里是按降序排列 //如果你想按升序排列只要改变符号即可 if(nums[i] inttem=nums[i]; nums[i]=nums[j]; nums[j]=tem; } } } } publicstaticvoidmain(String[]args){ int[]nums={2,5,47,8,6,2,1,4,6,3,5,9}; sort(nums); for(inti=0;i System.out.println(nums[i]); } } } ArrayList和List,HashMap和Hashtable的区别 答: 就ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长: 当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 就HashMap与HashTable主要从三方面来说。 一.历史原因: Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现 二.同步性: Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值: 只有HashMap可以让你将空值作为一个表的条目的key或value java中的length属性和length()方法和size()方法的区别 1java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法. 3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看! 几个简单的基本的sql语句 (1)数据记录筛选: sql="select*from数据表where字段名=字段值orderby字段名[desc]" sql="select*from数据表where字段名like'%字段值%'orderby字段名[desc]" sql="selecttop10*from数据表where字段名orderby字段名[desc]" sql="select*from数据表where字段名in('值1','值2','值3')" sql="select*from数据表where字段名between值1and值2" (2)更新数据记录: sql="update数据表set字段名=字段值where条件表达式" sql="update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式" (3)删除数据记录: sql="deletefrom数据表where条件表达式" sql="deletefrom数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)" sql="insertinto目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表) (5)数据记录统计函数: AVG(字段名)得出一个表格栏平均值 COUNT(*¦字段名)对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名)取得一个表格栏最大的值 MIN(字段名)取得一个表格栏最小的值 SUM(字段名)把数据栏的值相加 引用以上函数的方法: sql="selectsum(字段名)as别名from数据表where条件表达式" setrs=conn.excute(sql) 用rs("别名")获取统计的值,其它函数运用同上。 查询去除重复值: selectdistinct*fromtable1 (5)数据表的建立和删除: CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 重点 总结