最近想好好学学JAVA,就把以前的课本那出来看了,刚看了点,就有疑惑了.怎么跟我理解的不一样.
书上说(面向对象程序设计系列教材;Java语言程序设计;主编 殷兆麟;高等教育出版设):
当构造一个类的实例时,编译器主要完成以下三件事情
1、为对象分配内存空间
2、初始化对象中实例变量的值,初始值可以是缺省值或者变量按指定的值初始化
3、调用对象的构造方法如:
public class Point{
static int x=0; //类变量
int y; //实例变量
public Point(int x,int y){
Point.x=x;
this.y=y;
}
public static void main(String arg[])
{
Point point=new Point(10,10);
}
}我一直都以为是按1,3,2的顺序做的:构造方法中不就有this.y=y对实例变量的赋值操作吗。
如果在调用构造方法前就把实例变量给初始化了,那构造方法中那不是多余了吗。我想基本上是我的理解有问题。所以请各位指定一下,我究竟是哪里想错了
书上说(面向对象程序设计系列教材;Java语言程序设计;主编 殷兆麟;高等教育出版设):
当构造一个类的实例时,编译器主要完成以下三件事情
1、为对象分配内存空间
2、初始化对象中实例变量的值,初始值可以是缺省值或者变量按指定的值初始化
3、调用对象的构造方法如:
public class Point{
static int x=0; //类变量
int y; //实例变量
public Point(int x,int y){
Point.x=x;
this.y=y;
}
public static void main(String arg[])
{
Point point=new Point(10,10);
}
}我一直都以为是按1,3,2的顺序做的:构造方法中不就有this.y=y对实例变量的赋值操作吗。
如果在调用构造方法前就把实例变量给初始化了,那构造方法中那不是多余了吗。我想基本上是我的理解有问题。所以请各位指定一下,我究竟是哪里想错了
如果我用Point point=new Point();创建对象,那第2步用默认的初始值初始化。如int i;中的i被初始化为0.再调用默认的构造函数
如果我用Point point=new Point(10,10);创建对象,那第2步用默认的初始值初始化。如int i;中的i被初始化为0.然后再调用构造函数public Point(int x,int y)重新给实例变量初始化吗?
public Point(int x, int y) {
this.x=x;
this.y=y ;
}
你设定了带参数的构造方法,当你创建对象实例的时候,向里面传参数.10,10是你传进去的.而且构造方法是必须定义的,如果你自己不定义,虚拟器默认给你定义一个没有参数的.
当你new一个新的对象的时候,该对象存放在堆中;而实例化则会将该引用存放在栈地址中;
而显式构造函数永远都是在静态static和类初始化后才会被调用的
当编译器为对象分配好内存后,开始对它实例变量初始化,如果你给了实例变量一个值,那么编译器就会将这个值给这个实例变量。例如:int i =1;(这其中好象也并不是直接就将 1 赋给的 i ,而是首先将 0 ,也就是 int 型实例变量的默认初始化值赋给 i ,然后在将 1 赋给 i ,以前做过这样的实验,毕竟是自己做的,没有依据)。如果你没有给实例变量赋值,那么编译器就会将实例变量的默认值 赋给这个实例变量。例如 String 类型的赋给 null,int 类型的赋给 0 。最后调用构造方法,在你的例子中使用了 有参的构造方法。这些参数对应着实例变量。那么这个构造方法就有着更改实例变量的值的作用。很多情况下,你是不能确定实例变量的出始值的,这个时候,你就可以用构造方法进行传参。以便能够在使用对象之前对其实例变量的值进行必要的更改。
想结贴结不了。
提示总分和所给的分总和不等。
查了好久,原来,错误在这
:结帖的时候发现给自己回帖处自动加了10分。而且还不允许改为0,改不了。所以我有截图在本地的。
为什么CSDN不能把本地的图片贴上来。插入图片时怎么都要输入http://地址的?