一、成员变量和局部变量的区别
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、访问出现局限性(静态虽好,但只能访问静态)。