A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码

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


评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

9 个回复

倒序浏览
  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. }
复制代码
回复 使用道具 举报
你程序里的 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!");
        }
}
回复 使用道具 举报
上面程序 main方法里整形变量 i,j,k属于局部变量,不会自动地以类型的默认值赋值的,需要显示赋值才行。
如果是成员变量的话,系统就会自动以类型的默认值赋值。
j=i*2; j已经显示赋值了,错是在局部变量K上,只要令k=0或者什么整数,就行了。。谢谢

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
k=k+1错了,k都没赋值!!
回复 使用道具 举报
转函数中定义的变量是局部变量。只有直接定义在类中的变量才是成员变量
如:
class Test {
      int i,j,k; //这种形式的变量才是成员变量
      public static void main(String[] args) {
             int a,b,c; //这种形式的变量是局部变量不是成员变量
      }
}
回复 使用道具 举报
osully 金牌黑马 2014-3-26 20:43:57
7#
直接定义在类中的才叫成员,也就是说对象一建立就会有的属性
其他都是局部的.
回复 使用道具 举报
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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
因为你的i,j,k是属于局部变量而不是成员变量,成员变量是在一个类在外层大括号内定义的。
回复 使用道具 举报
成员变量是定义在类里面,函数之外的变量;i,j,k都是在主函数中,是局部变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马