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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们都知道JVM能赋给类中的成员变量一个默认的初始值,但是局部变量就必须自己初始化。
哪位大侠知道这是基于什么考虑的啊?

4 个回复

倒序浏览
成员变量有可能通过cheng成员函数来初始化,所以让成员变量一个默认的初始值,但是局部变量只能在函数体里初始化,所以要求显性初始化。

评分

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

查看全部评分

回复 使用道具 举报 1 0
局部变量和成员变量主要是他们作用域的区别,
成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。
另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。

评分

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

查看全部评分

回复 使用道具 举报
年轻的老头 发表于 2014-3-26 21:11
成员变量有可能通过cheng成员函数来初始化,所以让成员变量一个默认的初始值,但是局部变量只能在函数体里 ...

package base.day8;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileInputStreamDemo {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
               
                //第一步:创建源
                String filename = "G:\\java\\workspace1\\" +
                                                  "javaenhance\\src\\base\\" +
                                                  "day8\\FileInputStreamDemo.java";
               
                //第二步:创建管道
                InputStream in = new FileInputStream(filename);
               
                //第三步:读写操作
                byte[] buff = new byte[1024];//定义缓冲区
                int len;//读到文件末尾,结束标记!!!!
                while((len = in.read(buff)) !=-1 ) {//当len等于-1,文件结束。
                        System.out.println(new String(buff,0,buff.length));
                }
                System.out.println("------------------");
               
                in.close();
        }

}
那上面标红的在myeclipse中编译怎么不报错???
回复 使用道具 举报
本帖最后由 执笔梦 于 2014-4-9 22:32 编辑

    个人见解:   
   局部变量不是说一定要在定义的时候就赋值...在你对于他进行运算操作或其它操作时,要对它进行赋值操作,因为它是没用默认数值的


            int len;你在这定义一个局部变量,没有赋值,不会报错,
                while((len = in.read(buff)) !=-1 ) {//你在这其实就是赋值操作,read()方法返回的是一个int型 的值..看下read()方法的api,
我也不知道对不对...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马