黑马程序员技术交流社区

标题: 基础题 求解释 [打印本页]

作者: 杨华东    时间: 2012-10-8 11:07
标题: 基础题 求解释
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也是局部变量,但是编译失败!!!默认初始值难道在确定的某些位置上才生效吗?求解释。。
}
}
作者: 葬天    时间: 2012-10-8 11:10
本帖最后由 葬天 于 2012-10-8 11:39 编辑

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

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


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

作者: 唐增友    时间: 2012-10-8 11:22
楼上正解,学习了
作者: 曾浩    时间: 2012-10-8 11:22
编译只是检查语法错误 int a,b 只是在栈内存中定义了量临时变量 并且还没有给a b 初始化   而栈内的变量 没有初始化是不能做运算的
只有堆内存中的变量才有默认值
作者: 杨华东    时间: 2012-10-8 11:24
曾浩 发表于 2012-10-8 11:22
编译只是检查语法错误 int a,b 只是在栈内存中定义了量临时变量 并且还没有给a b 初始化   而栈内的变量 没 ...

那你看看  上面编译通过的函数。其中的局部变量 不就是在栈内存中吗??
作者: 曾浩    时间: 2012-10-8 11:33
杨华东 发表于 2012-10-8 11:24
那你看看  上面编译通过的函数。其中的局部变量 不就是在栈内存中吗?? ...

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

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




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