Day8
一、代码块(也就是一对{}里的叫代码块)
- 根据位置,修饰符等不同分为四大类型:
1.局部代码块:
(1)位置:在方法里
(2)语法:{ 代码块的代码 }
(3)好处:生命周期是随着代码块的执行完就销毁,节省内存空间
2.构造代码块:
(1)位置:放在类里
(2)语法:{ 代码块的代码 }
(3)好处:其一,给成员变量赋值;其二,如果类里的某一个方法要在实例new的时候执行,就可以把这个方法放入代码块中
说明:
- 这个代码是由jvm执行
- 每次new一个对象的时候,都会执行这个代码块
- 代码块优先于构造方法执行
3.静态代码块:
(1)位置:在类里面
(2)语法:static{ 代码块的代码 }
(3)好处:其一,加载驱动;其二,加载配置文件
说明:
- 这个代码是jvm执行的
- 静态代码块只会加载一次
- 优先于构造执行
4.同步代码块
(1)位置:在方法里
(2)语法:synchronized(Student.class){ System.out.println(“da jia dou zai xue xi!”) }
(3)作用:在多线程中,保证数据的安全
二、继承
- 父类:(又称超类、基类)跟创建普通类的语法是一样
- 子类:(派生类)子类继承父类的关键字是extends
必须满足 is-->a(我是你爸爸) 的关系,才能使用继承,两个类才有关系
注意:继承的时候,父类是找不到子类的
在子类与父类中有同一个成员变量或方法,如果实例化是子类的对象,首先获取子类的成员变量或方法,如果子类没有,就依次往上寻找父类的成员变量或方法,如果到最后的祖宗类都没有这个变量或方法,就会报错
- 方法的重写:在继承中,修饰类型一样,方法名一样,参数一样
1.子类的方法的返回值作用域不能大于父类方法返回值得作用域(只能是Object和String、Integer等比较作用域);所有类的直接父类与间接父类都是Object()
2.访问修饰符:子类的访问修饰符权限不能高于父类(父类为public,子类就不能为private)
3.@Override 这个注释表示重写了父类的方法
重写的意思就是子类调用父类的方法的同时,也可以做自己的事情
在继承中,父子类的构造方法的使用:
1.如果没有调用父类的其他构造方法,系统会默认调用父类的无参构造方法
2.子类可以调用父类重载的构造方法,语法:super(参数)
3.调用父类的构造方法必须放在方法第一句,一个构造只能放一个super(),否则会报错
this的用法以及注意事项:
- 获取成员变量:this.成员变量;获取成员方法:this.成员方法();获取构造方法:this()
- 只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用
- 在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次
- 不能在一个类的两个构造方法中使用this互相调用
- 在java继承中,不能继承父类所有的私有的属性和方法;不能继承父类的构造方法,但可以调用父类的构造方法
总结:可以通过super关键字得到父类的属性、方法和构造器;可以同this关键字得到本类的属性、方法和构造器
- java里只能是单继承,只存在一个父类
- 继承的好处:可扩展性,可维护性==>好处大于坏处,开发中经常会使用继承;坏处:耦合度比较高
三、final:(最终,不能改变)
- final可以修饰类,语法:在类的前面加上关键字final(被final修饰的类不能够被继承)
- final修饰方法:父类里final修饰的方法不能够被继承
- final修饰成员变量:修饰的成员变量必须给出默认值,设置后不能改变
- final修饰局部变量:在局部变量中可以不给默认值,但一旦给出值就不能改变
在开发中,final一般与static配合使用