当前位置:编程学习 > JAVA >>

javaSe 基础

请问一下java中 int i = 0;和int i;i = 0;有什么区别? java --------------------编程问答-------------------- 没啥区别。
保险起见,用第一种。(实际上JAVA不允许使用未初始化的局部变量) --------------------编程问答-------------------- 基本没区别。。
第一个是声明变量的同时实例化;
第二个是先声明变量,赋值的时候才实例化。

--------------------编程问答-------------------- 使用上没什么区别,一般都用第一种。 --------------------编程问答-------------------- 如果是定义全局变量,没什么区别。
如果是定义局部变量,就要给变量初始化。 --------------------编程问答-------------------- java里定义的时候应该也要赋初始值吧,或者至少推荐这么做。 --------------------编程问答--------------------
引用 2 楼 AA5279AA 的回复:
基本没区别。。
第一个是声明变量的同时实例化;
第二个是先声明变量,赋值的时候才实例化。


+1. --------------------编程问答-------------------- 不过有时候还必须使用

int i ; 

i = 0 ;

就像需要一个值去记录数组位置的下标,然后传递给其他方法使用的时候。 --------------------编程问答-------------------- 还是第一种写法保险些 --------------------编程问答-------------------- 如果int i;和i=0;是一起出现的, 那当然和int i=0;是没什么区别的,有人说用第二种保险点, 那都是胡扯,因为这里是int,不给值默认也是0。 但是在实际业务开发中,将这两个int i=某个值;分成两部分来写是因为业务的需要,比如, 你的i在一个try catch里面赋值,但是还要在try catch之后使用。 --------------------编程问答--------------------
没什么区别 --------------------编程问答-------------------- 没什么区别,为了保持代码的规范性,建议用第一种。 --------------------编程问答--------------------
引用 1 楼 whut_lcy 的回复:
没啥区别。
保险起见,用第一种。(实际上JAVA不允许使用未初始化的局部变量)

我建议使用第二种,什么保险起见啊,如果int i未初始化,代码根无法编译,还怕什么保险不保险的. --------------------编程问答--------------------
引用 12 楼 whz137458 的回复:
引用 1 楼 whut_lcy 的回复:没啥区别。
保险起见,用第一种。(实际上JAVA不允许使用未初始化的局部变量)
我建议使用第二种,什么保险起见啊,如果int i未初始化,代码根无法编译,还怕什么保险不保险的.


int i 未初始化不能编译?try,man!
都是int类型的了你还怕他为空吗, 他能为空吗 --------------------编程问答-------------------- 这是个很好的问题。要从很多种不同的角度来看。
变量是成员变量还是局部变量?变量的修饰是什么样的?final?static?

我写了个小程序,应该能反映出2者在不同状况下的区别。



public class TestC {
/*
 * 定义成员变量
 * 尾数为1表示定义时进行初始化
 * 尾数为2表示在代码块中进行初始化
 * 尾数为3表示在构造函数中进行初始化
 * 尾数为4表示在静态代码块中进行初始化
 */
/*
 * 普通成员变量 
 */
int field_a1 = 5;
int field_a2;
int field_a3;
/*
 * final 成员变量
 */
final int  field_b1 = 5;
final int  field_b2;
final int  field_b3;
/*
 * static成员变量
 */
static int field_c1 = 5;
static int field_c2;
static int field_c3;
static int field_c4;
/*
 * static final 成员变量
 */
static final int field_d1 = 5;
//报错:未初始化 。The blank final field field_d2 may not have been initialized
//static final int field_d2;
//报错:未初始化 。The blank final field field_d3 may not have been initialized
//static final int field_d3;
static final int field_d4;

//代码块
{
field_a2 = 5;
field_b2 = 5;
field_c2 = 5;
//field_d2 = 5;
}

//静态代码块
static{
field_c4 = 5;
field_d4 = 5;
}

//构造函数
public TestC(){
field_a3 = 5;
field_b3 = 5;
field_c3 = 5;
//field_d3 = 5;

}

/*
 * 定义局部变量
 * 尾数为1表示定义时进行初始化
 * 尾数为2表示在代码块中进行初始化
 */
public void TestMethod(){
/*
 * 普通局部变量
 */
int local_a1 = 3;
int local_a2;
/*
 * final局部变量
 */
final int local_b1 = 3;
final int local_b2;
{
local_a2 = 3;
local_b2 = 3;
}
}
/*
 * 定义局部变量(静态)
 * 尾数为1表示定义时进行初始化
 * 尾数为2表示在代码块中进行初始化
 */
public static void TestStaticMethod (){
/*
 * 普通局部变量
 */
int slocal_a1 = 3;
int slocal_a2;
/*
 * final局部变量
 */
final int slocal_b1 = 3;
final int slocal_b2;
{
slocal_a2 = 3;
slocal_b2 = 3;
}
}
}



然后我们编译它,得到TestC.class
对其进行反编译,看看在编译过程中他是怎么执行的。
【进行反编译的TestC.jad】


public class TestC
{

    public TestC()
    {
        field_a1 = 5;
        field_a2 = 5;
        field_c2 = 5;
        field_a3 = 5;
        field_c3 = 5;
    }

    public void TestMethod()
    {
        int local_a1 = 3;
        int local_b1 = 3;
        int local_a2 = 3;
        int local_b2 = 3;
    }

    public static void TestStaticMethod()
    {
        int slocal_a1 = 3;
        int slocal_b1 = 3;
        int slocal_a2 = 3;
        int slocal_b2 = 3;
    }

    int field_a1;
    int field_a2;
    int field_a3;
    final int field_b1 = 5;
    final int field_b2 = 5;
    final int field_b3 = 5;
    static int field_c1 = 5;
    static int field_c2;
    static int field_c3;
    static int field_c4 = 5;
    static final int field_d1 = 5;
    static final int field_d4 = 5;

}


我们可以看到,关于局部变量。不管是如何定义和初始化。都是会写成一句。
关于成员变量。
不加修饰的普通成员变量。无论你在哪里对他初始化。系统会将初始化工作放到构造函数中去。
final成员变量。无论你在哪里对他初始化。系统会把final放在类中进行初始化。
static成员变量则有很多不同的结果。当你在定义时或者静态代码块中初始化,那么它将在类中进行初始化。
如果你在代码块中或者构造函数中对其初始化,那么他的初始化就会在构造函数中进行。

--------------------编程问答-------------------- 颜色有点表示不太对- - 下次不用/**/了,用javadoc注释。。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,