一.面向对象和面向过程的区别

    面向过程,往往符合我们生活中事物的广泛逻辑,比如当我们穿衣服的时候,先从衣柜里取出衣服,这里在程序中就相当于调用了 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。


            

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信