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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-8 11:07  /  1445 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test7
{
public static void main(String[] args)
{
  
}
public static void function_1(int a,int b)
{
  System.out.println(a+b);//a,b是局部变量编译通过
}
public static void function_2()
{
  int a,b;
  System.out.println(a+b);//a,b也是局部变量但是编译失败!!!不是说默认初始值为0吗?为什么啊??
}

public static int function_3(int c)
{
  return c;//此时c是局部变量,编译通过。
}
public static int function_4()
{
  int c;
  return c;//此时c也是局部变量,但是编译失败!!!默认初始值难道在确定的某些位置上才生效吗?求解释。。
}
}

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 加油

查看全部评分

7 个回复

倒序浏览
本帖最后由 葬天 于 2012-10-8 11:39 编辑

类的成员,JVM会自动给它们赋初始值。
boolean类型赋值为false
引用类型赋值为null
其它的赋值为0

而局部变量,JVM不会给它们赋初始值不初始化而是直接使用是会出错的。


增加一点不知楼主可否同意:
方法参数的默认值取调用者传递进来的实际值.

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解,学习了
回复 使用道具 举报
编译只是检查语法错误 int a,b 只是在栈内存中定义了量临时变量 并且还没有给a b 初始化   而栈内的变量 没有初始化是不能做运算的
只有堆内存中的变量才有默认值

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
曾浩 发表于 2012-10-8 11:22
编译只是检查语法错误 int a,b 只是在栈内存中定义了量临时变量 并且还没有给a b 初始化   而栈内的变量 没 ...

那你看看  上面编译通过的函数。其中的局部变量 不就是在栈内存中吗??
回复 使用道具 举报
杨华东 发表于 2012-10-8 11:24
那你看看  上面编译通过的函数。其中的局部变量 不就是在栈内存中吗?? ...

但是 那个是形式参数啊 调用时可以接受数据啊  
定义int a,b 后就直接输出  其实a b 里面什么都没有啊
回复 使用道具 举报
楼主代码中变量都为局部变量
function_1中a,b为形参,fuction_2中为实参
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。

实参全称为"实际参数"是在调用时传递给函数的参数.
实参类型
  实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
所以第二个a,b必须初始化

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
路过,收获,顶一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马