认识面向对象和面向过程的区别
面向过程:就是处理事务的时候每一步骤都要了解
面向对象:就是将要处理的事务交给对象 将我们从执行者转换成指挥者
面向对象的总思想就是 不断的找对象,使用对象来处理的事务 如果没对象就创建对象来
不断的维护和管理对象之间的关系
这样的好处是可维护性和扩展性 非常好
面向对象的特征: 封装 继承 多态
类与对象
我们学习编程就是要将现实生活中的事务用程序来描述出来
现实中的各种事务的属性就是程序里面的成员变量
现实中的各种事务的行为就是程序里面的方法
所有我们设计程序的时候要多考虑下现实事务的各个属性和行为 不要违背现实事务的原则
类就是一组相关属性和行为的集合
对象就是该类事物的具体体现
在JAVA文件中写两个类:一个是基本类 一个是测试类
一般文件名和测试类的名字相同
如何创建对象: 类名 对象名 = new 类名();
如何使用成员变量: 对象名点变量名
如何使用成员方法: 对象名点方法名
成员变量和局部变量的不同
1.在类中的位置不同
成员变量在类中方法外
局部变量在方法定义中或方法声明上
2.在内存的位置不同
成员变量在堆内存
局部变量在栈内存
3.生命周期不同
成员变量:随对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的弹栈而消失
4.初始化不同
成员变量:有默认的初始化值
局部变量:没有初始化值 需要赋值才能使用
注意:局部变量名字可以和成员变量名称相同 在方法中采用的是就近原则
基本数据类型有:byte short int long float double char boolear
引用数据类型有:数组 枚举 类 接口
匿名对象 就是没有名字的对象
匿名对象 仅仅只能调用一次而已 如果要调用多次是不合适的
匿名对象可以作为实际参数传替
面向对象的第一大特性: 封装
封装 是指隐藏对象的属性和实际细节 仅对为提供公共的访问方法
封装的好处: 隐藏实现细节,提供公共的访问方式 提高了代码的复用性 提高了安全性
封装的原则:将不需要的的内容隐藏起来 把属性隐藏提供公共的访问方式
封装的关键字: private (私有的)
private 的特点:
是一种权限修饰符
可以修饰成员变量和成员方法
被private 修饰的成员只能在本类中被访问
构造方法
就是给对象的数据进行初始化
构造方法的特点
方法名和类名一致
没有返回值 连void都没有
没有返回值 return
构造方法的重载
方法名相同 与返回值类型无关
构造方法的注意事项
如果我们没有给出构造方法 系统就自动给我们一个无参的构造方法
如果我们给出了构造方法 系统将不会再给构造方法
建议:我们永远都手动给出一个无参的构造方法
static 关键字
特点:
随着类的加载而加载
优先于对象的存在
被类的所有的对象共享
可以通过类名调用
static 的注意事项
在静态方法中是没有this 关键字的
这是因为静态是随类的加载而加载 this是随对象的创建而存在
静态比对象先存在
静态方法值能访问静态的成员变量和静态的成员方法
静态方法:成员变量只能访问静态变量 成员方法值能访问静态成员方法
非静态方法:成员变量可以是静态也可以是非静态的 成员方法可以是静态的也可以是非静态的
总的一句话就是:静态的只能访问静态的
(静态变量和成员变量的区别)
* 静态变量也叫类变量 成员变量也叫对象变量
* A:所属不同
* 静态变量属于类,所以也称为为类变量
* 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
* 静态变量存储于方法区的静态区
* 成员变量存储于堆内存
* C:内存出现时间不同
* 静态变量随着类的加载而加载,随着类的消失而消失
* 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
* 静态变量可以通过类名调用,也可以通过对象调用
* 成员变量只能通过对 象名调用
代码块
在JAVA中用{}括起来的代码被称为代码块
代码块分为:局部代码块 构造代码 静态代码块 同步代码块
局部代码块:在方法中出现 限定了变量的生命周期,及早的释放,提高了内存使用率
构造代码块:在类中方法外出现 多个构造方法中相同代码存放到一起 每次调用构造方法都执行 并且在构造方法前执行
静态代码块: 在类中方法外出现 并加上 static关键字修饰 用于给类进行初始化 在加载的时候执行 并且只执行一次 一般用在加驱动
面向对象的第二大特性: 继承
继承:让类与类之间产生关系,子父类关系
继承的好处:提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
继承的弊端:类的耦合性增强了
开发的原则:高内聚 低耦合
继承的特点:java中只支持单继承和多层继承 不支持多继承
如果想用整个体系的所有功能用最底层的类创建对象
如果想看这个体系的共性看最顶层的类
继承的注意事项:
子类只能继承父类所有非静态的成员方法和成员变量
子类不能继承父类的构造方法,但可以通过super关键字来调用
不要为了获取部分功能而去使用继承 ,继承要秉着 is a 的关系
this 和 super 的使用区别
this 是调用本类的成员、方法、构造方法 也可以调用父类的
super是调用父类的成员、方法、构造方法,不可以调用子类
方法的重写 就是子父类出现了一模一样的方法,而功能主体可以重写父类的方法
方法重写注意事项
父类中私有方法不能被重写
子类重写父类方法时 访问权限要大于或等于父类的权限 最好是一致
父类静态方法,子类必须通过静态方法进行重写(其实这不算重写 只能算是静态区的方法覆盖)
Override和Overload的区别?Overload能改变返回值类型吗?
Overload(重载) 可以改变返回值 值看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法 与返回类型有关 返回值是一致的或者是子父类
方法重载:本类中出现的方法名一样,参数列表不同的方法 与返回值无关
子类对象调用方法的时候是先在本身类里面找 如果没有就到父类中去找
final修饰特点
* 修饰类,类不能被继承
* 修饰变量,变量就变成了常量,只能被赋值一次
* 修饰方法,方法不能被重写
面向对象第三大特性:多态
多态:就是事物存在的多种形态
多态的前提:要有继承关系 要有方法重写 要有父类引用指向子类对象
成员变量 编译看左边(父类) 运行看左边(父类)
成员方法 编译看左边(父类) 运行看右边(子类)
静态方法 编译看左边(父类) 运行看左边(父类)
多态的好处
* a:提高了代码的维护性(继承保证)
* b:提高了代码的扩展性(由多态保证)
|
|