java_DAY10:static修饰符,继承
1.static修饰符
static表示“全局”或者“静态”的意思,用来修饰成员变量(属性)和成员方法(方法),也可以形成静态static代码块;
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类的实例,被类的所有实例对象共享;
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,static修饰的代码块表示静态代码块,
static代码块
static 代码块,是在类中独立于类成员的 static 语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM 加载类时会执行这些静态的代码块,如果 static 代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个静态代码块只会被执行一次。
静态代码块执行的时机:
静态代码块在对象创建之前执行,每创建一个对象都会执行一次构造方法。而每个静态代码块只会被执行一次。第一次创建对象之前
static变量,静态变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;
另一种是没有被static修饰的变量,叫实例变量。实例变量必须通过对象来调用。
静态变量特点:
1、被static修饰的变量静态变量,非静态变量叫实例变量
2、在内存中只有一个,在加载类的时候创建,被所有方法和对象共享
3、其他类中,可以直接通过类名访问(可以通过类名直接调用)
static方法,静态方法
静态方法就是被static修饰的方法,没有被static修饰的方法称为实例方法,实例方法必须要对象才可以调用,
静态方法可以直接通过类名调用,任何的实例也都可以调用
静态方法特点:
1、静态方法中不能使用this和super,this当前对象
2、不能直接访问所属类的实例变量和实例方法 , 面试题,静态方法能不能访问非静态资源? - 可以的
3、可直接访问类的静态变量和静态方法,静态能够调用静态资源,不能直接调用非静态资源
4、可直接通过类名.方法名访问
5、规定:静态只能调用静态,非静态只能调用非静态
面试题:静态方法能不能调用非静态方法?
静态方法能不能直接调用非静态的方法?
静态变量和实例变量的比较:
2:继承
在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注目的是“复用代码”,尽可能的复用代码是我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大特性之一---继承
2.1:什么是继承
继承顾名思义,继任,承接,传承的意思。那么我们先来看看生活中的继承关系有哪些?最常见的:父母子女;汽车,电动车,自行车和车。无论哪种车,都有具备车的特性。再比如说:家里面的电饭锅,电磁炉,电冰箱。他们都属于电器类,都具有名字这个属性,也都需要用电这个方法。如果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?我们能够从一个个对象中抽象出来一个类。那么我们也应该能够从具有包含关系的一个个类中抽象出一个具有共同属性和方法的新类,也就是父类。Java中的继承使用的是extends关键字,继承的类叫做子类(扩展类),被继承的类叫做父类(超类或者基类)。凡是这种可以有包含关系的类都能实现继承关系。
2.2:继承中的术语和注意事项
1、类:类是具有共同属性和行为的一组对象。它是创建对象的模板或蓝图。
2、子类:子类是继承其他类的类。它也称为派生类,扩展类或子类。
3、超类/父类:超类是子类继承功能的类。它也称为基类或父类。-通用的属性和方法
4、可重用性:正如名称所指定的那样,可重用性是一种机制,可以帮助您在创建新类时重用现有类的属性和方法。
5、Java中类只支持单继承,即一个类只能有一个直接父类
2.3:使用继承
1、编写父类,创建公共的属性和方法
2、编写子类使用extends继承父类
3、编写子类中特有的属性和方法
注意:
1、super关键字代表父类,只能出现在子类的方法和构造方法中
2、在子类构造方法中使用super调用父类构造方法,必须位于第一句;
3、子类不可以直接访问父类中定义为private的属性和方法 - private的东西是不能被继承的。
子类不能继承父类的情况:
1、private修饰的属性和方法
2、子类和父类不再同一个包下,不能继承默认访问权限的成员
3、不能继承构造方法
2.4:什么时候使用继承
符合 is a 关系的设计时,可以考虑使用继承。
2.5:继承的优点
将子类共有的属性和方法抽取到父类中,减少重复代码,实现代码的重用
空指针异常只有在“空引用”访问实例相关的,都会出现空指针异常