Java中的重载,重写,继承,封装,抽象类,接口,内部类,线程和进程
重载,重写**
方法相同,参数类型或个数不同的方法即使重载
1.重载Overload是一个类中多态性的一种表现
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
重写 总结:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
二、引用
1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态
static修饰符:
static变量属于勒边量,跟对象无关
静态方法不能访问静态变量,非静态方法可以访问静态变量
Final
1、final修还是常量:字母全部大写
2、final修饰方法:无法覆盖,但可以重组赛
3、final修饰类:不能被继承,里面所有方法为final
继承:
java只能单继承,不支持多继承,extends
对子类继承,先创建父类,然后再子类
抽象类:
抽象类是为子类提供一套规则
1、冲向类必须有一个抽象方法
2、冲向类不一定有抽象方法,有抽象方法的类一定是抽象类
3、一个类继承了抽象类,必须重写这个类所有的抽象方法@Override
(如歌一个类,没有重写抽象类的抽象方法,这个类也要定义类抽象类))
接口:(修饰符只有 默认(包里面可用)和public)
1、extends 只有一个,implements 可以有多个
2、接口只有抽象方法,他被抽象类还要抽象,是彻底的抽象类
3、接口是抽象方法和常量的属性的结合
4、接口中高智能包含抽象方法和常量,不能有变量,初始化块,构造器
5、接口内的变量设置为共有的,静态的,最终的
int i = 1;//相当于 public static final int i = 1
接口中,变量 abstract static final
方法 public abstract
内部类
1、局部内部类:可以访问外部类的所有成员变量 ,且为final类型
静态内部内,静态内部内不可使用外部类的非静态成员变量
创建静态内部类不需要外部类
异常链:
两个或者多个不同的鹅肠出现在同一个程序中,并且会发生嵌套异常
java线程模型:
1、新建状态:线程被创建之后便处于新建状态
2、就绪状态:新建状态的线程调用start()进入就绪状态或阻塞状态的线程解除阻塞之后进入就绪状态
3、运行状态:处于就绪状态的线程获得了CUP的资源,该线程就进入运行状态
4、阻塞状态:一个正在运行的线程,因为一些原因让出CPU资源暂时中止而进入的状态
5、终止状态(不在执行):三种情况一、正常终止
二、墙纸终止:stop,destroy(System.exit(0))
三、异常终止
线程
继承Thread和实现Runnable接口区别:
Thread,单继承,Runnable比较灵活,可以多实现
Trhead 直接new,Runnable new后,Thread new后添加
线程调度:
sleep 休息
yield 暂停
join 挂起
线程同步问题:
同步方法:当线程进入统一方法的时候,会火的同步方法所属对象的所,一旦获得对象锁,则其他线程不能再执行被锁对象的其他任何同步方法
synchronized(print){}
public synchronized void print(){}
死锁问题:
A线陈占有资源2,需要请求资源1才能继续执行
B线程占有资源1,需要请求资源2才能继续执行