Java的三大特性
封装:隐藏内部具体实现细节,只保留和外部交流数据的接口。
继承:一个对象可以从它的父类继承所有的通用的属性和方法,并在无需重新编写原来的类的情况下对这些功能进行扩展;最大的好处是实现代码的高效重用。(共性抽取)
多态:多态就是同一个接口,使用不同的实例而执行不同操作
面向对象
面向对象的核心,就是类和对象。
类是对象的描述
对象叫做类的实例化(Instance)
1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
亲力亲为
2、去饭店,张开嘴:老板!来一份鱼香肉丝!
函数式接口
函数式接口的定义:任何接口,如果只包含一个抽象方法,那么他就是一个函数式接口
public interface Runnable{
public abstract void run();
}
重写(Override)和重载(Overload)?
重载:方法的名称【一样】,参数列表【不一样】
与返回值类型无关
重写:方法的名称【一样】,参数列表【也一样】。覆盖、覆写,外壳不变,核心重写
- 必须存在继承关系
- 重写的方法、返回值类型、参数列表必须和父类的方法保持一致
- 子类的访问修饰符不能低于父类方法的访问修饰符 public
自动装箱和拆箱
装箱:将基本类型变成包装类型
拆箱:将包装类型转换为基本数据类型;
super()和this()
this:1.当成员变量和局部变量重名,用关键字this来区分
2.this代表当前对象,this就是所存函数所属对象的引用(哪个对象调用了this所在的函数,this就代表谁)
3.this(参数列表),调用本类中重载的构造方法,必须放在第一行。
super:1.使用super调用父类的成员方法和属性
2.可以从子类构造方法中调用父类的构造方法,必须放在第一行。
数组和链表的区别
1.存储位置上:
数组逻辑上相邻的元素在物理存储位置上也相邻,而链表不一定;
2.存储空间上:
数组是连续的一段内存空间;链表存放的内存空间可以是连续的,也可以不连续的
3.长度可变性:
数组长度一旦声明不可变,链表的长度是按照实际需求进行分配的
数组的优点:随机访问性强;查找速度快;
sleep和wait的区别
sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,
等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。
因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,
线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。
wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,
使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程
线程的生命周期
新建
就绪
运行
阻塞
死亡