求大侠解答小弟三个问题,求解!谢谢喽

whx405831799 2012-03-01 01:02:46
问题1:
eg:
class Text
{int a;
a=1;//为什么这一行是非法的,书上说要 int a=1;就是合法的。说类体的内容是变量的定义和方法组成,这样写不行?
void f()
{}
}


问题2:一定要有个PUBLIC类么? public类一定要和main方法那个在一块么?

问题3:书上说实例变量在没有创建对象前不分配内存,但是若我定义一个 int a=10; 那a是实例变量,我赋值了,但没创建对象,那它没分配到内存怎么赋得值?

求高人解答,小弟菜鸟啊!谢谢
...全文
151 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whx405831799 的回复:]
还是不是蛮懂那个实例变量分配内存的问题 ?求高手详解啊!
[/Quote]
首先要理解定义赋值语句的类型,变量和对象的关系
比如 A a = new A();这样的语句,可以拆分为2条语句
A a; 声明变量语句和
a = new A();给变量赋值语句
在这里,要理解好,A是类型,a是变量,new A()才是对象,也就是实例
A a;这样的声明语句,在编译的时候就会把a编译为一个栈内的相对地址,所以在编译期就已经决定了a的内存地址,在程序运行的时候,对a的操作就编译为对栈内的某个相对地址的操作
a = new A();这样的语句,在程序运行的时候,就会在a的地址里保存new A()对象的地址,实例变量分配内存指的是new A()的内存分配,而不是a的内存分配,因为a在编译时就已经被决定好了,而new A()是程序运行的时候,通过new指令在堆中申请内存,然后通过类的初始化在申请的对内存中保存好相应的对象信息,然后再把这个对内存的地址保存到a的地址中。
whx405831799 2012-03-01
  • 打赏
  • 举报
回复
还是不是蛮懂那个实例变量分配内存的问题 ?求高手详解啊!
whx405831799 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qybao 的回复:]
class Text
{int a;
a=1;//为什么这一行是非法的,书上说要 int a=1;就是合法的。说类体的内容是变量的定义和方法组成,这样写不行?
因为a=1;是执行语句,要么放在方法内部,要么放在{}内做为初始化块的代码
void f()
{}
}


问题2:一定要有个PUBLIC类么? public类一定要和main方法那个在一块么?
……
[/Quote]

谢谢了 那实例变量是什么回事?
书上的原话是 当JAVA程序执行时,类的字节码文件就被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存。但是。类中的类变量被加载到内存。
例子是
class Takecare{static int x;
int y;}
class A
{ Takecare A1=new Takecare();
}


我的问题就是说 我不创建对象的话,难道就不分配内存么?我要是附一个值,是不是要写入内存?还有就是
楼上说 int a,a是基本类型,是在栈内分配内存的 那书上咋说要有对象才被分配内存?我晕了
安特矮油 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qybao 的回复:]
class Text
{int a;
a=1;//为什么这一行是非法的,书上说要 int a=1;就是合法的。说类体的内容是变量的定义和方法组成,这样写不行?
因为a=1;是执行语句,要么放在方法内部,要么放在{}内做为初始化块的代码
void f()
{}
}


问题2:一定要有个PUBLIC类么? public类一定要和main方法那个在一块么?
……
[/Quote]
+1,这位兄弟讲的很好
qybao 2012-03-01
  • 打赏
  • 举报
回复

class Text
{int a;
a=1;//为什么这一行是非法的,书上说要 int a=1;就是合法的。说类体的内容是变量的定义和方法组成,这样写不行?
因为a=1;是执行语句,要么放在方法内部,要么放在{}内做为初始化块的代码
void f()
{}
}


问题2:一定要有个PUBLIC类么? public类一定要和main方法那个在一块么?
不一定,public只是为了访问的可见性。也不一定要有main方法,main方法是程序入口方法,主程序有就可以了

问题3:书上说实例变量在没有创建对象前不分配内存,但是若我定义一个 int a=10; 那a是实例变量,我赋值了,但没创建对象,那它没分配到内存怎么赋得值?
int a,a是基本类型,是在栈内分配内存的,没有什么创建对象的说法,要分清楚基本类型和对象类型,对象类型是需要new来分配内存的
MiceRice 2012-03-01
  • 打赏
  • 举报
回复
问题1:
int a=1; 这种写法是属性定义,只不过带初始值,但本质仍是定义;
而你直接写a=1;这个是语句,语句只能在函数或静态块中执行。

问题2:
如果是非内部类,那么要么是public要么是缺省级别(可理解为package级别),因为你定义类就是要给别人访问用的,如果Java允许你定一个private类,那怎么去访问它呢?
内部类是指在某个类之内定义的。

public类可以没有main函数。

问题3:
你这个int是基础类型,不存在对象,所以变量自身直接就可以保存值了。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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