我其实一直想写点东西练练自己文笔,今天写下这篇技术类型的文章也没有一个好的格式和章法,但万事开头难,那么就从面向对象开始.
我们大部分人都知道互联网软件的存在,时刻影响了我们的现实生活,那么面向对象的编程思想就是从生活中来的,软件出现的目的就是为了描述现实世界,从而解决现实生活所需,究其一点:人的思想上刻画了现实世界,用编程语言来实现,而面向对象是最符合人的思考方式的。世界各样的事物靠分类来区别开来,有实例对象来行事特例行为,程序通过也同过类与对象来一一描叙清楚
开始来谈谈面向对象里常带有的概念:类{属性/方法},对象,初始化代码块,权限修饰符;特征(继承,多态,封装);其他涉及到(抽象,接口,单例模式.....其实这也是3大特征有关),这里面的思想贯穿整个java 的编程语言,理解起来还有靠后期慢慢在实践中领悟了。
一:类与对象
(1)类的加载顺序:程序代码在任何时候都有一个执行顺序,一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为:1
加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载。但我们必须知道的是静态代码执行初始化顺序依次是:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法。
(2)属性:概念主要有两个:成员变量(有的把static修饰的变量也叫成员变量,但我一般把这里的变量成为全局变量,因为他的属性数据的共享时间与共享范围和类一起,就是牛)与局部变量。从实际出发去考虑这两个存在的价值,例如:一个人带有属性有:身高,年龄,性别等自身天生就有;而他在一次去参加篮球比赛是领了球衣11号,因此,在这次运动中他获得了新的属性值,该属性值也会随着球赛的结束而消失。前者就可以定义成为成员变量,后者球号就可以只定义在打篮球时才有的属性,打篮球的功能行为可以写成此类的实例方法,当他在想打篮球是又可以领11号球衣完成行为方法。一个例子解释了成员变量,局部变量,和实例方法。由于使用的范围不一样,成员变量发在内存堆里(等类加载完了之后才算完),局部变量放在内存栈里(方法一结束就把里面的局部变量全清空,不用等类加载完)。
(3)方法:上面的内容已经解释了一种,还有补充。类方法(static修饰的方法,与类的静态属性一起同时加载,由于加载时间比实例方法早而且一直跟类一起存在,出现两种调用情况:【a】后来被调用的实例方法可以写静态方法,类方法里不能直接使用类方法,理由是已经加载还么有完不能再次被类加载,只能被调用。【b】在静态方法中只能通过new对象的方式去调用其他的类方法,我想的是这个对象引用无需加载执行任何一处的功能);介绍到了对象就可以介绍构造方法了。
(4)构造器:当创建一个无参对象时,类里都会有一个无参默认构造方法,一定要注意当new对象时不光是自己定义一个有参的构造方法,还应该把默认构造方法手动添加上去。作用:①创建对象 ②给创建的对象的属性赋值(类对象的属性赋值的先后顺序:①属性的默认初始化 ②属性的显式初始化③通过构造器给属性初始化④通过"对象.方法"的方式给属性赋值;赋值可以有四种,但类外用创建对象时给他赋值又方便又效率)
二:三大特性
(1)封装:概念很少,一句话:属性藏起来,公共方法提供其访问(开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐患,所以,类中的属性通常被私有化,并对外提供公共的访问方法。/私有仅仅是封装的?一种体现形式而已)。总体好处:将变化隔离;便于使?用;提?高重用性;安全性。
封装以多种形式实现代码的复用:
a.数组?用于封装数据,就是?一个具体的实体;
b.啥事实体的问题,就是用于封装多个数据的
c.啥是对象?对象是将函数等一些内容进?行了封装。
d.多程序读取?一个配置?文件时,建议配置?文件封装成对象。
e.内部类之所以定义在内部就是为了封装。想要获取内部类对象通常都通过外部类的?方法来获取。这样可以对内部类对象进行控制。
f.异常就是 java 按照?面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
g.包是?一种封装形式,?用于封装类,想要被包以外的程序访问,该类必须 public.
h.对字符串进行了对象的封装。这样的好处是可以对字符串这种常?见数据进行?方便的操作。对象封装后,可以定义 N 多属性和行为。
i.基本数据类型对象包装类:是按照?面向对象思想将基本数据类型封装成了对象。好处:1:可以通过对象中的属性和行为操作基本数据。2:可以实现基本数据类型和字符串之间的转换
j.DateFormat df = new SimpleDateFormat(); 该对象的建?立内部会封装?一个默认的?日期格式。11-12-1 下午1:48
k.因为字符每个国家都不?一样,所以涉及到了字符编码问题,那么 GBK 编码的中?文?用unicode 编码解析是有问题的,所以需要获取中?文字节数据的同时+ 指定的编码表才可以解析正确数据。为了方便于文字的解析,所以将字节流和编码表封装成对象,这个对象就是字符流。只要操作字符数据,优先考虑使用字符流体系。
l.反射技术: 其实就是动态加载?一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码?文件中的内容都封装成对象。
我已经列举了很多,值得注意的是23种设计模式的思想会有很多会用封装的思想,自己也可以为自己的项目写一些封装代码重复用免得重复写浪费时间。贴切的说一个例子,没有封装就是人自己动手搬每一块砖,有了之后可以自己创出能扮砖的容器,一次用完了下次可以继续使用它去完成同样的事,又称封装的工具。
隐藏:权限修饰符(public private protect 缺省;package /import都会用到)
(2)继承:单继承与多接口实现的完美配合使得我们在编写程序时更灵活,为了扩展实现功能有了子承接父页的继承(extends)关系,有了血缘关系就会有高耦合的弊病,最后用了接口,发现开发中接口的解耦的能力还不够,希望能分成独立的模块去完成但他们之间彼此还是有联系的高内聚不能减少,到现在我和同事就用spring框架去完成项目,效率提高了还很少有代码的牵扯。
回来继续说,1.抽象类(abstract)被继承也能被创建对象,注意至少有一个是非私有的抽象方法,还可以使用main方法。通常是被继承又子类去实现了。2.接口(interface)只能定义抽象方法和常量,实现它的子类必须实现它的所有的方法,扩展性是多样的比单继承好,一般优先考虑。
(3)多态:体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat()。多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问?类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)。多态是在思想上的改变:以前一个对象只能指挥一个对象去工作,现在可以一个引用可以去调用多个对象的方法使用。
每次都很想把博文写得更完善些,更能有所得,但学习可能眼界得局限性,所以希望大家能指出我的不足之处。