静态方法:类方法 通过类名调用即可,不需要对象
在静态方法中不可以使用this,原因是调用该方法不一定是对象
由于成员方法和成员变量也需要对象调用,所以静态方法中不能直接调用成员方法和成员变量
静态变量:类变量,通过类名调用即可
静态变量是输入类的,他的初始化是在类加载时,
静态变量是一个所有对象都可以共享的变量,某个成员对静态变量进行更改其他成员使用的是更改后的值
成员变量是各个成员独有的
静态变量只会在类加载时被初始化一次,无论我们new多少个对象
成员变量每次new对象,新的对象都会初始化自己的成员变量
类加载时,此时静态变量会进行初始化操作 如果我们给值了,按照我们给的值来,如果没有,就和成员变量规则一样
类只会被加载一次
当我们创建对象时,如果类加载过了,就不会再次加载,此时只会初始化成员变量
//对一些数组进行操作
public class ArrayUtils {
public static int a;
public int b;
//静态代码块
static {
//不用我们调用,在类加载时会自动执行,静态代码块只执行一次
//作用是,在类加载时对类进行初始化操作,例如对静态变量进行初始化赋值等等
System.out.println("静态代码");
}
//遍历数组
public static void print(int[] array) {
for(int v : array) {
System.out.println(v +" ");
}
System.out.println();
}
}
抽象类和抽象方法
当我们有些行为的实现无法统一,我们就可以将该行为定义为抽象方法
抽象方法的形式;被abstract修饰,并且没有方法体
抽象方法无法直接使用,只能是子类中重写(实现)了抽象方法之后才能使用
1.抽象方法如果定义在类中,那么这个类一定是抽象类 被abstract修饰的类是抽象类
2.抽象类中不一定有抽象方法
3.抽象类和普通类相比较,普通类中可以定义的内容抽象类都可以定义
所以抽象类从定义内容来看只是比普通类中多定义了抽象方法。
4.抽象类不能被实例化(不能创建对象),所以抽象类一般作为基类,让普通类来继承
5.普通类继承了抽象类,必须重写(实现)抽象类中的所以抽象方法
public abstract class Abstract {
//·
public void normal() {
}
//抽象方法
public abstract void abs();
}
class sub extends Abstract{
@Override
public void abs() {
}
}
对象的加载顺序
类中可以定义的内容:
成员变量 静态变量 成员方法 静态方法 构造方法 代码块 静态代码块
如果是抽象类还可以在以上基础上定义抽象方法
1.加载期间先加载静态代码块和静态变量(他们优先级相同谁在前面先执行谁)静态部分只加载一次
2.再加载代码块和成员变量(自上而下)
3.最后构造方法
如果有父类时
1.如果有父类时先加载父类静态部分,再加载子类的静态部份
2.加载父类的代码块、成员变量加载父类构造方法
3.再加载子类代码块、成员变量加载子类构造方法