java 声名变量报错_java细节

本篇主要记录java零散又容易错,但是又常常被忽略的问题。

①.因为笔者对jvm虚拟机不是很了解,所以没办法做出深层次的讲解

②.所有结论都是查网络,查资料和亲自跳坑得出来的,如果不对的和片面的请看到的不吝赐教

1.java变量声明后直接输出会不会报错?

1.1.举例

public class JavaTest {

//1.类静态变量只声明

static int a;

static char c;

static long l;

static String s;

static boolean aBoolean;

//2.类成员变量只声明

int anInt;

char cChar;

long ll;

String ss;

boolean aBoolean2;

public void test(){

//3.方法中的局部变量只声明

int aint;

System.out.println(aint);

System.out.println("----类变量-----");

System.out.println("static int:"+a);

System.out.println("static char:"+c);

System.out.println("static long:"+l);

System.out.println("static String:"+s);

System.out.println("static boolean:"+aBoolean);

System.out.println("----类成员变量-----");

System.out.println("int:"+anInt);

System.out.println("char:"+cChar);

System.out.println("long:"+ll);

System.out.println("String:"+ss);

System.out.println("boolean:"+aBoolean2);

}

public static void main(String[] args) {

JavaTest t = new JavaTest();

t.test();

}

}

1.2.输出

其中 ①.类静态变量只声明;②.类成员变量只声明;并不为其赋值,直接使用

----类变量-----

static int:0

static char:

static long:0

static String:null

static boolean:false

----类成员变量-----

int:0

char:

long:0

String:null

boolean:false

其中 ③.方法中的局部变量只声明;不为其赋值,直接使用

编译报错:Error:(90, 28) java: 可能尚未初始化变量aint

1.3.结论

类的成员变量只声明,不赋值直接使用,会输出默认值

对于类的成员变量(静态变量),不管程序有没有显示的初始化,Java虚拟机都会先自动给它初始化为默认值。

局部变量只声明直接输出会报错

①.局部变量声明后,Java虚拟机不会自动给它初始化为默认值。因此对于局部变量 必须经过显示的初始化,才能使用它。

②.如果使用一个没有被初始化的局部变量,编译器会报错。局部变量存储于虚拟机栈的局部变量表中

③.局部变量只声明,不初始化,并不会报错,只有在其被使用时,又未初始化,才会报错。(也就说,我只声明一个变量放在那看,没关系的,不过应该没人会这么干)

2.为什么不能在java类中方法外给已定义的成员变量赋值?

2.1.举例

public class JavaTest {

/**

* 对成员变量进行声明(定义)

*/

int test1;

int test2;

//1.直接为其赋值

test1 = 1;

//2.使用代码块为其赋值

{

test2 = 2;

}

public void test(){

System.out.println("test1"+test1);

System.out.println("test2"+test2);

}

public static void main(String[] args) {

//3.在mian()方法中为已定义变量赋值

int test3;

test3 = 3;

System.out.println("test2"+test2);

JavaTest t = new JavaTest();

t.test();

}

}

2.2.输出

1.直接在类中为其赋值

编译报错:Error:(64, 8) java: 需要

2.使用代码块为其赋值

test2:2

2.3.结论:

不能直接为已声明的成员变量赋值(初始化)(网上比较好的解释)

①.成员变量在类的范围内,存在于堆内存中,会有默认的初始值,在声明的同时已经给变量赋值了。再次”赋值“实际是使用了语句,而类体里面只能出现变量和方法,不能出现语句。

②.上面过程是2个操作,第一个,声明一个类的成员变量,第二个,对成员变量赋值,而成员变量属于对象,对它的赋值只能由对象来操作,在类中单独对其赋值,当然要报错了。成员变量可以不用赋初值,在new对象的时候,系统会默认分配一个初值,基本数据类型赋为0,引用类型的成员变量赋值为null

为什么可以在代码块中执行赋值语句

①.代码块的执行是在对象的初始化操作的时候执行,代码块中可以包含任何可执行操作,在代码块中对声明的变量进行初始化,即相当于在类中执行 int test2 = 2; 这个操作。

②.在main()方法中,既然是在方法中,那么就是局部变量,也就是一个方法的属性,局部变量声明后,必须赋值才能使用,要不然只能看着。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值