java构造函数初始化的问题

最近正在自学java,在学到java构造器的时候,写到这样一段代码!

不是构造函数对参数进行初始化了吗?那输出的age的值应该是10啊!为什么还会出现两个0!新手不太明白!请高手帮忙解答一下!谢谢!

1.首先明白构造函数的定义,如下:
java 构造函数
一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
2.请注意这句话:(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。也就是上面你的构造函数根本就没有传递参数给它,也就是说你在构造函数声明的int age=10,只是相当于函数里的一个变量,超出这个函数就失去作用了,也就是说为默认的int值为0.
3.如果是要初始化成员变量,最好还是构造有参。
知识水平有限,望请采纳!!!呵呵!!!
温馨提示:内容为网友见解,仅供参考
第1个回答  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/2256201700
第2个回答  2013-04-13
输出的10是因为那个age为你构造函数的局部变量,this.age是这个类的成员变量,就是你类定义的一个属性,因为你没有为它赋初值java内部会自动赋值为0,而在你main函数中之所以会打印0是因为调用的是p1类的成员变量,自然也应该是没有赋初值的那个age,所以是0!希望对你有帮助!
第3个回答  2013-04-13
3行构造函数外面的age是类的成员变量,6行构造函数内的按格式构造函数的变量,是一个局域变量,8行输出的是6行的那个age;9行输出的是类的成员变量age,而类的成员变量age没有赋初值,默认初值为0;
第4个回答  2013-04-13
楼上说的都对,构造函数里的新变量是10,构造结束 就销毁了。第二个输出函数this 关键字指代当前对象的引用,可以指向实例化的成员变量。建议看java核心技术里关于类与对象部分。

java构造函数初始化的问题
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行...

java为什么将类中的构造函数设为private,默认构造函数就不能初始化...
创建类对象就会调用构造函数,private是只能本类成员调用,你创建的对象根本没法调用private,肯定不能初始化啊

java 类中定义一个类,这两个类构造函数先后问题
先初始化父类的静态代码--->初始化子类的静态代码--> (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数 其他说明:2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入 3、创建类实例时,首先按照...

问一个java初始化问题,高手帮忙解答一下吧~
属性的访问操作是由编译器解析,不会有多态..程序运行的时候为Parent.x和Child.x 分配了不同的存储空间 在类Parent的构造方法中,因为多态.调用了Child的add()方法.而Child 的add()方法作用于Child.x 对Parent.x没有影响 所以p.x = 10

java构造方法初始化属性运算结果出错找不到原因?
”金城杞人“ 回答的对, 因为你int product =wide*long1;这样写的话,电脑会认为你重新声明了变量。所以不会变了。int product =wide*long1 和 上面的product 是两个东西,上面的是全局的,而逆函数里的是局部变量。所以可以用相同的变量名。

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

java构造函数有什么用,怎么用
Java构造函数的作用和用法 一、构造函数的作用 Java中的构造函数主要用于初始化对象的状态。当我们创建一个对象时,构造函数会被自动调用,以设置对象的初始状态。每个类都可以有一个或多个构造函数,根据参数的不同,构造函数的职责也有所不同。其主要作用包括:1. 初始化对象的属性。2. 为对象的行为...

Java初学编程,关于constructor的问题
可以用构造函数初始化频道号和节目,然后提供方法实现频道切换以及跳到某频道。public class Program{ private int num;private List<Event> eventList = new ArrayList<Event>();\/**默认构造函数*\/ public Program(){ this.num = 1; \/\/初始化频道为1.\/\/初始化频道列表 this.eventList.add(1);thi...

java中,子类调用父类函数构造函数中被重写的方法,输出语句为什么是默 ...
1,Java的函数调用是虚拟调用,对象名.方法名,调用的都是其真实类型的函数,就是说,对象实际上是一个dog,那么调用的就是dog的重写方法。父类构造器之所以被调用,是因为子类的构造器会调用父类的构造器,整个过程实际上是dog的构造。2,这个和初始化顺序有关,new对象时,会先初始化成员变量再调用...

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

相似回答