Java思想 Part 1---对象入门

对象入门

概览

在这里插入图片描述

一、抽象、对象与方法

计算机的发展本质上就是层层的抽象。当寄存器抽象为01单元,当复杂线路不考虑实现,抽象为运算器、寄存器,这些小组件再次抽象为笼统的CPU,CPU和更多的组件被抽象为电脑…
对于任意事务都可以抽象的去理解,将其视为对象,不考虑其具体实现,只考虑其暴露出来的方法。
计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务本质上是一个个的对象协作的过程。面向对象编程就是按现实业务一样的方式将程序代码一个个对象进行组织,这样就可以在程序中实现现实中的业务。
面向对象语言有封装、继承、多态和抽象四大主要特征
在这里插入图片描述
在面向对象设计方法中,将具体的事物抽象化,编程时所需的即是新建各种各样的数据类型,在建好一个类时可以生成对象(示例逢坂大河很明显是单例模式),随后将该对象作为程序的元素进行处理。
在这里插入图片描述

public class Light {
    private int lightDu;
    private boolean statue;
    public void open(){
        statue=true;
    }
    public void close(){
        statue=false;
    }
    public void lightUP(){
        lightDu++;
    }
    public void lightDown(){
        lightDu--;
    }
}

对于台灯这个抽象的对象来说,暴露出来的四个方法控制着隐藏起来的两个变量,同时在外部使用台灯这个对象的时候不需要考虑方法的实现,只需要知道其能做到什么即可。
对于一个类的成员方法,有些方法是需要对访问的成员进行控制,防止程序员接触他们不应该接触的东西又或者是是否允许库设计人员修改内部结构,所以Java提供了访问修饰符。

  1. public:意味着后续的定义任何人均可使用
  2. private:意味着除了自己、类的创建者以及此类的内部成员,其他人均不可以访问后续的定义信息
  3. friendly:也是default涉及到包装或者封装的概念,也被称为包访问修饰符
  4. protected:继承的类可以访问受保护的成员

重复使用一个类,最简单的方法就是重复使用那个类的对象,但同时也能将那个类的对象放入一个新的类中去使用,就像智能家居小爱同学,里面有台灯、电饭煲等对象被其控制。这样的一个群体被称为组织。在现有类的基础上组织一个新类,有时我们也将组织称作包含关系。

对象的组织具有极大的灵活性。新类的成员对象通常被设为私有,使用这个类的客户程序对象的不能直接访问,这样可以不修改代码的前提,修改这些成员,也能达到修改的目的,相比于继承提供了更大灵活性

二、继承:重新使用接口

在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干条新内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,是类之间的一种关系,提高了软件的可重用性和扩展性。
就像我们面试的时候没有介绍自己拥有俩眼睛一个嘴巴,因为我们继承了人族这个父类,并作为程序员这个子类扩展了更多的计算机技能这些属性,我们需要向面试官透露自己这个对象的属性值是多少。
在这里插入图片描述

1.改善基础类

extends关键字暗示着我们需要为接口“扩展新的功能”,但是实际也有为某种特殊情况对父类进行修改,为了修改一个函数,只需要为衍生出来的新类的函数更新其实现即可,尽量使用的接口一致,但是该子类的实现是不同的。

2.等价与类似关系

面向对象的六大原则中有一个里式替换原则,我更倾向称其为替父从军原则。
继承必须确保超类所拥有的性质在子类中仍然成立,它的主旨就是,能够使用基类的地方,必然也能够透明的使用其子类,并且保证不会出错。为了保证这种透明的无差别的使用,子类在使用时不应该随意的重写父类已经定义好的非抽象的方法。因为这些非抽象方法,类似于某种职能或契约,当父类保持这种约定时,子类也应该遵循并保证该特性,而非修改该特性。
通过继承衍生出来的类是与基础类完全相同的基础类型,因为拥有完全相同的接口,所以我们可以直接说龙与虎是一部校园恋爱番,因为继承于校园恋爱这个父类,基础类与衍生类之间有一种等价关系。
但有时候衍生类加入新的接口元素,不仅仅扩展了接口,也创建了一种新的类型,这种新的类型仍可替换为基础类型,但是作为基础类型时的替换不是完美的,无法访问新的函数,只能称为类似的关系。

三、对象的创建与存在

创建一个对象包括对象的声明和为对象分配变量的连个步骤。
使用new运算符和类的构造方法为生命的对象分配变量,即创建对象。如果类中没有构造方法,系统会调用默认的构造方法,默认的构造方法是无参数的,且方法体中没有语句。

    public static void main(String[] args) {
      Test a,b;
      //在使用类声明一个变量时,该变量的内存中并没有任何数据
      //此时的ab只是null对象无法使用,他没有任何实体
      a=new Test();
      b=new Test();
      //new运算符和构造方法进行运算时要做两件事,为各个属性分配内存然后执行构造方法中语句。
      //new运算符在为变量height、weight、head、ear分配内存后,
      //将计算出一个称为引用的值,该值包括代表这些成员变量内存位置及相关信息的重要信息,
      //即new Test()是一个值。
        System.out.println(a);
    }

在这里插入图片描述
new运算符只能和类的构造方法进行运算,运算的结果是一个十六进制的数,这个数称作对象的引用,即表达式new Test()的值是一个引用,new运算符在计算出这个引用之前,会给test类中的成员变量分配内存空间,然后执行构造方法中的语句,当计算出引用后,才代表对象被创建,诞生。
对象的引用存在于栈中,对象的实体(分配给对象的变量)存在于堆中,栈和堆都是Java用来在RAM中存放数据的地方。Java自动内存管理栈和堆。栈的优势是存取速度比堆快,缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。堆的优点是,可以动态的分配内存大小,生存期也不必事先告诉编译器,Java的垃圾回收器会自动的收走这些不再使用的数据。但缺点是需要运行时动态分配内存。

四、多型对象

继承会以产生一系列的类来收场,所有的类都建立在统一的接口基础上。对于一系列的类,需要进行的处理是将衍生类的对象当做基础类的一个对象对待,这意味着我们只需要编写单一的代码,令其忽略类型的特定细节,只与基础类打交道。这样代码与类型信息分开。更容易编写。
多形性其实就是多态,将一条消息发送给对象,如果不知道对方的具体类型是什么,但采取的操作同样是正确的,这种情况就叫多态。对面向对象的程序设计语言来说,它们用以实现多态的方法称为动态绑定(JVM关于引用对象有详细的讲解),编译器和运行期系统会负责所有的细节控制,我们只需要确定会发生什么。
Java中存在两种多态:重载和重写,重写是与继承有关的多态,重载则是功能的多态性,简单理解就是传参类型不同,运行的代码也不一样。

五、其他

违例控制:解决错误

“违例控制”将错误控制方案内置到程序设计语言之中,有时甚至内建到操作系统之中,“违例”是一个特殊的对象,它会从产生错误的地方扔或抛出,随后被设计好的专门捕获这种异常的违例控制器所捕获,在情况变得不对劲时,可能有几个违例控制器并行捕获对应的违例对象。由于采用的是独立的执行路径,所以不会干扰到我们的常规执行代码,这样使代码的编写变得简单。同时抛出的异常不同于函数的错误或者函数设置的标志,错误值或者标志是可以被忽略的,但是违例或者说异常是无法被忽略,会在程序之后的某个地方进行处理,然后恢复程序的正擦和你打个运行。
Java的违例机制与大多数程序设计原因都不同,违例控制模块是从一开始就封装好的,所以必须使用它,如果没有写正确的代码去处理违例,就会得到一条编译期出错提示,这样可保证程序的连贯性,使错误控制变得更加容易。

多线程

在计算机操作系统中,有一个大的章节就是对多任务进行控制。许多程序设计问题都要求程序能够停下手头的工作改为处理一些其他的问题,再返回主进程。通过多种途径达到这个目的。操作系统也有多进程操作系统和多线程操作系统的区别。
有些时候,中断对于那些实时性很强的任务来说是很有必要的。但还存在很多的问题,他们只要求将问题划分进入独立运行的程序片段中,使整个程序能更迅速地响应用户的请求。在一个程序中,这些独立运行的片段就叫做线程,利用他们的编程概念就称为多线程处理。

永久性

创建一个对象后,只要我们需要,他就会一直存在,但在程序结束运行时,对象的生命周期也就随之戛然而止,但是某些情况下希望在程序停止后也能保存相应的资源,但Java 1.1提供的持久性保存功能有限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值