黑马程序员 面向对象(上)

来源:互联网 发布:java全文检索 编辑:程序博客网 时间:2024/05/02 02:45
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

面向对象编程 (Object Oriented Programming, OOP) 是Java中最基本的思想,同时也是Java语言最大的特点。学习Java最重要的一点就是要理解面向对象编程的思路。那么,面向对象编程的好处在哪里呢?在我看来,它最主要的作用是降低了软件开发的难度,不再需要程序员去理解每一个方法实现的过程,而是把要用到的方法封装在了对象中,当我们需要用到某个方法时,只要找到对象的类,再查查API文档就能轻松解决问题。至于里面的细节是如何实现的,当需要的时候,我们可以去查源码,但一般情况下,只需知道其实现了什么样的功能即可。


面向对象的三个基本特征:

1. 封装; 2. 继承; 3. 多态。


封装(encapsulation):是对象和类的主要特性,把客观的事物封装成抽象的类,并隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

好处:

1. 将类中的变化隔离

2. 更加便于开发者使用类中的方法

3. 提高了代码的重用性

4. 提高了代码的安全性

封装的原则:

1. 将不需要对外提供的内容都隐藏起来

2. 把属性都隐藏,提供公共方法对齐进行访问


构造函数:每个类中都有的方法,如果不写,则默认一个空参数构造函数,并且默认构造函数的权限与所属类一致。如Person(){ } 即是一个最简单的构造函数,不接收任何参数,其中没有任何内容。其作用是对对象初始化,在函数一创建之时就会调用并且只能被调用一次。当接收的参数不同时,可以同时存在多个构造函数。


构造代码块:不常用,格式:{ 执行语句 } ,可以放在类中的任何位置,其作用也是给对象进行初始化。但是与构造函数不同的是:构造代码块是给所有的对象进行统一的初始化,并且优先于构造函数调用,而构造函数是给特定的对象进行初始化。


static 关键字(静态):

它是一个修饰符,可以用于修饰成员变量、成员函数、内部类。

当一个成员被static修饰时,这个成员便随着类的加载而存在于方法区,随着类的消失而消失,生命周期很长。

特点:

1. 随着类的加载而加载

2. 优先于对象存在

3. 被所有对象所共享(用static修饰的成员变量特有属性)

4. 可以被类名调用


静态代码块:

格式: static{ 执行语句;}

特点: 随着类的加载而执行,只执行一次(跟调用次数无关),用于给类进行初始化。


在一个类中,代码块执行的顺序如下:static{} > {} > 类(){}

一个例子用来说明:

public class Test1 {public static void main(String[] args) {System.out.println(new Demo());  //两次创建Demo类,打印出结果System.out.println(new Demo());}}class Demo{//静态修饰的成员变量public static int a = 0;//构造方法public Demo(){a++;          }public String toString(){return "a="+a;}//static代码块static{System.out.println("static代码块真的只能执行一次吗?");}//构造代码块{System.out.println("我是构造代码块");}}

打印结果为:

static代码块真的只能执行一次吗?我是构造代码块a=1我是构造代码块a=2

从打印结果可以明显看到,static代码块最先执行,并只执行一次;构造代码块其次,每new一个对象执行一次;构造函数最后执行。


接下来分析Demo d = new Demo() 这句话到底做了什么事:

1. 因为new用到了Demo.class文件,所以先找到Demo.class文件并加载到内存中去

2. 执行类中的static{}代码块,对类进行初始化

3. 在堆内存中开辟新空间,分配内存地址

4. 在堆内存中建立对象特有属性,并默认初始化

5. 对属性进行显示初始化

6. 对对象进行构造代码块初始化

7. 对对象进行构造函数初始化

8. 将内存地址赋给栈内存中的d变量

由上可见,创建一个对象有其固定的执行顺序,了解这些特性将能更好的理解计算机内存中的运行情况。


说明书

因为封装了方法后,使用者并不知道其中的方法到底是做什么用的,所以必须有一份说明书提供给使用者,这便是我们常用的API文档。jdk中提供了一个javadoc.exe的程序,可以帮我们自动生成规范的说明文档。

即文档注释:

/**

@aparm a 第一个参数int

@aparm arr 第二个参数int[]

……

@return (自己写返回类型)

*/

这只是一个格式说明,具体用到时可以查注释手册。

编译:javadoc -d(目录) -atchor(加作者) -version(加版本) 文件名.java ,与javac命令相差无几。

需要注意的是:必须是用public修饰的类,才能使用javadoc命令。


单例设计模式

当一个类只需要建立一个对象,共用其中的成员变量,就必须保证对象的唯一性,单例设计模式便是此类问题最有效的解决方法。

实现思想:

1. 私有化构造函数

2. 在类中创建一个本类对象

3. 对外提供一个方法使之可以获取该对象

饿汉式:

class Single{//私有化构造函数private Single(){}    //创建一个自己类的对象,因为需要被static方法调用,必须用static修饰private static Single s = new Single(); //不能创建对象,只能通过类名调用,方法必须用static修饰public static Single getInstance(){return s;}}
懒汉式:

class Single{//私有化构造函数private Single(){}    //创建一个自己类的对象的引用,并初始化为nullprivate static Single s = null; //不能创建对象,只能通过类名调用,方法必须用static修饰public static Single getInstance(){if(s==null)            //在调用该类时再创建一个对象,如果已存在,返回之s = new Single();return s;}}
这两种方法都是可行的方式,但是懒汉式中存在多线程执行时可能出现问题,必须对其进行同步处理,所以使用饿汉式更加方便。










---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
原创粉丝点击