Java面向对象
成员变量
-
在类体中定义的变量为成员变量,作用范围是整个类,只要在这个类中都可以访问到它。
-
成员变量包括实例属性类属性。
-
类属性从类被加载开始存在,直到系统完全销毁该类,类属性的作用域与该类的生命周期相同。
-
实例属性则从类的实例被创建起开始存在,直到系统销毁该实例,实例属性的作用域与其对应的生命周期相同。
成员变量与局部变量的区别
- 在类中的位置不同
成员变量:在类之中,方法之外。
局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)。
- 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失。
局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失。
- 初始值
成员变量:有默认初始值。
部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错。
this关键字
-
this关键字代表本身
-
this关键字主要用途
用this代表自身类的对象(直接使用this、使用this引用成员变量、使用this调用成员方法)。
用this在自身的构造方法内部调用其他的构造方法。
解决实例变量与局部变量同名的问题
- 当方法中的局部变量与实例变量同名时,在方法中如果不使用this前缀调用实例变量,则在方法中默认调用方法中的局部变量(形参也是局部变量)。
面向对象的三大特征:
-
封装
-
继承
-
多态
封装
-
封装是面向对象的三大特征之一。
-
封装将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
-
封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改。
一个良好的封装可以实现以下目的:
- 隐藏类的实现细节。
- 让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访问。
- 可进行数据检查,从而有利于保证对象信息的完整性。
- 便于修改,提高代码的可维护性。
实现良好封装的途径:
- 隐藏对象的属性和实现细节,不允许外部直接访问。
- 暴露出方法,让方法控制对这些属性进行安全的访问和操作。
- 封装实际上有两个方面的含义:隐藏该隐藏的,暴露该暴露的。
- Java封装的实质:使用访问控制符private隐藏属性,以及public暴露方法。
Java访问控制符
static静态关键字
Java类的运行包括类加载和实例化两个阶段。
当一个类被加载至JAM中,静态成员会被初始化。
静态成员不属于某个对象,仅属于静态成员所在的类。
- 被static修饰的成员即为静态成员。
静态代码块
静态属性
静态方法
静态方法
-
被static修饰的方法称为静态方法。
-
静态方法也可通过类名直接访问,也可通过对象名访问。
-
静态方法中不能访问非静态的成员,如实例属性、实例方法。
-
静态方法通常作为工具方法,因为静态方法不会因为实例的不同,而影响方法最终的执行效果。
静态代码块
-
如果需要在类加载时执行某一操作,则可以使用静态代码块。
-
静态代码不存在任何方法体中,它在Java虚拟机加载类时执行.
-
如果类中包含多个静态代码块,则Java虚拟机将按照它们在类中出现的顺序依次执行。
-
静态代码块只会被执行一次。
提问
- 为什么需要静态代码块?什么场合需要用到静态代码块?
静态方法在类加载后,虽然在内存中已经分配了内存空间,但只有显式地调用静态方法时,该方法才会被执行。如果需要在类加载时执行某一操作,则可以使用静态代码块。
静态代码块
分析
-
虽然main(方法是程序的入口方法,但该方法是在类加载完成后,由JVM虚拟机调用该方法。
-
而静态代码块是在类加载时就执行。加载完静态代码块后,才执行main()方法。
总结
-
变量可以分为成员变量和局部变量,成员变量是在类范围定义的变量,局部变量是在方法中定义的变量。
-
成员变量分为类属性和实例属性两种,定义属性时没有static修饰符修饰的就是实例属性。类属性的作用域与该类的生命周期相同,例属性的作用域与其对应的实例的生命周期相同。
-
this关键字代表自身。
-
封装将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
-
Java访问控制符可见性范围由小到大为:private->default->protected->public。
周期相同,例属性的作用域与其对应的实例的生命周期相同。 -
this关键字代表自身。
-
封装将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
-
Java访问控制符可见性范围由小到大为:private->default->protected->public。
-
静态成员变量属于其所在类,被类中的所有实例共享,静态成员变量可通过类直接访问,也可通过类的实例访问。静态方法不能访问非静态的成员。