详析 java中的构造函数与this关键字
2018-01-15刘志雄
刘志雄
[摘 要]java中的构造函数与this在程序当中起着非常重要的作用:构造函数主要用来完成对对象属性的初始化工作;this的作用类似于C语言里的指针。本文将结合简单实例对构造函数与this的一般用法与特殊用法进行详细分析。
[关键词]构造函数;java;对象;this
在一个类中,如果定义了与成员变量同名的形式参数,要区分到底是成员变量还是形式参数,通过this来进行区分。在Java的学习当中,this关键字起着指针的作用,用来指示成员变量与成员方法还有构造函数。在已有的文献当中分析构造函数与this的用法时,用例和分析过于复杂,下面用简单实例来全面分析构造函数与this的用法。
一、构造函数与this用法实例
用例如下:
class student{
1.int age;
2.String name;
3.student(){
// 5.1 student(age);
4.System.out.println("空構造函数");}
5.student(int age){
6.this();
7.this.age=age;
8.System.out.println("带一个形参的构造函数"); }
9.student(int age, String name){
10. this(age);
11. this.age=age;
12. this.name=name;
13. this.f();
14. System.out.println("带两个形参的构造函数"); }
15. void f(){
16. //this();
17. System.out.println("成员方法"); }
18.public static void main(String[] args){
19. student a1=new student();
20. student a2=new student(20,"小军");
21. System.out.println("年龄"+a2.age+"名字"+a2.name);}}
程序运行结果如下:
二、构造函数与this一般用法的分析
第3行.5行.9 行是定义student类的构造函数,第6行.10行是用this来调用构造函数;另外,构造函数不能相互调用:如第5.1行与第6行。第7行.11行.12行是this用来指示成员变量,使用this.age, this.name来指示成员变量。第13行表示在构造函数中调用了成员方法f()。第19行与第20行是创建了两个对象,实际是运行了空构造函数与带两个形参的构造函数。如果程序中保留第19行与第20行时,必须把空构造函数写出来。程序的第21行是对对象a2的属性值的输出。
三、this 的特殊用法
接下来分析this在匿名类和内部类中的应用。
用例如下:
1.public class animal {
2.animal(){
3.Thread thread = new Thread(){
4.public void run() {
5.animal.this.run(); } }; //注意这里有分号
6.thread.start(); }
7.public void run() {
9.System.out.println("我是成员方法run ");}
10. public static void main(String[] args) {
11. animal as=new animal();}}
程序运行结果:
在上述实例中,thread是一个匿名类对象,run函数体内调用到了外部类animal的run函数。由于函数同名,不可直接调用:一是把外部类的run函数换一个名字如outrun,代码第5行改成animal.outrun(); 第7行public void run()改成public static void outrun()但这种方法不建议使用。二是用上面例子中的办法,用外部类的类名加上this引用来说明要调用的是外部类的方法run。
四、结语
构造函数:
1.构造函数的定义:方法名与类名相同且没有返回值。
2.构造函数的作用是对象属性的初始化,如程序中的第20行,依据参数传递分析知,20是对age的赋值,“小军”是对name的赋值。
3.空构造函数可随类的加载自动调用,但创建对象时,空构造函数与带参数的构造函数都用上了,这时空构造函数就必须显性的写出来即程序代码中的第3行。
this的用法:
1.this.变量名:用来指示成员变量,即代码中的第7行.1行1.12行,如this.age=age,等号后面的age构造函数中括号里的age, this.age中的age是指的成员变量。
2.this.方法名():用来指示成员方法,如代码中的this.f(),指的f()方法是成员方法。
3.this():这种格式的代码是用来指调用构造函数,如果括号里带了参数,指的是调用带参数的构造函数,如代码this(age),指的是调用带age参数的构造函数。
参考文献:
[1]唐明虎.基于项目任务驱动的Java语言教学模式研究[J].智能计算机与应用,2010,01.
[2] 安博教育集团,Java核心技术[M].北京:电子工业出版社,2012.
基金项目:湖南省教育科学“十三五”规划2017年度课题:XJK17BGD083 。endprint