您的位置:首页 > 职场人生

黑马程序员--Java基础总结--面向对象

2014-03-25 13:32 176 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

面向对象是一种思考方式。

面向对象的三个特征:封装,继承,多态。

类和对象的关系:类就是对现实生活中事物当然描述。对象是这类事物实实在在存在的个体。

定义类就是描述事物,定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)。

成员变量和局部变量:成员变量作用于整个类中,局部变量作用于函数中,或者语句中。

在内存中,成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量存在栈内存中。

匿名对象一般调用方法有意义,调用变量不存在意义。匿名对象可以作为实际参数进行传递。例子:show(new Cae());

封装(Encapsulation):隐藏对象的属性和实现细节,仅对外提供公共访问方式。

private 私有修饰符:权限修饰符,用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。

私有仅仅是封装的一种表现形式,封装还有很多方式。

构造函数:函数名与类名相同,不用定义返回值类型,不可以写return语句。给对象初始化使用。

对象一建立就会调用与之对应的构造函数。当一个类中没有定义构造函数时那么系统会默认给该类加入一个空参数的构造函数。构造函数只在类中执行一次。当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义到构造函数中。

构造代码块:定义的是不同对象共性的内容,给对象进行初始化,对象一建立就运行,而且优先于构造 函数执行。格式: {};

和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应得对象初始化。

this:是用于区分成员变量和局部变量同名情况。代表本类的对象,他所在函数所属对象的引用。还可以 在函数直接的调用。(this只能放在函数的第一行,否则报错。)

static:是一个修饰符,用于修饰成员(成员变量、成员函数)。被静态修饰的变量可以直接被类名调用 。类名.静态成员

static特点:随着类的加载而加载。被所有对象所共享。优先于对象存在。可以直接被类名所调用。

实例变量和类变量的区别:

1、存放位置:类变量随着类的加载而存在于方法区中,实例变量随着对象的建立而存在与堆内存中。

2、生命周期:类变量生命周期最长,随着类的消失而消失。实例变量随着对象消失而消失。

静态使用的注意事项:

1、静态方法只能访问静态成员。非静态方法既可以访问静态也可以访问非静态。

2、静态方法中不可以定义this、super关键字。因为静态优先于对象存在,所以静态方法不可以出现 this.

主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用。

主函数的定义:public 代表主函数访问权限是最大的。static 代表主函数随着类的加载就已经存在了。 void 主函数没有具体的返回值。main 不是关键字,但是是一个特殊的单词,可以被jvm识别。函数的参数:(String[] args):参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组。

JVM在调用主函数时,传入的是new String[0];

当对象中出现共享数据的时候,该数据被静态所修饰。当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的(定义静态函数)。

javadoc 为创建的工具类进行文档说明。

静态代码块 格式:static{ 静态代码块中的执行语句 } 特点 随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化。

Person p=new Person("张三",20);在内存中的顺序:

因为new用到了Person。class 所以会先找到Person.class文件加载到内存中。执行该类中的static代码块给类进行类的初始化,在堆内存中开辟空间,分配内存地址。在堆内存中建立对象的特有属性。并进行默认初始化。对属性进行显性初始化。对对象进行构造代码块初始化。对对象进行对应构造函数的初始化。将内存地址付给栈内存中的变量。

继承:提高了代码的复用性,让类和类直接产生关系,有了这个关系,才有了多态的特性。继承要有所属关系,否则不许继承。

java语言支持单继承 不支持多继承,容易带来安全隐患,但是保留了多实现。 支持多层继承。

super 关键字 代表父类对象的引用。

函数的重写,当子类出现和父类一样的函数名 程序运行子类的函数。

子类覆盖父类,必须保证子类权限大于等于父类,才可以覆盖,否则编译失败。静态只能覆盖静态。

在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式语句 super();super();会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();

super语句一定定义在子类的第一行。

子类的实例化过程:子类的所有的构造函数,默认都会访问父类中空参数的构造函数。当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定访问父类的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数。

final :最终 作为一个修饰符 可以修饰函数 类 变量 被修饰的类不可以被继承。被修饰的方法不会被复写 被修饰的变量是一个常量只能赋值一次,既可以修饰成员变量也可以修饰局部变量。

作为常量:常量的书写格式所有字母都大写,如果有多个单词组成单词间通过_连接。

abstract方法必须存在abstract类中。抽象类不可以用New创建对象。调用抽象方法没有意义。抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果只覆盖部分抽象方法,那么该子类仍是抽象的。

模块方法:在定义功能时,功能的一部分是确定的,单有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。

接口定义时特点:接口中常见定义:常量,抽象方法 接口中的成员都有固定的修饰:常量:public static final 方法:public abstract 接口中的成员都是public 的。

接口是不可以创建对象的,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。接口可以被类多实现,也是对多继承不支持的一种实现。

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------

-详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: