类与对象 2
第三节 成员方法的使用
1. 值传递
Java的参数传递方式是通过值来传递,有两种方式:
- 当方法的参数为简单数据类型时,则将实参的值传递给形参;
- 当方法的参数为复合数据类型时,则将实参的值传给形参,此时形参指向实参相同的堆地址。
2. set和get方法
- 如果类中声明了private成员变量,则只能通过该类的方法操作这些成员变量
- 类中通常要提供公有方法以允许该类的用户设置或者读取private实例变量
3. 方法重载
Java支持方法的重载,方法的重载定义为在一个类中定义多个同名的方法,方法返回的类型完全相同,不同的是重载方法参数必须有所区别:
- 参数的类型不同
- 参数的顺序不同,这里指的是一个方法有多个不同类型参数的情况,改变参数的顺序,也算是一种区分方法
- 参数的个数不同,通过个数来区分
**
第四节 构造函数的使用
- 构造方法用于为类的新建的对象分配内存空间并对成员变量进行初始化(我们也可以在定义成员变量的时候进行定义初始化)。
- 定义必须构造函数时,注意两点:
- 构造方法必须与其类名相同,不必写方法的返回类型;
- 构造方法没有返回值,但可以有参数,并且可以重载。
构造方法只能在创建对象时用new命令调用。
引用:
this定义为被调用的方法的当前对象的引用。
this引用仅能出现在类中的方法中。
第五节 关于垃圾回收、
1. Java内存使用
1.栈内存:用于存放在函数中定义的一些基本类型的变量和对象的引用变量。当超过该变量的作用域时,java会自动释放为该变量分配的内存空间,该内存空间将被另作他用。
2.堆内存:用于存放由new创建的对象和数组。在堆中由new创建的对象和数组是由栈中定义的引用变量来指向的,引用变量的取值为该数组或对象在堆内存中的首地址。引用变量在程序运行到其作用域外后被释放,此时堆中的数组和对象在没有引用变量指向它时,进而变成垃圾。
2. 垃圾收集
Java允许创建任意个对象,而且当对象不再使用时会自动清除,这个而过过程就是“垃圾收集”
为了使对象不再被引用,可以通过设置指向某一对象的引用为
n
u
l
l
null
null来实现
Time1 time=new Time1();
time=null;
-
垃圾收集器
当一个对象变成垃圾后,垃圾回收器会在其后的某一个时刻启用,回收这些堆内存垃圾所占用的空间,但其启用的时间不由程序员控制,也无规律可循,并不会一产生了垃圾,它就被唤起,甚至有可能到程序终止,它都没有启动的机会。因此这并不是一个很可靠的机制。我们也可以在任何时候在程序中通过调用
System. gc()
方法来显式地运行垃圾回收程序。
比如,在创建大量垃圾的代码之后或者在需要大量内存代码之前运行垃圾回收器,来清除那些在内存中不再被引用的对象。 -
撤销方法finalize
在一个对象得到垃圾回收之前(无论是显式回收还是自动回收),垃圾收集器给对象一个机会来调用自己的finalize方法,这个过程称为对象的撤销方法。
finalize方法是Object类的一个方法,任何一个对象可以自动通过类的继承使用该方法,在当成垃圾对象被回收之前都会调用这个方法。
3.实例
import java.util.Scanner;
public class preson {
String name;
int age;
public preson(String name){
this.name=name;
}
public preson(String name,int age) {
this(name);//调用当前类的一个参数的构造函数
this.age=age;
}
public void fibalize(){
System.out.println("the object "+this.name+" is going");
}
public static void main(String args[]){
preson p1=new preson("Tom");
p1=null;//设为不在引用的变量
new person("mike");//调用函数
new person("jerry");
System.gc();//通过类名直接调用
for(int i=0;i<1000000;i++){
}
}
System.out.println("the object "+this.name+" is ending");
}
第六节 static关键字的使用
1.说明
声明一个成员变量时,可以指定成员变量是属于
- 一个类的各个对象所分别拥有( 称为实例变量)。
- 还是属于一个类的所有对象共享(称为类变量)。
- 类变量要以关键字static声明, 这种类变量也可称为静态变量,相应的static修饰的成员方法则称为静态方法,它们统称为类的静态成员。
例如,下述Student类中,name是实例变量,而
count是类变量。
public class Student{
String name;
static int count; //被所有对象共享
}
类变量是与类相关联的数据变量,也就是说,类变量是和该类所创建的所有对象都相关联的变量。
改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。
因此,类变量的访问不仅可以通过某个对象访问也可以直接通过类名来访问。
类的静态成员的使用格式一般为:
对象.静态变量名;
类名.静态变量名;
对象.静态方法名();
类名.静态方法名();
2. 实例变量与类变量
- 实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量必须通过对象访问。
- 类变量只在这个类的第一对象要创建的时候初始化,这个类的所有对象的静态成员变量是同一个,静态成员的初始化发生在类的成员变量之前。
3.实例
1.使用静态变量记录创建对象的数目
预统计创建过多少对象,每次创建对象均需调用构造函数,因此,声明私有静态变量在构造函数中累加静态变量对外提供静态方法访问当前累加数量