1,==和equals的区别
==是比较两个对象的内存地址是否相同。
在Object类里,equals()方法使用==比较两个对象是否相等。
我们通常重写equals()方法,用于比较两个对象值是否相等。
总结:通常==比较内存地址,equals()比较值
2,重写hashCode()方法需要遵循那些原则
1,对象hashCode不一定唯一,但要尽量分散
2,对象的equals相同则其hashCode必须相同
3,重写equals()方法需要遵循那些原则
1、自反性:对于任何非空引用x,x.equals(x)应该返回true。
2、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
3、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
5、非空性:对于任意非空引用x,x.equals(null)应该返回false。
说明:两个对象的equals相同则hashCode必须相同,两个对象hashCode相同则其equals未必相同,重写equals方法时必须重写hashCode方法。
4,java中static关键字
static关键字用于修饰变量、方法、代码块和内部类
static关键字,修饰变量时,static变量是相对类存在的。该变量被该类的所有实例共享,且只在类被加载时被初始化一次,仅分配一次内存,且分配在方法区。
static修饰方法,该方法也是属于类而非属于某一对象,可以通过类名直接调用该方法。静态方法不能操作非静态变量,因为静态方法相对于类而存在的,没有类的实例更没有其属性。静态方法中不能使用this、super关键字。
static修饰代码块,在类加载时,main方法执行前执行此操作。用初始化静态变量
static修饰内部类,称为静态内部类。内部类的作用,都是为了代码整洁。内部类和静态内部类可以定义的成员变量同,内部类不能定义静态成员变量,而静态内部类可以。内部类不能脱离外部类的对象独立创建,而内部类可以。了解更多
static详解:点击打开链接
5,Java中synchronized用在静态方法和非静态方法上面的区别
在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非static方法前面加synchronized到底有什么不同呢?大家都知道,static的方法属于类方法,它属于这个Class(注意:这里的Class不是指Class的某个具体对象),那么static获取到的锁,是属于类的锁。而非static方法获取到的锁,是属于当前对象的锁。所以,他们之间不会产生互斥。
6,java中的final关键字
final关键字可以修饰变量、方法和类。详解
final修饰的变量不能被更改。如果是基本变量,其值不能被更改,如果是引用类型变量,其引用只能指向一个对象,
final修饰的方法不能被重写。
final修饰的类不能被继承。
7,在java中,final,finally,fanalize的区别
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,和类不可继承。(字面理解final是最终的意思,所以其修饰的也就不可变)
finally是异常语句处理的一部分,表示总是可执行的;
finalize()是Object类的一个方法,在垃圾回收期执行的时候会调用被回收对象的此方法
8,java重载重写的问题
java重载:一个类中方法名相同参数不同的多个方法间相互重载。重载与返回类型无关
java重写:是子类继承父类时重写父类方法。其方法名、参数、返回类型必须与父类相同;其访问修饰符的限制一定要大于被重写方法的访问修饰符;其抛出异常必须小于父类方法或者不抛出异常。
总结:运行时多态即动态单分配:程序在运行时在类的方法元数据中搜索合适的方法再调用该方法.与重写有关
编译时多态即静态多分配:在编译阶段javac编译器会根据参数类型来决定调用哪一个方法.与重载有关
9,面向过程和面向对象的区别
面向过程:注重于问题的实现步骤,一般性能较高,但不易维护
面向对象:的特点在于封装、继承、多态;一般高内聚低耦合,易维护、易扩展。
10,自动拆装箱
java中有八大基本数据类型,分别是int、short、char、doubule、folat、long、boolean;
基本数据类型和它对应的封装类型之间可以相互转换,从基本数据类型到封装类型叫做装箱,从封装类型到基本数据类型叫拆箱,自动拆装箱是jdk5.0提供的新特特性,它可以自动实现类型的转换
原理:java的自动拆装箱其实是java的一个语法糖,它是JDK1.5新增加的内容,其过程就是在编译通过调用原对象valueOf()方法将基本类型装箱成其对应的对象,或调用intValue(),doubleValue()等方法把对象类型转换为基本数据类型。可以用反编译器反编译.class文件验证。