种与对象的补充(构造器等)
首先,要说一下this关键字,这是前半节课,我记忆最深的一个单词。当我们在初始化name的属性值时,我们可以这样写:
public class student(String name){
name=na;
}
那可不可以这样写?name=name;都知道不可以,原因就是当属性值和参数相同时,优先使用参数。
其实,这个this和它本身在英语中的作用是一样的,就是指代作用。比如说:
//创建一个学生对象:一个参数的构造器
String name="NetJava";
Student st2=new Student(name);
//构造时,传入名字参数,初始化name属性值
public Student(String name){
this.name=name;
}
那么这里的this就指的是st2所代表的对象。
那么,在说this的时候,又说到了构造器。其实,我觉得这些东西刚听到这些奇怪的名字时就会郁闷,到底是什么意思啊,真心觉得好麻烦。但事实上,把它说成构造方法就会明白很多,那构造方法,构造什么啊,这到底是什么方法。第一,构造方法可以给属性设置初始化值,格式就是刚才那几行代码,直接用public+类名(数据类型 参数,,,);第二,可以实例化对象,我们的实例化
类名 对象名=new 类名();这后面的类名 ()其实就是一个构造方法,那我们可以在这个括号里加参数,几个参数就是几个参数的构造器。
Java会给每一个类都提供一个默认无参数的构造方法。那我们想自己重新定义一个构造方法,这就叫做方法的重载。要求就是方法名必须完全相同,其次方法所带的参数个数、参数类型和参数顺序,这三个中必须要有一个不同。至于调用,就要根据参数的不同来区分调用。
最后一项,值传递和引用传递。
值传递是要求数据类型的:也就是java中的8中基本数据类型还有String。
基本要求说完了,那值传递究竟是什么,从字面理解,就是传递值。比如说,我在测试类里赋予i=10,在study方法中加上i这个参数,那么在Student类里输出值的时候,就会把i当成初值,在这个基础上的值。也就是说,值传递过去了。
引用传递当然适用于引用数据类型。
引用传递一开始我觉得和C语言中的赋值没有区别,但关键问题在后面。引用传递其实是地址传递,什么意思,比如说我们每个人的名字可以代表我们每个人,可以将我们进行区分,也就是说当我们叫谁谁谁的名字时,并不是名字就是我们本身这个实体,而是这个名字指向我们,就像是地址一样,那么引用传递就是传递的这个东西。就是比如说stu1指向的是栈内存的第一个空间,stu2指向的是栈内存的第二个空间,那么stu2=stu1;这行代码的意思就是让stu2也指向了栈内存的第一个空间,也就是说不管中间再加几个变量,比如说stu2=stu1;stu3=stu2;stu1=stu3;最后都会指向第一个栈内存空间,最后都会相等。
那么空出来的那些空间怎么办,GC(垃圾回收机制)负责回收,来释放空间。
以上就是昨天课堂的总结。。。哈