& 与 && 区别
& 与 && 都是逻辑运算符,都是判断两边同时为真则为真,否则为假;&& 当第一个条件不成立时,后面的就不会执行了,
而 & 还会继续执行下去,直到整个条件语句执行完为止。
使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向对象的内容,还是可以改变的。
final,finally, finalize 的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成 final 类型,例如,一段代码……
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 JVM 不保证此方法总被调用
静态变量和实例变量的区别
在语法定义上的区别:
静态变量前要加 static 关键字,而实例变量前则不加
在程序运行时的区别:
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量
静态变量不属于某个实例对象,而是属于类,所以也称类变量;只要程序加载了类的字节码,不用创建任何实例
对象,静态变量就会被分配空间,静态变量就可以使用了
在使用时的区别:
实例变量通过实例对象名.实例变量名来使用
静态变量通过类名.静态变量名来使用
"==" 与 equals 的区别
== 如果判断值类型的的话,判断内容是否相同,如果判断引用类型则是判断内存地址是否相同
equals 判断值内容是否相同
Integer 与 int 的区别
Integer 是引用类型,默认值是 null,而 int 是值类型,默认值是 0
接口与抽象类的区别
区别:定义接口的关键字是 interface, 而定义抽象类的关键字是 abstract
接口只能定义,不能有方法的实现,而抽象类可以有定义和实现,即其方法可以在抽象类中被实现
实现接口的关键字为 implements,而继承抽象类的关键字为 extends ,一个类可以实现多个接口,但一个类只 能承一个抽象类,因此,使用接口可以间接的达到多重继承的目的
所有的类都继承于 object 类,object 类常用的方法有哪些
方 法 名 | 返 回类 型 | 方 法 描 述 |
clone() | Object | 创建并返回此对象的一个副本 |
equals(Object obj) | boolean | 判断 obj 对象是否与此对象相等 |
finalize() | void | 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法 |
getClass() | Class<?> | 返回此 Object 的运行时类 |
hashCode() | int | 返回该对象的哈希码值 |
notify() | void | 唤醒在此对象监视器上等待的单个线程 |
notifyAll() | void | 唤醒在此对象监视器上等待的所有线程 |
toString() | String | 返回该对象的字符串表示 |
wait() | void | 在其他线程调用此对象的 notify() 方法或 notifyAll()方法前,使当前线程等待 |
wait(long timeout) | void | 在其他线程调用此对象的 notify() 方法或 notifyAll()方法,或者超过指定的时间量前,使当前线程等待 |
wait(long timeout, int nanos) | void | 在其他线程调用此对象的 notify() 方法或 notifyAll()方法,或者其他某个线程中断当前线程,或者已超出某个实际时间量前,使当前线程等待 |
数组有 length() 这个方法吗,String 呢?
数组没有 length() 这个方法,有 length 这个属性,String 有 length 这个方法
hashCode 方法
该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法,这个方法在一些具有 hash 功能的 Collection 中用到,一般必须满足 obj1.equals(obj2) = true, 可以推出 obj1.hashCode() = obj2.hashCode(), 但是 hashCode 相等不一定满足 equals,不过为了提高效率,应该尽量使上面两个条件接近等价。
反射概念及优缺点
反射:就是正在运行动态读取这个类的完整信息
优点:Java 的反射机制就是增加程序的灵活性
缺点:
性能问题:使用反射基本上是一种解释操作,用于方法和字段接入时要远慢于直接代码。因为反射机制主要应用于灵活性和扩展性很高的系统框架上,普通框架不建议使用。
使用反射机制会模糊程序内内部逻辑:程序员希望在源代码中看到程序的逻辑,反射绕过了源代码的技术,因而会带来维护问题,反射代码比相应的直接代码更复杂。
String、StringBuffer 与 StringBuilder 的区别
String内容不可变,StringBuffer和StringBuilder内容可变;
StringBuilder非线程安全(单线程使用),String与StringBuffer线程安全(多线程使用);
如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。