public class Test4{
static Test4 t=new Test4();//为什么加上static就能正确运行 如果把static去掉运行会报错 这是为什么啊?
public Test4(){
}
public static void main(String []args){
Test4 t1=new Test4();
}
}我加了注释的那一句谁能给我解释解释啊?
static Test4 t=new Test4();//为什么加上static就能正确运行 如果把static去掉运行会报错 这是为什么啊?
public Test4(){
}
public static void main(String []args){
Test4 t1=new Test4();
}
}我加了注释的那一句谁能给我解释解释啊?
解决方案 »
- java文件读写,莫名其妙啊!撞鬼了??
- 如何求两个时间的差值
- 有那位大侠有together6 的中文教程,紧急求救,百分相送
- 哪里可以下Jbuilder9.0
- 怎样解决在applet画图中放大的问题?
- 在JAVA应用程序中如何实现FTP的功能
- 请问各位大侠那里能下到jdbcdriver for access?
- Stream一问
- 请教:有关JCreatorPro2.5的问题,用过的都请进来看一下吧~~~
- java中如何利用http断点续传的原理下载http://www.9sky.com/上的mp3,现在那只能用netant才能正确下载。这是为什么呢?请高手指点。
- 求解~~
- java中用ObjectOutputStream 写入多个相同类型对象
1.静态对象指的是不依赖对象的创建而创建的对象或方法或属性
2.被定义为static 的方法或属性或内部类对象,会在所在类被加载时就被创建
这个实例化动作又需要初始化成员变量 t;
然后又触发新的实例化动作;
接着这个实例化动作又需要初始化成员变量 t;
......
显然就是个死循环嘛
2、静态的属性和方法只在程序启动的时候加载一次、加载后只产生一份、可以被共享。非静态属性是生成一个对象就在内存中给这个对象拷贝一份这些属性、这些属性对于每个对象都是独立的。你这个程序不加static的时候你一运行这个程序首先MAIN方法中要产生一个Test4的对象、由于类里面也有一个生成的Test4对象属性、同时他继续产生这样一个对象、这个对象属性又会被拷贝一份并再次产生一个这样的对象、一直循环下去、形成死循环、一直到产生很多这样的对象的时候导致内存溢出。
如果加上static、首先这个属性只属于类、不依赖于对象存在、你不管产生多少这样的对象、这个属性都只有一份、所以不会有上面的问题出现。
当你生成一个这个类的对象的时候这个属性将在内存中产生一份拷贝、供这个对象调用、关键你的这个属性还是这个类本身的属性、他有生成一个这个对象、这样一直循环下去就产生了过多的对象、而垃圾回收机制无法即时回收、所以当内存中对象过多、就会内存溢出。
只要被定义为static的属性、在你生成第一个对象的时候就执行了一次、以后再也不执行了、所以不会形成循环(static修饰的东西在程序一执行就加载、而且只加载一次)。
简单的说、static是属于类的、类只有一个、所以只有一个、而非static属性属于对象、所以产生一个对象这些属性就要被拷贝一份、当这个属性为对象本身的话、他就会一直生成。
你难道没发现,访问类静态成员直接可以写: 类名.成员名
根本就不需要先:new 类名() 来创建实例么?