上次介绍了面向对象语言中的一封装特性,这节来介绍静态和继承
目录
2.4.1静态代码块 (当类被加载时,就会执行静态代码块,并且只加载一次):
一、static静态的成员变量与方法
1.1 定义:
static是一个关键字,作用是让一个成员变量或者成员方法不属于实例(也就是不能通过对象调用),而是属于类本身。
我们为什么要用这个static呢,我来举个例子,比如说有一个学生类,你创建两个对象,分别是张三和李四,他俩是同一个班的,这时创建一个固定的成员变量,就会很方便;
public static String stuclass;
1.2 使用static
被Static修饰后,成员变量和成员方法有哪些不一样了呢?
1.2.1静态成员变量:
1.2.1静态成员变量:被修饰后,它不依赖于对象,可以直接通过 类名.变量名 的方式去调用,以往的创建对象调用的方式虽然可行,但是不推荐!
另外,普通的成员变量在JVM中会存储在堆中,通过栈的引用去使用,而静态成员变量存储在方法区中,连位置都不一样,不同的实例对象共享同一个静态变量。
1.2.2 静态成员方法:
静态成员方法同样不依赖于对象,它有下面几个特点,
我们称静态成员方法为类方法,类方法不依赖于对象,使用类名引用,它不可直接使用非静态方法和变量,也不可以使用this;如果需要使用,要在内部创建对象,因为非静态方法和变量要通过对象引用。
总结一下:静态不依赖对象,它属于类。
二、静态成员变量的初始化
上面介绍了静态的概念,但是一个变量一定需要赋值,那么静态成员变量如何赋值呢(初始化)
2.1 就地初始化:
public static String stuclass = "三班";
2.2 通过get set方法初始化:
public static String getStuclass() {
return stuclass;
}
public static void setStuclass(String stuclass) {
Student.stuclass = stuclass;
}
Student.setStuclass("6班");//写在main中
System.out.println(getStuclass());
2.3 构造方法去初始化(使用较少)
2.4 代码块初始化:
代码块有很多种,有静态代码块,实例代码,其实很简单,下面展示一下
2.4.1静态代码块 (当类被加载时,就会执行静态代码块,并且只加载一次):
2.4.2实例代码块:
当我们一个类中,三种代码块都存在时,它们会有执行顺序
静态代码块==>实例代码块==>构造方法
并且这个顺序不会受代码位置影响,谁前谁后都是这个顺序。
如果静态和实例代码块有多个,就会按顺序执行,构造就看你调用了哪个构造方法
三、继承(extends)
继承从字面意义上来看,就是继承他人的东西,比如继承财产;
在面向对象中,我们把被继承的类叫做 父类/基类/超类,继承的类叫做 子类/派生类,继承做到了代码的复用,提高了开发效率;
3.1 继承的特点:
继承的子类可以直接访问父类的方法和变量;
如果有同名变量,要想调用父类的变量,要用super关键字;