java后端学习之路(基础篇)

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

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

            

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值