java:代码块,继承,final关键字

代码块:

也就是 放在一对 { } 里的叫代码块

1.局部代码块:

                      位置:  在方法里 

                       语法:{
                         
                            代码块的代码

                           }
                       好处: 生命周期:  是随着代码块的执行完,就销毁,节省内存空间

2.构造代码块:

放在 类里
语法{
代码块的代码

                          }

                          好处: 1.给成员变量赋值   2.   如果类里面的某一个方法要在实力的时候执行, 就可以把这个代码块放入在方法里 

说明:  1.这个代码是由jvm  执行  2. 每次new对象的时候  都会执行这个代码块    3.代码块优先于构造方法先执行 

3.静态代码块 :

位置:在类里面
语法 static{
代码块的代码
}
好处: 1.在加载去驱动 2.加载配置文件的时候

                说明: 1. 这个代码是由jvm执行的  2.这个静态代码块只会加载一次   3.优先于构造执行

4.同步代码块:

 位置:在方法里

          语法:     synchronized (Student.class){
           System.out.println("大家都在学习 java从入门到放弃!");
       }
      作用: 在多线程中数的安全 

在这里插入图片描述
在这里插入图片描述

继承

父类 : 超类 基类
子类 : 派生类
必须满足 is -a 关系 才能使用继承 两个类才能有关系
父类: 语法: 跟创建普通类的语法是一样的

   子类继承父类的关键字 是  extends   

    注意:  继承 的时候,父类是获取不到子类的东西  ,   暂时: 子类能够拿到 父类的所有的东西(包含属性和与方法)

      在 子类与父类中有同一个成员变量 如果 实例化是子类的 对象, 首先获取子类的成员变量, 如果子类没有,就依次往上寻找父类的成员变量,如果都没有这个变量就报错.

继承的好处和弊端

在这里插入图片描述

继承的注意事项

在这里插入图片描述
在这里插入图片描述
获取 变量的三种方法:
1.直接获取(一般是获取局部变量)
2.通过 this(获取成员)
3.获取super 父类的变量

继承中成员变量的关系

1、如果在子类中,出现了和父类中不同名的成员变量,那么在子类中可以同时访问这些不同名称的成员变量。
2、如果在子类中,出现了和父类中同名的成员变量,那么就根据“就近原则”访问成员变量:先在当前方法上,寻找该变量名称的定义,如果找到了,就使用局部变量;如果没有找到,就到当前类的成员位置上寻找该变量名称的定义,如果找到了就使用成员变量;如果还没有找到,就到父类的成员位置寻找该变量名称的定义,如果找到了,就使用父类的成员变量;如果还没有找到,就继续到父类的父类中寻找…一直到所有类的顶层父类(Object类),还没有找到,就编译报错。
如果在子类中出现了和父类中一模一样的成员变量名称,还想在子类中访问父类中的同名成员变量,可以使用关键字super
说明:一般在开发中,不会在子父类中,定义同名称的成员变量

继承中构造方法的关系

1、总体目的:在初始化子类的成员变量之前,先把父类中所有的成员变量初始化完成
总体的设计实现:所有的构造方法的第一句,都必须先访问父类的构造方法
2、规则1:
如果在某个类的构造方法中,没有显式调用其他的构造方法,那么系统默认在该构造方法的第一句,添加访问父类的空参构造(相当于在当前构造方法的第一句,写上super())
3、规则2:
如果在某个类的构造方法中,第一句显式的调用了父类的构造方法,那么系统将不再默认提供任何访问父类的构造方法的调用
4、规则3:如果在某个类的构造方法中,第一句显式的调用了子类的其他构造方法,那么系统也不再默认提供 任何访问父类的构造方法的调用
说明:虽然当前构造方法调用本类其他构造之后,不再直接访问父类的构造方法,但是当前构造所访问的那个本类其他构造,仍然会访问父类的构造方法,所以相当于让当前构造方法间接的访问了父类的构造方法
5、规则4:构造方法不能递归调用
6、【this语句】和【super语句】都只能出现在构造方法的第一行:
1、只能出现在构造方法中,不能出现在其他的成员方法中(如果能出现在其他成员方法中,就相当于将来使用对象,调用构造方法)
2、只能出现在第一行(如果出现在第二行,就说明在访问父类构造之前,已经进行了其他的操作)
7、【this语句】和【super语句】不能在同一个构造方法中共存
原因:this语句和super语句都必须在构造方法的第一行

继承中构造方法的关系

1、总体目的:在初始化子类的成员变量之前,先把父类中所有的成员变量初始化完成
总体的设计实现:所有的构造方法的第一句,都必须先访问父类的构造方法
2、规则1:
如果在某个类的构造方法中,没有显式调用其他的构造方法,那么系统默认在该构造方法的第一句,添加访问父类的空参构造(相当于在当前构造方法的第一句,写上super())
3、规则2:
如果在某个类的构造方法中,第一句显式的调用了父类的构造方法,那么系统将不再默认提供任何访问父类的构造方法的调用
4、规则3:如果在某个类的构造方法中,第一句显式的调用了子类的其他构造方法,那么系统也不再默认提供 任何访问父类的构造方法的调用
说明:虽然当前构造方法调用本类其他构造之后,不再直接访问父类的构造方法,但是当前构造所访问的那个本类其他构造,仍然会访问父类的构造方法,所以相当于让当前构造方法间接的访问了父类的构造方法
5、规则4:构造方法不能递归调用
6、【this语句】和【super语句】都只能出现在构造方法的第一行:
1、只能出现在构造方法中,不能出现在其他的成员方法中(如果能出现在其他成员方法中,就相当于将来使用对象,调用构造方法)
2、只能出现在第一行(如果出现在第二行,就说明在访问父类构造之前,已经进行了其他的操作)
7、【this语句】和【super语句】不能在同一个构造方法中共存
原因:this语句和super语句都必须在构造方法的第一行

this关键字和super关键字:

1、两个关键字的概念解释:
this:本类当前对象的引用,哪个对象调用this所在的方法,this就表示哪个对象
super:本类当前对象父类部分的引用,哪个对象调用super所在的方法,super就表示哪个对象中,这个对象所属类的父类中的数据

2、this和super访问成员变量:
this访问成员变量的格式:this.成员变量名
this既可以访问子类中的成员变量,也可以访问父类中的成员变量

super访问成员变量的格式:super.成员变量名
super只能访问父类中的成员变量

3、this和super访问成员方法:
this访问成员方法的格式:this.成员方法名称()
this既可以访问子类中的成员方法,也可以访问父类中的成员方法

super访问成员方法的格式:super.成员方法名称()
super只能访问父类中的成员方法

4、this和super访问构造方法:this语句和super语句
this可以访问本类的其他构造方法,格式:this(参数列表)
super可以访问父类中的构造方法,格式:super(参数列表)

重写的注意事项

1、私有的方法不能被重写
父类中的私有方法,在子类中根本就看不到,子类也继承不了父类中的私有成员,也就没有办法重写
在子类中,仍然可以定义一个和父类私有方法同名的方法,但是这不是对父类方法的重写,而是在子类中心重新定义了一个新的方法

2、方法在重写的时候,权限不能越来越小
记忆:子类重写父类,必须功能越来越强,权限不能越来越小

Java中继承的特点

1、支持单继承,不支持多继承:一个儿子只能有一个亲爹
一个子类,只能继承一个父类
不能同时继承多个父类
原因:如果一个类同时继承的两个类中,有相同的方法声明,却有不同的方法实现,就不知道该执行哪个方法实现,则有了安全隐患

2、支持多层继承,形成继承体系:一个人可以有儿子,可以有孙子、重孙、玄孙
一个子类可以有父类,父类也可以有自己的父类
顶层的父类,数据少,功能少,都是共性的功能,学习的时候先学顶层父类
底层的子类,数据多,功能多,很多都是特有的功能,真正使用的时候用的是底层的子类

final关键字

在这里插入图片描述

final修饰局部变量和成员变量的注意事项

1、final修饰局部变量的注意事项:
final修饰哪个变量,哪个变量不能改变
final修饰基本数据类型,变量中的值不能改变
final修饰引用数据类型,变量中的地址值不能改变
2、final修饰成员变量的注意事项:
final修饰成员变量,需要注意初始化时机,原因:
成员变量有很多的初始化步骤,所以有可能在我们没有手动给变量赋值之前,变量就已经赋值很多次了
时机:
在构造方法结束之前,必须给final修饰的成员变量赋值
final修饰的成员变量,没有默认初始化
结论:final修饰的成员变量,只能有显式初始化、构造方法初始化

final:最终,不能变改变

  final: 可以修饰  

1.类 
         语法:实在类的前面加上这个关键字 final
         注意点: 被final 修饰的类不能够被继承  

2.方法:   父类里final 修饰符方法不能够被继承



3. 成员变量    final 修饰的成员变量  必须给其默认的值, 设置后就不能改变了


4.局部变量   在局部变量中final 可以不给默认 , 但是一旦设置默认值之后就不能变改变 

 在开发中  final 一般与   static 配合的使用 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值