黑马程序员技术交流社区

标题: 成员变量有默认初始化值,不给初始值也能参与运算? [打印本页]

作者: danielzyj    时间: 2014-3-26 19:28
标题: 成员变量有默认初始化值,不给初始值也能参与运算?
本帖最后由 danielzyj 于 2014-3-27 08:35 编辑

  1. class test
  2. {
  3.         
  4.         public static void main(String[] args)
  5.         {
  6.                 int i, j, k;
  7.                 i=100;
  8.                 while (i>0)
  9.                 {
  10.                         j=i*2;
  11.                         System.out.println("The value of j is " + j );
  12.                         k=k+1;
  13.                         i--;
  14.                 }
  15.                 System.out.println("Hello World!");
  16.         }
  17. }
复制代码

毕老师在讲面向对象封装的时候讲到,成员变量有默认初始化值,不给初始值也能参与运算,为什么我这个会报错提示没有初始化值呢?



作者: tcny    时间: 2014-3-26 19:38
  1. public class Testt {

  2.         int j;
  3.         public static void main(String[] args) {

  4.                 int i;
  5.                
  6.                 Testt t = new Testt();
  7.                 System.out.println(t.j); //j封装在类Testt里,有初值0
  8.                 System.out.println(i);//错误,i在main方法中,没有封装
  9.         }

  10. }
复制代码

作者: chen_x    时间: 2014-3-26 19:41
你程序里的 int i, j, k;是定义在类test的成员函数--main函数里的,所以 i, j, k都不是成员变量,而是局部变量。

将 i, j, k定义在main函数外面就是成员变量了,而且要定义成static的:

class test
{
            static int i,j,k;
        public static void main(String[] args)
        {
               
                i=100;
                while (i>0)
                {
                        j=i*2;
                        System.out.println("The value of j is " + j );
                        k=k+1;
                        i--;
                }
                System.out.println("Hello World!");
        }
}
作者: 唐僧踏歌    时间: 2014-3-26 20:20
上面程序 main方法里整形变量 i,j,k属于局部变量,不会自动地以类型的默认值赋值的,需要显示赋值才行。
如果是成员变量的话,系统就会自动以类型的默认值赋值。
j=i*2; j已经显示赋值了,错是在局部变量K上,只要令k=0或者什么整数,就行了。。谢谢


作者: 湛添友    时间: 2014-3-26 20:28
k=k+1错了,k都没赋值!!
作者: 追逐    时间: 2014-3-26 20:39
转函数中定义的变量是局部变量。只有直接定义在类中的变量才是成员变量
如:
class Test {
      int i,j,k; //这种形式的变量才是成员变量
      public static void main(String[] args) {
             int a,b,c; //这种形式的变量是局部变量不是成员变量
      }
}
作者: osully    时间: 2014-3-26 20:43
直接定义在类中的才叫成员,也就是说对象一建立就会有的属性
其他都是局部的.
作者: Mr.__ㄨīn    时间: 2014-3-26 22:31
i j k 是局部变量,不是成员变量。
  1. public static void main(String[] args)
  2. {
  3.         int i, j, k=0;
  4.         i=100;//给i赋值
  5.         while (i>0)
  6.         {
  7.                 j=i*2;//给j赋值
  8.                 System.out.println("The value of j is " + j );
  9.                 k=k+1;//没有赋值,直接参加运算,肯定报错。
  10.                 i--;
  11.         }
  12.         System.out.println("Hello World!");
  13. }
复制代码


作者: 橡皮-leo    时间: 2014-3-27 10:57
因为你的i,j,k是属于局部变量而不是成员变量,成员变量是在一个类在外层大括号内定义的。
作者: trhthyj    时间: 2014-3-27 12:39
成员变量是定义在类里面,函数之外的变量;i,j,k都是在主函数中,是局部变量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2