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;
}
要注意,构造器是不能被某个引用调用的,它只能被用new关键字创建出来;
但是,注意:静态的资源(静态块,静态方法)里不能使用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变量;
对象就是以某个类为模版创建出来的实例,有多种创建方式,比如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。
构造器分为有参构造和无参构造;若类里面有有参构造时,一定不要忘了手动添加无参构造(有有参构造后,系统不会自动添加无参构造);
类里面没有有参构造时,无参构造可有可无;
在类里面也可以让构造器重载,这样可以灵活的给类的成员变量进行初始化;要注意,构造器是不能被某个引用调用的,它只能被用new关键字创建出来;
创建对象的过程其实可以做三件事,a)在堆里面开辟一个内存空间,返回对象的地址 b)创建构造器 c)可以往构造器里面传递参数,初始化相应类的成员变量。
但是,注意:静态的资源(静态块,静态方法)里不能使用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
- JavaSE学习_04_constructor_this
- javase学习之JavaSE环境安装
- JavaSE学习之路
- JavaSE学习笔记--反射
- JavaSE学习笔记--泛型
- JavaSE学习笔记--内省
- javaSE学习-----IO
- javaSE学习-----IO
- javaSE 集合类学习
- javaSE学习笔记
- javase学习网址
- JAVASE学习笔记一
- JAVASE学习笔记二
- javaSE学习笔记3
- JavaSE学习笔记
- JavaSE学习笔记--Annotation
- javaSe学习前奏
- javaSE注解的学习
- ViewPager+Fragment取消预加载以及禁止滑动
- 使用loadrunner 录制APP脚本
- adb操作指南
- sizeof函数
- Notes: E/ R Diagram (数据库ER图)
- JavaSE学习_04_constructor_this
- iOS UI测试
- 高性能流媒体服务器-nebula之数据结构(8)--双链表实现的内存中立队列
- vim编辑器的查找
- pyinstaller安装指南
- Leetcode 371. Sum of Two Integers
- spoj 220 每个字符串至少出现两次且不重叠的最长子串 (后缀数组)
- 不想使用百度了,推荐给大家一个比较好的搜索引擎网站
- 微软面试100题系列---判断两个链表是否相交