创建网站的准备,网站运营维护工作内容,w3school网页制作证书,合肥有多少做网站的文章目录 1.Java面向对象有哪些特征#xff1f;2.ArrayList和LinkedList有什么区别#xff1f;3.Java接口和抽象类有哪些区别#xff1f;4.hashcode和equals如何使用#xff1f;5.try-catch6.局部变量和实例变量7.String、StringBuffer、StringBuilder 的区别#xff1f;8… 文章目录 1.Java面向对象有哪些特征2.ArrayList和LinkedList有什么区别3.Java接口和抽象类有哪些区别4.hashcode和equals如何使用5.try-catch6.局部变量和实例变量7.String、StringBuffer、StringBuilder 的区别8.串池 1.Java面向对象有哪些特征
答三大特征—— 封装增加代码的复用性继承增加代码的复用性多态增加代码的可移植性健壮性灵活性。
2.ArrayList和LinkedList有什么区别
答ArrayList底层原理是数组LinkedList底层原理是链表在需要插入和删除数据的时候使用LinkedList更快在读取数据的时候利用ArrayList底层的索引查询起来更快。
3.Java接口和抽象类有哪些区别
答 1.抽象类中可以定义构造器接口不行 2.抽象类中可以有抽象方法和具体方法但是接口中方法只有抽象方法 3.接口中成员全是public的而抽象中的成员可以是private和其他任意的 4.抽象类中可以定义成员变量接口中只能定义的成员变量实际上都是常量 5.一个类只能继承一个抽象类但可以实现多个接口 4.hashcode和equals如何使用
答hashcode的底层原理是根据数组存储数据的然后根据HashMap其中的key通过hashcode方法计算出key对应的码值根据码值存储数据相同的key对应的码值相同这时候就会实现追加数据而追加数据的时候会用到equals方法进行比较不同的数据就以链表的形式追加在后面
5.try-catch
答当Java程序中执行try-catch时遇到了retrun语句或者throw语句会导致立即结束——如果有finally的话只有当finally块执行完结束后再回来执行try-catch中的return如果finally中也有return的话那么finally执行完后就不会再返回try-catch中的return了
例题一 例题二
总结 1、不管有木有出现异常finally块中代码都会执行 2、当try和catch中有return时finally仍然会执行 3、finally是在return后面的表达式运算后执行的此时并没有返回运算后的值而是先把要返回的值保存起来管finally中的代码怎么样返回的值都不会改变任然是之前保存的值所以函数返回值是在finally执行前确定的 4、finally中最好不要包含return否则程序会提前退出返回值不是try或catch中保存的返回值。 举例 情况1try{} catch(){}finally{} return; 显然程序按顺序执行。 情况2:try{ return; }catch(){} finally{} return; 程序执行try块中return之前包括return语句中的表达式运算代码 再执行finally块最后执行try中return; finally块之后的语句return因为程序在try中已经return所以不再执行。 情况3:try{ } catch(){return;} finally{} return; 程序先执行try如果遇到异常执行catch块 有异常则执行catch中return之前包括return语句中的表达式运算代码再执行finally语句中全部代码 最后执行catch块中return. finally之后也就是4处的代码不再执行。 无异常执行完try再finally再return. 情况4:try{ return; }catch(){} finally{return;} 程序执行try块中return之前包括return语句中的表达式运算代码 再执行finally块因为finally块中有return所以提前退出。 情况5:try{} catch(){return;}finally{return;} 程序执行catch块中return之前包括return语句中的表达式运算代码 再执行finally块因为finally块中有return所以提前退出。 情况6:try{ return;}catch(){return;} finally{return;} 程序执行try块中return之前包括return语句中的表达式运算代码 有异常执行catch块中return之前包括return语句中的表达式运算代码 则再执行finally块因为finally块中有return所以提前退出。 无异常则再执行finally块因为finally块中有return所以提前退出。 最终结论任何执行try 或者catch中的return语句之前都会先执行finally语句如果finally存在的话。 如果finally中有return语句那么程序就return了所以finally中的return是一定会被return的 编译器把finally中的return实现为一个warning。 6.局部变量和实例变量
实例变量就是我们的全局变量它是默认初始化的有默认值
局部变量形参这种必须要初始化
7.String、StringBuffer、StringBuilder 的区别
答 1.String是不可类型的字符串StringBuffer和StringBuilder是可变类型的字符串。地址不变的情况下内容无法改变如果要改变字符串内容的话是要改变字符串所指向的地址的后两者的源码中有自动扩容功能如果要加内容的话直接在数组后面加就好了空间不够的话会自动扩容地址不会改变 2. 总结 1.操作少量的数据: 适用 String 2.单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder 3.多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
8.串池
一般都是问new Strng(“abc”)创建几个对象这种我统一来说说
String s“abc”: 通过字面量赋值创建字符串。则将栈中的引用直接指向该字符串如不存在——则在常量池中生成一个字符串再将栈中的引用指向该字符串(创建0-1个对象)
String s“a”“bc”: 编译阶段会直接将“a”和“bc”结合成“abc”这时如果方法区已存在“abc”则将s的引用指向该字符串如不存在则在方法区中生成字符串“abc”对象然后再将s的引用指向该字符串
String s“a”new String(“bc”): 像new的话会先在串池中看有没有没有就在串池中来一个对象然后再在堆中创建一个并且引用指向堆中的——(创建1-2个对象) **String s “a” new String(“bc”)*栈中先创建一个a字符串常量再创建一个bc字符串常量编译阶段不会进行拼接在运行阶段拼接成abc字符串常量并将s的引用指向它效果相当于String s new String(“abc”)只有’两边都是字符串常量才会在编译阶段优化 1、两个new Integer()变量比较永远是false 因为new生成的是两个对象其内存地址不同
2、Integer变量 和 new Integer() 变量比较 永远为 false 因为 Integer变量 指向的是java常量池中的对象而 new Integer() 的变量指向堆中新建的对象两者在内存中的地址不同。
3、两个Integer 变量比较如果两个变量的值在区间-128到127 之间则比较结果为true如果两个变量的值不在此区间则比较结果为 false java对于-128到127之间的数会进行缓存。 所以 Integer i 127 时会将127进行缓存下次再写Integer j 127时就会直接从缓存中取就不会new了。
4、int变量与 Integer、new Integer()比较时只要两个的值是相等的则为true. 因为包装类Integer 和 基本数据类型int 比较时java会自动拆包装为int 然后进行比较实际上就变为两个int变量的比较。