一.面向对象和面向过程的区别
面向过程,往往符合我们生活中事物的广泛逻辑,比如当我们穿衣服的时候,先从衣柜里取出衣服,这里在程序中就相当于调用了 getClothes()
方法,然后穿上衣服(调用putOn方法)....等等流程,上述就是一整个面向过程的程序。在这个程序中,我们通过按照我们想要的顺序调用方法
来执行程序。
但是世间的万物都是可以被抽象为对象的,比如在上个程序中,我们可以把这个流程抽象成两个对象,一个是Person对象(java中用类表示)
,而另一个则是Wardrobe对象,我们赋予Person对象穿衣服的方法,赋予Wardrobe对象取衣服的对象(智能家居时代的到来早晚能让衣柜自己取出合适的
衣服)。
class Person{ public putOn(){ doSomething(); } }class
Wardrobe{ public getClothes(){ doSomething(); } }
二.继承
继承,是Java的四大特性之一,继承实现java的多态。很好理解,比如有的人生下来就有车有房,
这是哪儿来的?继承来的。子类可以调用父类的protected及public方法,(有些方法是不能继承的,你总不能拿你爸爸的银行卡吧。。)
public class SonClass extends SuperClass{ public SonClass() { } public static
void main(String[] args) { SonClass son = new SonClass();
son.protectedMethod(); son.publicMethod(); //son.defaultMethod();
//son.privateMethod(); } }public class SuperClass { public SuperClass(){ }
private void privateMethod() { System.out.println("privateMethod"); } void
defaultMethod() { System.out.println("defaultMethod"); } protected void
protectedMethod() { System.out.println("protectedMethod"); } public void
publicMethod(){ System.out.println("publicMethod"); } }
多态:同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
在继承中感受多态,在子类覆盖了父类的方法后,我们可以通过控制参数的不同,调用不同的方法,这就是多态的体现。
但是具体的调用哪一个方法,就又要涉及要静态分派和动态分派了。
首先明确静态类型和实际类型。
SuperClass son = new SonClass();其中SuperClass是静态类型,而SonClass是实际类型。
静态分派一般由于重载时,根据参数项的静态类型,指定执行哪个方法。
而动态分派是重写时,根据实际类型来判断,执行子类的方法还是父类的方法。
三.String,StringBuffer,StringBuilder
String类不可被继承,String类以final修饰,String 是不可变对象,对String重新复制,则重新指向一个对象。
String a="123";
String b="123";
b==a;(比较在内存中存储地址,因为都保存在运行时常量池中,若值相等,则返回常量池中的已有对象所以==比较相等)
String b=b+"";(false)
每一次操作都会重新生成一个新的对象。
StringBuffer:是线程安全的对象有synchronized控制,StringBuffer对象在每次操作时都是对同一个对象进行操作不会生成新的对象。极大的提高了性能。
StringBuilder:与StringBuffer相似, 但不是线程安全的。
性能上:
StringBuilder>StringBuffer>String
四.hashcode与equal的关系
equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
散列表通过key的hashCode值来放在数列中的相应位置的链表中。
由于equals方法执行较慢,所以一般先判断hashCode是否相等。若是hashcode不相等则直接判false。
五.自动拆箱与装箱
自动装箱是把基本类型用它们对应的包装类包装起来;
自动拆箱是由包装类转换为基本类型
java中的基本类型有:byte,char,short,int,long,float,double,boolean。
热门工具 换一换