java构造函数初始化的问题

1.首先明白构造函数的定义,如下:java 构造函数 一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象...
java构造函数初始化的问题
1.首先明白构造函数的定义,如下:
java 构造函数
一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
2.请注意这句话:(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。也就是上面你的构造函数根本就没有传递参数给它,也就是说你在构造函数声明的int age=10,只是相当于函数里的一个变量,超出这个函数就失去作用了,也就是说为默认的int值为0.
3.如果是要初始化成员变量,最好还是构造有参。
知识水平有限,望请采纳!!!呵呵!!!2013-04-13
class TestPerson{ int age; //成员变量 默认值为0 public TestPerson() { int age = 10; //age声明在此处,为局部变量 System.out.println("My name is sss"); System.out.println(age); //编译器会默认此处为局部变量的age System.out.println(this.age);//this在构造函数内,调用了成员变量 } public static void main(String[] args) { TestPerson pl = new TestPerson(); System.out.println(pl.age);//pl对象的age属性,自然指的是成员变量 }}参考一下:http://tieba.baidu.com/p/22562017002013-04-13
输出的10是因为那个age为你构造函数的局部变量,this.age是这个类的成员变量,就是你类定义的一个属性,因为你没有为它赋初值java内部会自动赋值为0,而在你main函数中之所以会打印0是因为调用的是p1类的成员变量,自然也应该是没有赋初值的那个age,所以是0!希望对你有帮助!2013-04-13
3行构造函数外面的age是类的成员变量,6行构造函数内的按格式构造函数的变量,是一个局域变量,8行输出的是6行的那个age;9行输出的是类的成员变量age,而类的成员变量age没有赋初值,默认初值为0;2013-04-13
楼上说的都对,构造函数里的新变量是10,构造结束 就销毁了。第二个输出函数this 关键字指代当前对象的引用,可以指向实例化的成员变量。建议看java核心技术里关于类与对象部分。2013-04-13
第一个age 是调用的局部变量 第2个和最后一个实际上都是调用的全局变量 默认值为0.当然 this.age最好不要这样用 this 一般代表当前2013-04-13
第一个0是this.age值,建议再主机看一下this的用法,此处使用的this,是调的构造方法之上的那个变量;
第二 0是pl.age值 , pl是实例,pl.age调的是类里的变量age,不是构造方法里的age.2013-04-13
构造函数 中
println(age) 输出的是上边定义的 int age=10;(这个只是个局部变量)
println(this.age) 输出的是TestPerson中的age属性的值,默认是0
main函数中的
println(p1.age)输出的也是p1对象中的age属性的值,因为你没有对其进行赋值,所以还是0

如果你想在构造函数中对age进行初始化的话
就要写 this.age=10;2013-04-13
给你解释一下后面2个0。 第一个0是System.out.println(this.age); 这句输出的。this这个关键字调用的就是类的成员变量, 也就是你代码里面第三行的age 到于第6行的age你可以理解成构造函数的局部变量,在构造函数里面输出age那就是它本身的age所以是10, 第九行输出的this.age就是第三行的age.因为你没赋值所以默认为0,然后 第二个0就是你第15行执行类的对象调本类的成员变量,也是调的第三行的age,因为没赋值,所以就也是0
其实构造函数的初始化有两种就以你这个为例
第一种
public class TestPerson {
int age;

public static void main(String args[]) {
TestPerson p1=new TestPerson();
p1.age=10;
}
}
第二种
public class TestPerson {
int age;

TestPerson(int age){
this.age=age;
}
public static void main(String args[]) {
TestPerson p1=new TestPerson(10);
}
}2013-04-13
构造器里的int age=10写成age=102013-04-13
这样才是在构造函数里初始化成员变量的做法

2018-03-21
不要误导别人可以吗,楼下的才是正解,你的成员变量和局部变量都没搞清楚,还有你把this.age和age的区别搞懂了再来回答可好?2018-04-14
类变量和局部变量你没有分清楚2019-06-09
mengvlog 阅读 6 次 更新于 2025-07-19 12:14:02 我来答关注问题0
  • (2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行...

  •  阿暄生活 java为什么要初始化

    Java 中初始化的主要原因如下:避免空指针异常:在 Java 中,未初始化的对象默认是 null。如果尝试访问 null 对象的属性或方法,将会抛出空指针异常(NullPointerException)。通过初始化对象,可以避免此类异常的发生,确保程序的稳定运行。设置默认值:初始化允许为对象的属性设置默认值。这样,在创建对象时...

  •  文暄生活科普 血的教训,BigDecimal踩过的坑

    第一个陷阱:初始化问题 尝试用double或float初始化BigDecimal时,会出现精度丢失的问题。比如使用double时,打印结果可能并非预期的精确值。这是因为double类型无法精确表示所有浮点数,导致结果的不准确性。正确的初始化方式是通过字符串进行,避免了精度问题。使用BigDecimal构造函数和valueOf方法的初始化结果会...

  • //构造函数中初始化 players 数组 this.players = players;//由外部在实例化类时,传入一个已经创建好的数组,直接赋值给成员变量即可 //假如构造方法中的参数是数组的长度,那么定义代码跟无参中类似,只是把无参中的12替换成参数传过来的长度就好 } ...

  • 构造函数执行顺序问题:在Java中,当创建子类对象时,父类的构造函数会首先被调用,用于初始化父类的状态。如果在子类构造函数中未显式调用super,Java编译器会自动插入一个对父类无参构造函数的调用。如果父类没有无参构造函数且子类构造函数中没有显式调用合适的父类构造函数,就会导致编译错误,提示父...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部