静态变量和成员变量有何区别
-
存储位置
静态变量在静态方法区中类所属的空间里,可以在主函数之前执行
成员变量在堆内存中对象的所属空间里 -
生命周期
静态变量随着类(.class文件)的加载而存在,随着程序的结束而结束
成员变量随着对象的创建而存在,随着对象的消亡而消失 -
调用方式
静态变量可以对象调用 类调用,静态变量也会有默认初始化
成员变量只能对象调用 -
别名
静态变量属于类的 也叫类成员
成员变量属于对象的 也叫对象特有属性
代码块
-
静态代码块
优先于主方法执行,优先于构造代码块执行,不管创建多少对象,静态代码块只执行一次,可用于给静态变量赋值,在类被加载之时,对类的内容进行一些初始化
-
构造代码块
随着对象的创建而执行
-
局部代码块
写在局部范围内的代码块,可以控制局部变量的生命周期
继承
-
概念
从代码上而言:在我们描述若干个类的时候,发现这些类中有大部分相同的成员,所以就可以把这部分重复的内容抽取出来,用另外一个类描述,新的类就是父类,其他的就是子类。
-
继承的好处
继承的出现提高了代码的复用性,提高软件开发效率。
继承的出现让类与类之间产生了关系,提供了多态的前提。 -
java不支持多继承
如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用变量时将产生歧义,无法判断应该使用哪个父类的变量
如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法
-
子父类中成员变量的特点(同静态变量一样)
父类中有(非私有) 子类中没有,访问父类的.
父类中没有 子类中有,访问子类的.
父类中有(非私有),子类中有,访问子类的.
父类中有(非私有),子类有同名静态变量,访问子类静态的.
当子父类中出现了同名成员函数,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。
注意:super和this的用法相似,this代表本类的对象引用,super代表父类内存空间,而不是父类的引用 -
子父类中成员函数的特点(同静态函数一样)
子父类当中存在重名函数,这种情况叫做函数的重写。
子类重写函数的权限 至少大于等于父类函数(非私)的权限。
静态只能覆盖静态,或者被静态覆盖,意思就是静态函数不存在重写。 -
子父类中构造函数的特点
父类的构造函数会优先于子类的构造函数运行,因为子类中所有构造函数的第一行有的默认的隐式super()语句。
构造函数进栈第一句super(),完毕之后再显式初始化。
对于super(参数列表)调用,前提是父类必须有相应的构造函数。 -
final关键字
final修饰类不可以被继承,但时可以继承其他类
final修饰的方法不可以被覆盖,但父类中没有被
final修饰方法,子类覆盖后可以加final
final修饰的变量称为常量,这些变量只能赋值一次,定义的时候必须有初始值
final修饰的引用类型变量,表示该引用变量的引用不能变,而不是引用所指的对象中的数据还是可以变化的。
例如:
class ExtendsDemo05{
public static void main(String[] args){
Zi zi=new Zi();
System.out.println(zi.num);//调用Zi的num
System.out.println(Zi.num);//调用Zi的
zi.show();//Zi重写了Fu的,所以打印的Zi的
}
}
class Fu{
static int num=10;
public static void show(){
System.out.println("Fu show....");
}
}
class Zi extends Fu{
static int num=20;
static void show(){
System.out.println("Zi show....");
}
}