JAVA成员变量赋值的问题

zhudongdong007 2009-12-21 07:08:18
如果我写
public class Test{
int a=5;
a=10; //这里编译不能通过
public static void main(String[] args){
//此处省略方法体
}
}

如果我把a=10;去掉就能通过编译。
这个是为什么啊!肯请高手们帮忙解释一下?谢谢。
...全文
1267 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
democreen 2010-12-02
  • 打赏
  • 举报
回复
改成静态变量
static int a;
你想干嘛就干嘛,试试,多试试才有收获
zhudongdong007 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaofeifei123 的回复:]
哥哥  你看看书  这是个很低级的错误  在Java里 对变量的操作必须要在方法中的    这样的写就是错误的  Java不是C 或者C++  在这一点上是不一样的
[/Quote]
我刚看两个星期,很多地方不知道的,谢谢你的提示!
zhudongdong007 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yang677888 的回复:]
引用 2 楼 yang677888 的回复:
Java codepublicclass Test{int n=5;publicvoid test(int n){
        n=10;
        System.out.println(n);
    }publicstaticvoid main(String[] args){int a=5 ;
        a=10;   
        System.out.println(a);
       Test t=new Test(); //呵呵
        t.test(1);
    }
}
定义变量在类Test的int 啊
这也可以通过编译,lz看看,最好写个测试体会
T t = new T();错了

int a 是类Test的属性,改变属性的值不能直接这样赋值的,要通过对象调用方法
[/Quote]

谢谢!
fuzhen1015 2009-12-22
  • 打赏
  • 举报
回复
要把int a=5; a=10; 放在 public static void main(String[] args){
} 这里面,变量才会得到执行。
crazylaa 2009-12-22
  • 打赏
  • 举报
回复
类里面直接不能用单独的赋值语句。
colin_pxx 2009-12-22
  • 打赏
  • 举报
回复
因为int a=5;和a=10;都声明成全局变量了如果a=10声明在一个函数内部就成了局部变量是可以的
yahch 2009-12-22
  • 打赏
  • 举报
回复
是啊,变量的要在主方法public static void main(String[] args){下面声明啊。
bobo415 2009-12-22
  • 打赏
  • 举报
回复
int a = 10; //这个是定义/声明语句,放在此处ok
a = 10; //这个是赋值语句,游离状态,属于表达式,应该要放到程序块中
APOLLO_TS 2009-12-22
  • 打赏
  • 举报
回复
jvm-preprocessor(程序由数据和指令组成,在预处理的时候需要分清那个是数据那个是执行指令,java认为,数据源自变量,执行指令源自方法---变量最后加载到寄存器,执行指令由算数逻辑单元执行)。
老紫竹 2009-12-22
  • 打赏
  • 举报
回复
public class Test{
int a=5;
{
a=10; //这里编译不能通过
}

因为那个是语句,所以要放到{}中间才行。
等同于放到了构造器里面
zhudongdong007 2009-12-22
  • 打赏
  • 举报
回复
public class ClassExample{
// 声明成员属性,可以是静态的或非静态的
int i;
static int j;

// 静态初始化语句块
static{
j=10;
System.out.println("In static initializer.");
}

//实例初始化语句块
{
i=10;
System.out.println("In instance initializer.");
}

// 构造方法
public ClassExample(){
System.out.println("In constructor.");
}
public static void main(String[] args){
new ClassExample();
}
}

但是,我如果把整个“实例初始化语句块”注释掉,这样对i赋值:
int i;
i =10; //但如果直接采取int i=10;的赋值形式也可以编译通过
static int j;
则显示这样的错误:

ClassExample.java:8: <identifier> expected
i=10;
^
ClassExample.java:8: cannot resolve symbol
symbol : class i
location: class ClassExample
i=10;
^
2 errors

怎么回事呢?呵呵
兄弟的问题是个好问题啊,以前没注意。找了一下,建议去看《JAVA IN A NUTSHELL》第3章,3。2 CREATING AND INTIALIZING OBJECTS。就都明白了。

看你的名字应该是从C++转过来的吧。因为JAVA是纯面向对象语言,就是说所有的东西都是类,包括已经存在的API库和任何人要编的JAVA程序。在类里只能有2种东西存在。一个是变量,一个是方法。所以用任何一种都合理。
private int i =10;这个就是变量。合理。
如果写成这样
private int i;
i = 10;
很明显第2个不是方法。所以JAVA说出错。

但是JAVA语言里除了定义变量和方法外,还定义了构造函数。和方法类似。就是没有返回。
这个构造函数不管你定义不定义都存在。不定义,JAVA就自动生成,来默认。

当你写成这样的时候,
int i;
static int j;

// 静态初始化语句块
static{
j=10;
System.out.println("In static initializer.");
}

//实例初始化语句块
{
i=10;
System.out.println("In instance initializer.");
}

// 构造方法
public ClassExample(){
System.out.println("In constructor.");
}


JAVA实际做的是把
int i;
和这个块
{
i=10;
System.out.println("In instance initializer.");
}
放到构造函数里,就象

public ClassExample(){

int i;

i=10;

System.out.println("In instance initializer.");

System.out.println("In constructor.");
}
这样的来执行。
同样,对于静态的,JAVA也有个默认的构造函数在后台。静态的声明和静态块都放到那里。
xuhailang00 2009-12-22
  • 打赏
  • 举报
回复 1
额。忘记了另一个情况。语句块:
int a = 5;
{
a = 10;
}

也是可以的。
xuhailang00 2009-12-22
  • 打赏
  • 举报
回复
也就是说 定义变量时可以放在方法体外面,如:int a ; 赋初值也可以(int a = 5;)
而表达式只能放在方法体里面。方法体里可以定义局部变量。只在该方法体里有效。
xuhailang00 2009-12-22
  • 打赏
  • 举报
回复
int a = 5 ; 是 定义变量赋初值。
a = 10; 是赋值表达式,必须放在方法体里面。
chenyong0214 2009-12-22
  • 打赏
  • 举报
回复
人人都是从菜鸟开始的,坚持就是胜利!
NTU_free 2009-12-21
  • 打赏
  • 举报
回复
受教,向你们学习,我学了C VB JAVA 但区别还不是很清楚,特别是
JAVA所有的除定义或声明语句之外的任何语句都必须在方法内部(而方法又必须在某个类内部,不存在游离于类外部的方法或成员)
feilong520163 2009-12-21
  • 打赏
  • 举报
回复
要放在public static void main(String[] args){内

yeah_aly 2009-12-21
  • 打赏
  • 举报
回复
谨记:类内方法体外不能有可执行语句。
whut_lcy 2009-12-21
  • 打赏
  • 举报
回复
确实如楼上一位说的。
根因: JAVA所有的除定义或声明语句之外的任何语句都必须在方法内部(而方法又必须在某个类内部,不存在游离于类外部的方法或成员)

再来看看你的代码:int a = 10; //这个是定义/声明语句,放在此处ok
a = 10; //这个是赋值语句,游离于方法甚至类外部,不合法




SADSDSDDASDASD 2009-12-21
  • 打赏
  • 举报
回复
你要是学Java2 的话 我用的是清华版的Java2 你要是有这书的话 你看看44页。。
加载更多回复(4)

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧