JavaSE学习_04_constructor_this

来源:互联网 发布:刘亦菲是否整容知乎 编辑:程序博客网 时间:2024/06/11 06:47
1、类、创建对象、内存分析:自己创建的类属于引用类型;所谓类就是把一些具有相似属性的特征抽象出来,作为模版;
对象就是以某个类为模版创建出来的实例,有多种创建方式,比如new,反射,序列化,克隆;最常见的是用new关键字。
String str = new String(); new出来的对象会在堆里面分配一块内存空间,然后在堆里面的地址会赋给str(引用),str是局部变量,引用会被存储到栈里面,这事就可以通过str访问在堆里面创建的那一块内存了;即,栈里面存储的是引用(引用里面存的是地址)和基本数据类型(int char....)的值;
值得注意的是成员变量(全局变量)和局部变量,成员变量如果不赋初始值,系统会自动赋值,局部变量必须手动赋初始值;
在类里面并且在方法外面定义的变量是成员变量,在方法内不定义的变量是局部变量;在某个方法里面定义的变量只能在相应方法里面使用,其它方法和其他地方都不能使用。
public void test() {
Demo d = new Demo();
d.number = 4;
test2(d);
System.out.println(d.number);
}
public void test2(Demo d2) {
Demo d2 = new Demo();
d2.number = 6;
}

分析上面代码的执行过程,test里面输出的值为多少。首先在test里面创建了一个Demo对象,并把Demo类的number属性的值改成了4,然后就作为实参传入到test2里面了,由于赋值过程为d2 = d(java里面没有引用的传递,全是值的传递,这里是吧d里的地址值赋给了d2),所以d和d2指向同一块内存;由于test2里d2被重新赋了地址值,所以d2不再指向之前的那一块内存,而指向重新创建的新内存,这时d和d2不再指向同一块内存了;所以打印出来的值应该是4。


2、构造器:作用,构造器可以初始化类的成员变量;构造器是同一种特殊的方法,结构为:public 类名() {};没有返回值。

构造器分为有参构造和无参构造;若类里面有有参构造时,一定不要忘了手动添加无参构造(有有参构造后,系统不会自动添加无参构造);

类里面没有有参构造时,无参构造可有可无;

在类里面也可以让构造器重载,这样可以灵活的给类的成员变量进行初始化;
要注意,构造器是不能被某个引用调用的,它只能被用new关键字创建出来;

创建对象的过程其实可以做三件事,a)在堆里面开辟一个内存空间,返回对象的地址 b)创建构造器 c)可以往构造器里面传递参数,初始化相应类的成员变量。


3、this关键字的使用:this关键字代指当前对象,有很多用处,便于在(成员方法,构造器,构造块)内部继续使用当前对象的(资源-成员变量和成员方法);
但是,注意:静态的资源(静态块,静态方法)里不能使用this比如在构造器中:
public Demo(int age, String name) {
this(name); // 这里重复利用了代码,不用再重新在这个构造器里面判断一次;但是这句代码一定要写在构造器的第一句
this.age = age; //给成员变量赋值
}
public Demo(String name) {
if (name.length()<2 && name.length()>4) {
System.out.println("输入有误");
} else {
this.name = name;
}
}
要是某个方法里面的成员变量和局部变量重名时,若要访问成员变量的那个值就要在变量名前加上this.,否则调用的是局部变量的值。
this:当前类型的引用变量,操作的对象是 当前方法的当前的调用对象。
理解为系统自动的在(成员方法,构造器,构造块)里定义了this变量;

this使用的位置:成员方法,构造器,构造块;

使用this.可以通过this直接方法当前方法的调用对象,不需要新的参数;


0 0
原创粉丝点击