OOP基础
一些深入话题
static
一般的成员属于对象,类仅仅是描述属于该类的对象的特征与行为,当我们new出一个对象后,空间才被分配,方法才能被调用static成员属于类,所有该类的对象共有一个static属性或方法可以不创建任何对象就访问类的static属性或方法static方法内部不能调用非static方法Eg.EgStatic.java
初始化和清除
Asthecomputerrevolutionprogresses,“unsafe”programminghasbecomeoneofthemajorculpritsthatmakesprogrammingexpensive.
初始化和清除是
程序设计安全性的两个最重要的
问题Java沿用了构造函数的概念,但新增了自己的垃圾收集器
用构造函数自动初始化
如果某个类定义了构造函数,那么在创建对象的时候,Java会自动调用那个函数构造函数的名字和类的名字相同
Eg.SimpleConstructor.java
Constructor
构造函数同样可以有参数Eg.SimpleConstructor2.java构造函数没有returnType
Methodoverl
oading
Oneoftheimportantfeaturesinanyprogramminglanguageistheuseofnames.
我们用名字引用或描述所有的对象和方法日常生活中,我们用同一个词表达多种不同的含义,这就是重载
Often,thesame
wordexpressesanumberofdifferentmeanings—it’soverloaded.
Methodoverloading-2
大多数程序设计语言都要求我们为每一个函数设定一个独一无二的标识符(函数名)构造函数的出现要求函数名也可以重载不只是构造函数可以重载Eg.Overloading.java
区分重载方法
每个重载的方法都必须有一个独一无二的参数类型
列表 用returnType区分重载方法?
NO!!!
缺省构造函数
如果一个类没有定义构造函数,编译程序会自动帮我们创建一个缺省构造函数。但是一旦定义了一个构造函数,编译器就不会再自动创建缺省构造函数了。
this(我)
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用Eg.Leaf.java
在构造函数中调用构造函数
如果一个类重载了多个构造函数,可以在一个中调用另一个在一个构造函数中调用另一个构造函数时,用this关键字Eg.Flower.java
构造函数调用必须是构造函数的第一条语句,并且只能在一个构造函数中调用一次构造函数只能在构造函数中调用构造函数!
清除:结尾和垃圾收集
垃圾收集机制只知道怎样释放new出来的对象,它不知道如何释放对象的“特殊”内存。一旦垃圾收集机制准备好释放对象占用的存储空间,它首先调用finalize()注意:不要指望finalize()
1.2.对象可能不会被收集垃圾收集只跟内存有关
成员初始化
Javagoesoutofitswaytoguaranteethatvariablesareproperlyinitializedbeforetheyareused.
一个类的所有基本数据类型成员都会获得一个缺省值引用会获得一个null值
定义初始化
一个直接的做法是在定义数据成员的同时也为其赋值classInitialValues{booleanb=true;charc='x';inti=999;doubled=3.14159;//...}