1. static(静态)
静态变量和静态方法都属于类,不属于对象,可以直接以类名调用。
当一个类中含有静态块,块,还有构造函数的时候,创建对象时,依次运行的顺序为静态块,块,构造函数,但是静态块和块只能执行一次。
继承中,static方法不能被重写,即不能实现多态。
2. 继承
继承指的是一个类可以完全的继承上一个类所有的属性,方法,有且只能继承一个,但是一个父类可以被多个子类继承。
当写子类的构造函数的同时,必须调用父类的构造函数(super()),但是,若是父类的构造函数是无参的,调用的过程可以略去不写。
3.多态
多态:一个函数可以实现多个不同的功能,继承和接口都能实现多态。
以父类创建引用的时候,引用会根据创建的对象,而自动判断调用在子类中重写的函数。
假如在子类中未找到重写的函数,会转而自动调用父类的方法。
3. 封装
封装指得是用修饰符(public,protected,private)去决定一个方法,属性,类,可以被调用的范围。
Private只能在本类中被调用。
无修饰符,只能在包中被调用
Protected能够在包中被调用,同时若是包外有包中类的子类,也可以调用。
Public 所有的包都可以被调用
能够修饰类的修饰符:
public 公共类
default 默认类(即class前什么都不假)
abstract 抽象类
fanal 不能被继承的类
static 静态类
private 只能修饰内部类,一般不推荐使用
4. 抽象类
注意点:
①抽象类不能被实例化
②抽象类可以没有抽象的方法,抽象类中可以有被实现的方法
③一旦一个类包含abstract方法,一定要声明为abstract方法
④abstract方法不能声明为主体。
5. 接口(interface)
一个类实现了一个接口,那么这个类必须把接口所有的方法全都实现。
注意:
①接口不能被实例化,接口中所有方法都不能被实现,也就是不能有主体
②一个类可以实现多个接口
③接口中的变量默认是public final static的,不能用private,protected 修饰,,并且变量一定要赋初值,调用以接口名.变量的方式去调用
④接口不能继承类,但是可以继承其他接口
6. 垃圾回收算法,java的内存空间是自动回收的
①引用计数算法,给对象添加一个引用计数器,每次引用对象的时候,引用计数器加一,引用失效时,就减一,任何时刻引用计数器的值都为零的时候,此对象失效。
此方法简单,方便,但是无法解决,对象之间互相引用的问题,所以java并没有采用这种回收机制。
②根搜索算法,通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(ReferenceChain),当一个对象到GCRoot没有任何引用链相连时,则该对象不可达,该对象是不可使用的,垃圾收集器将回收其所占的内存。
主流的商用程序语言C#、java和Lisp都使用根搜素算法进行内存管理。
在java语言中,可作为GC Root的对象包括以下几种对象:
a. java虚拟机栈(栈帧中的本地变量表)中的引用的对象。
b.方法区中的类静态属性引用的对象。
c.方法区中的常量引用的对象。
d.本地方法栈中JNI本地方法的引用对象。
java方法区在Sun HotSpot虚拟机中被称为永久代,很多人认为该部分的内存是不用回收的,java虚拟机规范也没有对该部分内存的垃圾收集做规定,但是方法区中的废弃常量和无用的类还是需要回收以保证永久代不会发生内存溢出。
判断废弃常量的方法:如果常量池中的某个常量没有被任何引用所引用,则该常量是废弃常量。
判断无用的类:
(1).该类的所有实例都已经被回收,即java堆中不存在该类的实例对象。
(2).加载该类的类加载器已经被回收。
(3).该类所对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射机制访问该类的方法。