目录
(4)代码块???????
需要用static关键字修饰;
静态变量可以被该类所有对象共享;
可以通过类名调用,也可以通过对象名调用;
静态变量随着类的加载而出现在内存里,优先于对象的出现。
静态方法多用在测试类和工具类中;
可以通过类名调用;
静态方法只能访问静态变量和静态方法,
非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和成员方法。
静态方法没有this关键字。
静态方法不能调用实例变量;
javabean类:用来描述一类事物
测试类:用来测试其他类
工具类:用来帮助我们完成一些工作,具有私有化构造方法,方法定义为静态
通过extends实现继承关系
例如:public class OneBrandPhone extends Phone{}
OneBrandPhone称为派生类或子类,Phone为基类或父类或超类。
继承后子类不能继承父类的构造方法,可以继承所有的成员变量,继承public的成员方法,不能继承private的成员方法。
非私有 | private | |
构造方法 | 不能 | 不能 |
成员变量 | 能 | 能 |
成员方法 | 能 | 不能 |
java只能单继承,但可以多层继承。
每一个类都直接或间接继承与Object类。
字节码文件在方法区中临时存储。
只有父类的虚方法才能被子类继承。
虚方法即不能被private、static、final修饰的方法。、
上层会为下层提供虚方法表以便继承使用。
子类中访问成员变量如果没有关键字就是就近原则,如果有this关键字,则是本类中的,如果是super关键字,则是父类中的变量。没有多次super。
@Overrride放在重写后的方法上面,可校验重写的方法。
重写是覆盖了虚方法表中的方法。
重写方法的名称、形参列表与父类一致。
返回类型须小于等于父类。
私有方法不能重写,只有虚方法表中的方法可以被重写。
父类的构造方法不会被继承。
子类中的使用构造方法需要先访问父类中的无参构造。如果需要访问父类中的数据,而父类没有完成初始化,子类将无法使用。
子类构造方法的第一行语句为super(),不写也存在。
this即可视为一个变量,表明当前方法调用者的地址。
super代表父类存储空间。
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
this | this.成员变量 访问本类成员变量 | this.成员方法() 访问本类成员方法? | this() 访问本类构造方法 |
super | super.成员变量 访问父类成员变量 | super.成员方法() 访问父类成员方法 | super() 访问父类构造方法 |
多态形式:
父类类型 对象名=子类对象;
多态的实现需要有继承关系,有父类引用指向子类对象,有方法重写。
变量调用:编译看左,运行看左。
即编译时会看左边父类中有没有这个变量,没有就失败。
运行是实际上使用的是父类的变量。
方法调用:编译看左,运行看右
运行是使用的是子类的方法。
多态的弊端:不能使用子类的特有功能。需要变回子类类型。
可以自动类型转换,也可以使用强制转换。
Animal a =new Dog();
Dog d =(Dog) a;
包就是文件夹。包起名需要小写。
全类名或全限定:包名.类名
使用java.lang不需要导包,其他需要。
对于不同包中的同名类需要使用全类名。
final可以修饰方法、类、变量。
被final修饰的方法不能被重写,被final修饰的类不能被继承,被final修饰的变量只能被赋值一次。
private<空着不写<protected<public
private修饰后只能在同一个类中;
空着不写可以被同一个包其他类访问;
protected修饰后可以被不同包下的子类访问;
public修饰后不同包下的无关类也可访问。
包括局部代码块、构造代码块和静态代码块。
局部代码块、构造代码块格式:{代码}
局部代码块:指这一块运行完后就消失。
构造代码块可以把多个构造方法中重复的代码抽取出来,写在成员位置,在创建本类对象时,会先运行构造代码块,再执行构造方法。
也可以写在一个构造方法中,使用this(null,0)调用。
静态代码块:
格式:static{代码}
随着类的加载而加载,自动触发,执行仅一次。
使用在做一些数据初始化的工作时。