java和面向对象理解

前言

大佬们都说,语言只是工具,重要的是编程的思想,数据结构,算法。但是火急火燎的去做这些高屋建瓴的东西,总是感觉虚。我觉得如果你想在IT行业有更高建树,必须要基础扎实,猥琐发育,细致的掌握一门杰出语言的特性和原理,当你要与时俱进学习一门新的语言的时候,才能信手拈来,深刻掌握,毕竟新的语言都是站在巨人的肩膀上发展起来的,原理的东西变化不会太多。因此我用了一年时间,每天在工作之余挤出些时间研究了一下java圣经《Thingking In Java》(之前看了一些网络运行原理和计算机原理之类的书),如今就是抽出时间,将各章的知识做一个梳理,一方面是对知识做一个系统总结,另一方面就是希望对别人也有帮助。

正文

1、本章内容

《java编程思想》第一章概括的讲了oop是什么。oop的特点,如封装、继承、多态。java的特点,如容器、对象生命周期、异常处理、并发编程、网络编程。通过和其他编程语言进行比较,介绍oop的优势,以及java的优势。

2、oop是什么

oop是面向对象编程。object oriented program。

人类的语言是对世界万物的抽象,编程语言是对计算机底层的抽象。计算机底层------>汇编语言------>命令式语言(C,BASIC,FORTRAN)------>oo语言(java,c++,c#等),编程语言的演变历史,就是更高级抽象的历史。

oo语言的杰出之处,就是设计过程摆脱了命令式语言对计算机思维的依赖,我们可以把万事万物都抽象成类,现实世界中不同类的事物有名字(oo中叫标识符,类名),特点(oo中又叫成员变量,状态),行为(oo中又叫方法,接口),oo中每一个类可以产生对象,而这些对象不就是现实生活中的事物吗!!比如创建一个Dog对象,这个对象属于某类东西(?),这个对象有名字(如旺财),有特点(颜色黑、年龄18、性别母),有行为(如睡觉、玩耍)。我们可以随意定义类,产生对象,和现实世界对应。这样,在你书写程序时,只要调集程序世界的万事万物,告诉他们要去做什么,就组建了你自己的程序Word。这样的代码无论开发、维护、阅读,要比面向过程的思想要杰出许多。

类的本质就是一个数据类型,我们都知道计算机基本数据类型byte,short,int,long,float,double,char,boolean,而oo允许你根据你想要的世界创建自己的数据类型class,来扩展编程语言,编程系统欣然接受新的类,并且像对待内置类型一样去管理他们。你不觉得下面两行代码看起来一样吗?

数据类型   名字  = 值 ;

int number = 23;

Dog wangcai = new Dog();

3、oop特点

a)封装,将变量,方法的代码内聚到一个类中,方便代码的管理。将内部实现细节通过private,protected,public等访问控制设置边界,有利于开发者以后对代码的修改(不用担心修改private会影响使用代码者),有利于使用代码者的学习成本(仅需关注public暴露的内容即可),有利于减少bug(private作为内部实现不允许调用,可以减少很多bug产生)。

b)继承,提高代码的复用性,当继承一个类时,就创造了一个新的类型,新的类型包括基类的所有成员(包括private,虽然在子类中不可访问),也包括基类的所有接口。子类可以新添成员,新添接口或者覆盖接口。理解继承,是理解oo的重要门槛。继承的特点是基类引用可以指向子类对象,如下:

public void noise(Animal animal){
    //代码实现
}

该参数可以传入Dog或Cat,这样可以极大提高代码的复用性和扩展性。

c)多态,基于继承,面向对象程序设计使用了后期绑定的概念,编译器只对基类引用的方法是否存在、参数和返回值类型进行检查,而只有在运行时期才会决定确切运行的代码,如下:

public void noise(Animal animal){
    //代码实现
    animal.bark();
}

在继承的特性上,Animal可以传入Dog或Cat,调用发声的方法时,传入Dog则汪汪,传入Cat则喵喵,运行时根据传入的参数的不同,同一段代码可以产生不同的行为,这就是多态。多态基于继承。

一句话,基类引用指向子类对象是继承特性,基类引用调用行为时根据不同的对象产生不同的行为是多态特性。

3、java特点

a)容器,容器的作用就是持有其他对象引用。java中容器不能持有基本类型变量。本质上容器的引用类型是Object,为了类型安全,引入了泛型的概念,这样开发者就不用手动向上、向下转型,编译器帮忙处理这些细节。

b)对象生命周期,java是动态内存分配方式,只有在运行时,new时才在堆上分配对象的动态实例,而回收对象是垃圾回收器自动进行,可以避免内存泄漏问题,这是java安全性和简化开发的杰出之处。(c++在编程阶段将对象置于堆栈上或静态存储区就已经决定了对象的生命周期)

c)错误处理,java的异常处理格外引人注目,其一开始就内置了异常处理,强制你必须处理它。而且是唯一可以接受的错误报告方式。异常提供了一种从错误状态中恢复的途径,而不是只能退出程序,你可以处理异常并恢复程序的执行,这有助于编写出更健壮的程序。

d)并发编程,可以通过简单的方式增加线程,极大提高程序的运行效率。当多个线程处理共享资源的时候,这时候要格外注意,极有可能会造成莫名奇妙的错误,该书在最后部分用大量篇幅,介绍了并发编程对共享资源处理时可能遇到的问题以及基本解决方法。

e)网络编程,java的跨平台性解决了客户端编程不同平台的兼容性问题。相比于脚本语言,java拥有更强大的数据处理能力、更安全、跨平台、国际化,因此其可以在客户端做更多的事情,以解放服务器和网络资源的压力。另外服务端编程,java拥有成熟的后端编程框架。现在java在服务端编程领域一枝独秀,臣....独秀。

总结

如果想要理解面向过程语言的代码时,往往要通读数据定义、函数调用和底层概念,才能够明白这些代码要表达什么样的现实模型。而面向对象,代码内聚性好且抽象思维更贴近现实,可以更加清晰的了解程序要表达的现实模型,易于理解,维护。这实在是一种杰出的进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值