java 声明java变量内存分配 内存怎么分配

&&&&&&&&&&&
class Person
void talk()
System.out.println("我是: "+name+",
今年: "+age+"岁");
public class TestJava2_1
public static void main(String args[])
if (p == null)
p = new Person();
p.name = "张三";
p.age = 25;
为了更好的了解Java中变量的使用方式,我们做一个实验。将以上代码保存为TestJava2_1.java文件,之后执行 &javac TestJava2_1.java& 命令将代码编译成二进制文件。编译时将报错,报错内容大致如下:
&TestJava2_1.java:59: 错误: 可能尚未初始化变量p&
编译器认为引用数据类型变量p未初始化,所以不可以判断是否等于null,但我认为编译器对于此错误的表述不太准确。就算变量p没有给予初始值,默认值至少是存在的,那么用默认值和null比较有什么不可以呢。我认为正确的错误表述应该是 &变量p尚未分配内存空间&。&Person p& 仅仅是声明有一个引用数据类型变量p,但并未给p分配任何内存空间,这点和C/C++是不一样的。
将变量p的声明改为 &Person p = null& 后,执行 &javac TestJava2_1.java& 就能够成功编译。可见&&Person p = null& 语句除了赋予变量p初值外,还在赋值前为变量p分配了内存空间。
从上面的实验中可以看出,Java中引用数据类型变量的内存分配在赋初值时进行。用相同的方法测试Java中的基本数据类型变量,同样可以发现变量在声明时并没有分配内存,真正的内存分配是在赋初值时进行的。
阅读(...) 评论()java在声明一个变量时有没有分配内存空间?_百度知道
java在声明一个变量时有没有分配内存空间?
譬如说S为什么要把内存划分为静态区等四个区?
提问者采纳
局部变量的值等,如果没有引用指向这个对象就回收3、代码区—
存放程序中方法的二进制代码,都会分配内存空间为什么要把内存划分为静态区等四个区?1,系统自动释放JVM内存资源2,存放由new创建的对象和数组,静态变量和字符串常量,jvm不定时查看这个对象,不释放4、栈区—
由编译器自动分配释放只要定义了、堆区—
一般由程序员分配释放,存放函数的参数值、静态区—
存放全局变量,具体方法执行结束之后
其他类似问题
为您推荐:
其他1条回答
它占用的空间几乎可以忽略不计,只是多少不同而已。如果没有指定字符串给它只要声明变量就会分配内存
内存的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Java+内存分配及变量存储位置的区别
下载积分:700
内容提示:Java+内存分配及变量存储位置的区别 精心收集的各类精品文档,..
文档格式:PDF|
浏览次数:91|
上传日期: 21:03:05|
文档星级:
该用户还上传了这些文档
Java+内存分配及变量存储位置的区别
官方公共微信java中类变量和实例变量的实质区别?从内存分配时间角度深入讲解_马克社区吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:440贴子:
java中类变量和实例变量的实质区别?从内存分配时间角度深入讲解
每次创建一个类的对象的时候,系统为它创建了类的每一个实例变量的副本。我们就可以从对象中访问该实例变量。类变量或说静态变量跟实例变量是不一样的,不管为一个类创建了多少个对象,系统只为每个类变量分配一次存储空间。系统为类变量分配的内存是在执行main方法时马克-to-win, 就是在程序最最开始的时候(见下面StaticDemo的例子)。所有的对象共享了类变量。可以通过对象或者通过类本身来访问类变量。Static fieldsA field define as static, means there is only one such field shared by all objectsInstance fieldsA field define without static, means each object has its own copy of fields顺便提一句:通常用下面的形式,定义类的常量。(类或实例都可以访问)static final double PI=3.14159;静态方法(方法前冠以static)和实例方法(前面未冠以static)的区别调用静态方法或说类方法时,可以使用类名做前缀,也可以使用某一个具体的对象名;通常使用类名。非static的方法是属于某个对象的方法,而static的方法是属于整个类的,不被任何一个对象单独拥有;由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,也即,static方法只能处理static域或静态方法。实例方法可以访问实例域, 静态域或静态方法, 记住都行。声明为static的方法有以下几条限制: 1.它们仅能调用其他的static方法。2.它们只能访问static数据。3.它们不能以任何方式引用this或super(关键 字super与继承有关,在下一章中描述)。 static method Have No this ReferenceAll instance methods have a hidden parameter—thisSo,Static method can’t access instanc it can only invoke other static class members.It can access class members only. instance can use static method.Instance methods:If a method is declared without the static modifier keyword, that method is known as an instance method. Instance methods are associated with objects – not classes.It can access either instance or class members. 本章源码class StaticExa {static int a = 4;static int b = 9;static void call() {System.out.println("a = " + a);//静态方法可以访问静态属性}}public class Test {static int c = 43;public static void main(String args[]) {/*刚运行到这一步时,debug观察,StaticExa.a的值就等于42,Test.c的值就等于43,说明系统在我们的程序一开始时,就会给所有的类变量赋值。如果是对象参考, 就是null,见photoshop的例子*/ System.out.println("开始观察StaticExa.a和Test.c");。。。。。。。。。。。。。。。。。。。详情请见:
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 java声明静态变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信