1. StringBulider与StringBuffer之间的区别
String是字符串常量,final修饰;StringBuffer字符串变量(线程安全); StringBuilder 字符串变量(线程不安全).
String和StringBuffer
String和StringBuffer主要区别是性能:String是不可变对象,每次对String类型进行操作都等同于产生了一个新的String对象,然后指向新的String对象.所以尽量不在对String进行大量的拼接操作,否则会产生很多临时对象,导致GC开始工作,影响系统性能.
StringBuffer是对对象本身操作,而不是产生新的对象,因此在通常在有大量拼接的情况下我们建议使用StringBuffer.、
但是需要注意现在JVM会对String拼接做一定的优化: String s=“This is only ”+”simple”+”test”
会被虚拟机直接优化成String s=“This is only simple test”
,此时就不存在拼接过程.
StringBuffer和StringBuilder
StringBuffer是线程安全的可变字符串,其内部实现是可变数组.StringBuilder是java 5.0新增的,其功能和StringBuffer类似,但是非线程安全.因此,在没有多线程问题的前提下,使用StringBuilder会取得更好的性能.
区别是StringBuffer类的成员方法前面多了一个关键字:synchronized,不用多说,这个关键字是在多线程访问时起到安全保护作用的,也就是说StringBuffer是线程安全的。
2. JDK 与JRE的区别
JRE: Java Runtime Environment
JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本。
3. 多态的理解
允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点:
-
可替换性:多态对已存在代码具有可替换性.
-
可扩充性:增加新的子类不影响已经存在的类结构.
-
接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或者重写它来实现的.
-
灵活性:
-
简化性:
-
代码中如何实现多态)代码中如何实现多态
实现多态主要有以下三种方式: 1. 接口实现 2. 继承父类重写方法 3. 同一类中进行方法重载
4. java中抽象类与一般的父类的区别
父类是相对来说的,如果B类继承自A类,那么A类就是B类的父类,
但是抽象类是一个绝对概念,只要使用abstract关键字声明的类都是抽象类。抽象类不能够直接被实例化,比如C类是抽象类,那么就不能使用new关键字声明C类的对象,只能声明抽象类子类的对象。
一般来说,抽象类一定是某些类的父类;但是父类不一定是抽象类。
抽象: 就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标 无关的那些方面,将注意力集中在与当前目标有关的方面。
继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要。
5. 抽象类与接口
- 为其他子类提供一个公共的类型
- 封装子类中重复定义的内容
-
定义抽象方法,子类虽然有不同的实现,但是定义时一致的
区别
6. equlas 与== 的区别
==是对两个变量(基本数据类型或是class)的对比, equals默认是对象地址进行对比 如string对象, 比较的是hashcode; 可以进行重写,来设置具体比较的内容。
7. “a==b”与a.equals(b)有什么区别
如果a 和b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,
a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,但是包含的字母相同的比较。
8. String什么情况下使用new
public class Main {
public static void main(String[] args) {
String str1 = "hello world";
String str2 = new String("hello world");
String str3 = "hello world";
String str4 = new String("hello world");
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str2==str4);
}
}
String str1 = “hello word”;jvm的常量池来存储临时的常量,如果遇到一样的值, 就会直接引用这个值。不会去重新开辟新的空间来存储和引用。
String str2 = new String(“hello word”)new的对象会在堆中存储, 不会去先查一下 ,直接创建。
9. 内部类的作用
创建内部类对象的时刻病不依赖于外部类对象的创建.内部类并没有令人疑惑的”is-a”关系,它就像是一个独立的实体.
内部类提供了更好的封装,除了该外围类,其他类都不能访问
10. final,finalize和finally的不同之处
final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。1.被final修饰的类不可以被继承 2.被final修饰的方法不可以被重写 3.被final修饰的变量不可以被改变.
finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。
finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常;
11. java中int char,long各占多少字节?
|类型|位数|字节数|
|short|2|16|
|int|4|32|
|long|8|64|
|float|4|32 |
|double|8|64|
|char|2|16|
64位的jvm当中int的长度是多少)64位的JVM当中,int的长度是多少?
Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的Java 虚拟机中,int 类型的长度是相同的。
可以将int强转为byte类型么?会产生什么问题?
可以做强制转换,但是Java中int是32位的而byte是8 位的,所以,如果强制转化int类型的高24位将会被丢弃,byte 类型的范围是从-128.到128
12. 多线程的创建比较
通过实现java.lang.Runnable或者通过扩展java.lang.Thread类.相比扩展Thread,实现Runnable接口可能更优.原因有二:
Java不支持多继承.因此扩展Thread类就代表这个子类不能扩展其他类.而实现Runnable接口的类还可能扩展另一个类.
类可能只要求可执行即可,因此集成整个Thread类的开销过大.
13. 重写与重载
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。在面向对象原则里,重写意味着可以重写任何现有方法。
14. Java反射机制与泛型
15. protect privte public 区别
![](https://img.haomeiwen.com/i2588272/e85edfb3439b3b10.png)
网友评论