黑马程序员--Java基础之面向对象(1)

来源:互联网 发布:数据治理定义 编辑:程序博客网 时间:2024/04/30 23:57
------------------ android培训、java培训、期待与您交流! ---------------------

一、成员变量和局部变量的区别

1、成员变量作用于整个类,局部变量只作用于自己的作用域中。

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

3、成员变量可以不初始化,因为系统会默认初始化;局部变量必须先初始化才能参与运算。

二、匿名对象

1、使用匿名对象容易产生较多的垃圾

//这两句操作的是不同的对象,是没有实际意义的。而且语句结束后,这两句的对象都将成为垃圾!new Car().num = 5; new Car().color = "blue";

2、匿名对象使用方式

(1)当对象的方法只调用一次时,可以使用匿名对象简化代码,但是要对一个对象进行多次操作,则必须给予对象命名。

(2)可以将匿名对象作为实际参数进行传递。如:show(new Car());这样改show方法执行完毕后,匿名对象就会变成垃圾。

        而命名的话,需要main函数执行完毕或者手动 对象名=null;才会变成垃圾。

三、面向对象的3大特性:封装、继承、多态。

1、封装

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

(2)优点:将变化隔离;便于使用;提高重要性;提高安全性;

(3)封装原则:将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方法对其访问。

2、继承

(1)定义:将共性描述提取出来,单独进行描述,然后让具有共性的类继承(向上抽取)

(2)提高了代码的复用性,让类与类之间产生了关系。有了这个关系,才有了多态的特性。

3、多态

(1)多态:可以理解为事物存在的多种体现形态。

(2)多态的体现:父类的引用指向了自己的子类对象,即父类的引用也可以接受子类的对象。如:Animal c = new Cat();

  提高了代码的扩展性。

(3)多态的前提:类与类之间要有关系。要么继承,要么实现。

  通常还有一个前提:存在覆盖。不然没有意义(前期定义一个功能,后期子类实现这个功能并调用,最后用子类对象调用)

(4)利弊

利:大大提高程序的扩展性。

弊:只能使用父类的引用访问父类中的成员。使用中侧重扩展性使用。

(5)多态代码中的特点

在多态中(非静态)成员函数的特点:(可重写)。在编译时期 参阅引用型变量所属的类(父类)中是否有调用的方法 如果有,编译通过,如果没有编译失败。在运行时期 参阅对象所属的类(子类)中是否有调用的方法。总结:编译看左边(父类) 运行看右边(子类)。

四、构造代码块和构造函数的区别

1、构造代码块:单独的没有名字的一个代码区域块,{。。。。}

     作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。

2、和构造函数的区别:构造代码块是给所有对象进行统一初始化;而构造函数时给对应的对象初始化

    (调用的不同的构造函数就会生成不同的相应的对象)。

3、构造函数是可以私有化的,但是该私有的构造函数不能用来创建对象

五、tatic关键字

1、静态:static 用法:是一个修饰符,用于修饰成员(成员变量,成员函数), 被所有对象共享

2、静态的变量可以被类直接调用。

3、静态变量存放在方法区(共享区、数据区)

4、static的特点:随着类的加载而加载(随着类的消失而消失),说明它生命周期最长(而成员变量是在创建实例才生成的,

      所以成员变量又叫实例变量,静态成员变量又叫类变量);

六、final关键字

1、继承不利于封装性。

2、可修饰类、方法、成员比变量和局部变量。

3、final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量只能唯一被赋值,通常被作为常量(变量名大写,单词间用下划线间隔)。

      何时用final修饰变量:当描述事物时,一些数据的出现值是固定的,但为了增强阅读性,给这些值起了名字,便于阅读。

4、内部类定义在类中的局部位置上时,只能访问被final修饰的局部变量。

七、静态的利弊

利:1、对对象的共享数据进行单独空间的存储,节省空间。

        2、可以直接被类名调用。

弊:1、生命周期过长。

        2、访问出现局限性(静态虽好,但只能访问静态)。


原创粉丝点击