代码块:放在 大括号**{ }** 的叫代码块
{ 代码块 }
分为四大类:
1、局部代码块:写在方法里面
随着代码块的执行完就销毁,节省内存空间
访问修饰符 返回值类型 方法名(){
局部代码块
}
2、构造代码块:写在类里面
由 jvm 执行,实例化对象的时候自动执行。
能给成员变量赋值
某个方法要在实例的时候执行就可以放进去,优先于构造方法执行
访问修饰符 类名{
{
构造代码块 //没有static修饰!!
//例如:
System.out.println();
}
}
3、静态代码块:(重点)写在类里面
优点:加载驱动 、加载配置文件不用重复加载
由jvm执行,静态代码块只会执行一次,而且优先于构造代码块执行,优先于构造方法执行
访问修饰符 类名{
static {
代码块的代码
}
}
4、同步代码块:写在方法里面
用于多线程的安全
继承的关键字是:extends
父类:基类、超类
子类:派生类 衍生类
继承 优: 可扩展性 ,可维护性 缺:耦合度比较高
只有单继承的方式,但是可以通过a是b的父类,b是c的父类来表达多重继承。
继承的时候父类获取不到子类的东西。
子类能够拿到 父类的非私有的东西(包含属性和与方法)
子类实例化对象获取成员变量时:
子类与父类中有相同名字的成员变量,首先获取子类的变量,如果子类没有,就依次往上面寻找,如在没有,在依次往父类的父类找,依次找完都没有就报错。
获取变量三种方法:
1、直接获取,一般是局部变量 2、通过this.成员变量(获取成员变量) 3、获取super父类变量(super.父类公有的变量名)
方法的重载:1. 在同一个类里 方法名相同 参数的个数或者是参数的类型不同 与返回值没有关系
方法的重写:子类继承父类中的方法,但有时子类并不想一味地地继承父类的方法,而是想作一定的修改,这就是方法的重写。
方法前看到:@Override 看到这个注解肯定重写了父类的方法
方法的重写的特性:
在继承中,方法名相同,参数完全一致
子类的作用域不能大于父类方法 返回值的作用域
所有类的直接父类或者间接父类都是 Object();
子类访问修饰符权限 不能严于父类的(即低于父类的)
访问修饰符高低:private < 默认修饰符 < public)
例如 父类的是公有访问权限,子类不能给私有的访问权限 private
获取方法的方法:
调用自己本身的方法通过this调用(可以省略) this. 方法名 , 调用父类的方法是使用super关键字 super.方法名()
调用父类的构造方法时super必须放在构造方法的第一句,否则报错
this 三种获取方式: 获取成员变量 this. 成员变量的名字 this.方法名字() this() 调用构造方法
super 三种获取方式:super.属性名 得到其方法 super.方法名() 得到其构造 super();
继承中的构造方法调用:
子类不能继承父类的构造方法,但是可以调用父类的构造方法,
而且是先访问父类的构造方法,在访问本类子类的构造方法。
如果子类没有调用父类构造方法,系统会默认调用 父类的无参构造
子类可以调用父类的重载构造方法,语法:
调用父类无参构造:
super( );
//
调用父类有参构造:
super(参数1,参数2,...);
final:可以修饰类 、方法、变量。
final 修饰类时、修饰方法时都不能被继承
final 修饰的成员变量 必须给其默认的值, 而且设置后就不能改变
局部变量中final 可以不给默认值 , 但一旦设置默认值之后就不能变改变
在开发中 final 一般与 static 配合使用
总结:
继承的关键字是extends,只有单继承的方式,不支持多继承,但是可以通过a是b的父类,b是c的父类来表达多重继承。super.属性 是访问父类的变量,如果我想访问爷爷类的某个变量的,应该怎么访问呢?