java面向对象、内存、封装、变量、重写和重载讲解

java面向对象、内存、封装、变量、重写和重载讲解

理解面向对象

  • 面向对象是相对于面向过程的,面向对象和面向过程都是一种思想;
  • 面向对象和面向过程的比较:
    • 面向对象比面向过程更加高级
    • 面向对象强调的是对象,面向过程强调的是过程
    • 面向对象更加符合人们的思考习惯
    • 面向对象使得人变成了指挥者
    • 面向对象将功能实现封装进对象,强调的是具有功能的对象
    • 面向对象关注的是解决问题需要哪些对象

内存的分类:

  • 栈区:存放数据的特点:先进后出,我们将局部变量和函数放入栈区,使用完立即释放
  • 堆区:存放的是实体(数组和对象),实体可以同时存储多个数据;堆区内部的数据(变量被释放,一个实体没有被指向的时候称为垃圾)会在某个时刻被释放–通过垃圾回收机制,垃圾回收机制是通过一个线程控制的,这个线程的等级比较低,所以不会被立即释放。
  • 方法区:方法区和堆内存一样,是各个线程共享的数据区域,看到这个方法区这个名字很快能想到这个区域存方法信息,事实上方法区存放的数据很多,包括被虚拟机加载的类信息,用final修饰的常量,String对象,用static修饰的静态变量。
  • 本地方法区:常说的常量池,String类的字符串常量

成员变量

  • 在创建对象的时候被赋予默认值
  • 可以在类中定义变量的时候直接赋值
  • 可以在没有被static修饰的方法以外被直接使用
  • 成员变量和局部变量的区别:
    • 作用域:成员变量是整个对象,局部变量是从定义开始到所在的函数/if/for结束
    • 默认值:成员变量会有默认值,局部变量没有默认值,要使用的时候必须先定义默认值
    • 释放机制:成员变量跟对象保持一致,通过垃圾回收机制回收,局部变量使用完后立即释放。
    • 存放位置:成员变量放在堆区中的对象中,局部变量放在栈区的方法区中
  • 成员变量的分类
    • 静态的(static修饰)和非静态的
    • 静态的:静态的方法和变量—可以引用调用也可以通过类名调用,推荐使用类名调用
    • 非静态的:非静态的方法和属性—只能通过引用调用

封装

  • 解释:
    • 隐藏实现细节,提供公共访问方式(<根据对属性的封装来说明>把对成员变量的访问进行私有化,通过一个公共方法间接实现了访问)
  • 方法:
    • 将成员变量设置为私有的属性(private),方法设置为公用的(public),用get、set方法方便外接对属性设置值和取得值。
    • 代码实例:
    public class Person {
        private String name;//将属性设置为私有的
        private int age;//将属性设置为私有的
        public Person() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {//方便外界获取值
            return name;
        }
        public void setName(String name) {//方便外界为属性设置值
            this.name = name;
        }
        public int getAge() {//方便外界获取值
            return age;
        }
        public void setAge(int age) {//方便外界为属性设置值
            this.age = age;
        }
    }
  • 总结:封装是java的三大特性之一,封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
    封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

重写和重载

  • 涉及的是子类和父类之间的同名方法,要求方法名、参数列表、返回值类型相同,访问修饰符不能严于父类
  • 重写:
    • 简单的解释就是将父类有的方法用相同的方法名在子类再定义一次
    • 注意的是方法名和参数个数和类型必须一样
  • 重载:
    • 简单的解释就是将父类有的方法用相同的方法名在子类再定义一次,但是呢参数的个数和类型不能相同
    • 注意的是方法名必须一样,但是参数个数和类型必须不能一样
  • 注意点:
    • 私有方法不能被重写
    • 子类的同名方法的权限大于等于父类的同名方法
    • 静态的方法只能覆盖静态的方法

猜你喜欢

转载自blog.csdn.net/lds_include/article/details/81348767