篮球套利;js创建静态变量量会不会被创建?

静态变量 静态函数 继承问题_突袭网-提供留学,移民,理财,培训,美容,整形,高考,外汇,印刷,健康,建材等信息
静态变量 静态函数 继承问题
来源:互联网 时间: 23:38:56
&&为了解决用户可能碰到关于"静态变量 静态函数 继承问题"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"静态变量 静态函数 继承问题"相关的详细问题如下:
public&class&Test&{
public&static&int&a&=&getA();
System.out.println("1");
public&Test()&{
System.out.println("2");
public&static&int&getA()&{
System.out.println("3");
public&class&Test2&extends&Test&{
static&int&b&=&getB();
System.out.println("4");
public&void&Test()&{
System.out.println("5");
public&static&int&getB()&{
System.out.println("6");
public&class&Test3&{
public&static&void&main(String[]&args)&{
Test2&test&=&new&Test2();
执行结果是
===突袭网收集的解决方案如下===用户提供的回答1:
①Test3中main方法new&Test2类,调用Test2的构造器
②调用构造器之前,类加载器要从硬盘中把Test2类加载到内存中
③因为Test2是Test的子类,所以也要把Test类加载进来,并且顺序是Test类-&Test2类
④Test类加载之后,首先处理Test类的静态成员。此例中表现为静态成员赋值,并且会调用静态方法getA();(此时输出第一个数3)以及执行静态代码块(第二个数1)。如果是静态代码块前,属性在后,那就先执行静态代码块,再是属性a赋值。
⑤之后是Test2类,同理。(第三个数6,第四个数4)
⑥Test2类以及Test类加载完毕后,开始执行Test2的构造器,进入Test2构造器后,先调用父类Test类的构造器Test();(输出2)
⑦Test2构造器是默认构造器,调用父类构造器之后调用完毕。程序结束。
我的理解是这样的,楼主。
用户提供的回答2:
静态变量 静态函数 继承问题(图1)
我把你的代码在itbegin平台上运行了。
为什么是这个结果:
有几个原则:
1.当创建对象之前,需要加载类文件,在加载的过程中,如遇到static的代码(变量、代码块)都会被初始化。而且只初始化一次且只有一次。
1.当创建对象时,一定是先创建父类再创建子类。也就是先调用父类的构造方法再调用子类的构造方法。
你可能还关注
淘宝折扣专区博客分类:
静态static
静态出现最大的原因:节约内存,只存一份,由对象共享这个属性。
静态的作用是什么?
当每个对象都有一个相同的属性,如country="China",那么每个对象所在的堆内存中都会为其分配空间来保存这个属性值country="Chian"。
既然每个对象的country属性值都是一样的,能否只用一个存储空间就行了呢?这样节约堆内存空间。
答案是可以的。
通过static修饰的属性,其值将被所有对象共享使用。
注意:对象特有的属性不能定义为静态的,因为静态即共享。如Person类的name不能是静态的。
如,饮水机是共享的,大家都共同使用同一个饮水机,则静态;
如,杯子是特有的,每个人都有属于自己的水杯,则非静态。
静态的特征:
静态static修饰的成员,优先于对象存在;
静态static修饰的成员,随着类的加载而进入内存;
静态static修饰的成员,是共享的,而对象中存储的则是特有的;
静态static修饰的成员,不仅可以被对象所使用,还能被类直接使用;
静态的优点:
实现共享数据在内存中的唯一存储,节约了内存空间;
每个对象都不用在堆内存中为其单独开辟空间保存,直接使用共享的数据即可。
静态的缺点:
常驻内存,内存释放周期长,只随着类的消失而消失。
类什么时候消失?
类其实也是对象,JVM启动时就会加载类路径目录下的类,当内存中加载的类太多太多,JVM的GC会根据某种算法对加载的某些类进行清理,释放空间。
当JVM关闭时,类消失。
类变量与成员变量的区别
类变量不是类的成员变量
存储位置不一样
成员变量,在堆内存中,每个对象都有自己的一份不同的成员变量存储区
静态变量,在方法区中,只有唯一的一份,是类变量,每个对象都共享使用这个变量
生命周期不一样
成员变量,随着对象的创建而存在,随着对象的回收而释放
静态变量,随着类的加载而存在,随着类的消失而释放
调用方式不同
成员变量,只能由对象调用
静态变量,一般直接使用类名进行调用
成员变量---&实例变量,对象的特有属性
静态变量---&类变量,该类中的对象都具有相同的一个属性
静态修饰属性
静态变量也称为类变量;
静态变量存储在方法区的静态区内存中;
当每个对象的某个属性的值都相同,则可以考虑使用静态来修饰该属性。
public static String county = "CN";
存放方法/函数的地方。
方法区又分为了几个部分:静态数据区,常量区,代码区(存放方法代码的区域)等。
需要说明一点:
类中的代码到底是如何存放的。
类中可以定义的内容:成员变量,类变量,构造方法,一般方法,静态方法。
成员变量是对象特有的数据,存在于对内存中
构造方法、一般方法,将存放到方法区的非静态区中
类变量、静态方法,将存放到方法区的静态区中
=========================================================================
静态修饰方法
静态修饰的方法具有局限性,只能使用静态变量或调用静态方法。
工具方法,工具类,不需要创建对象
方法中只要没有操作对象特有的数据,就可以定义为静态方法;
1.创建对象来调用静态方法,浪费时间、空间,无意义
---私有构造方法,可以防止外部通过对象来调用静态工具方法(单例模式);
2.静态方法中不能处理对象的特有数据,因为静态方法中无法引用对象(静态先于对象存在);
由于静态方法先于对象加载到内存,导致:
静态方法中只能使用静态成员(静态属性,静态方法);
静态方法中不能使用this/super关键字;
=============================================================================
静态什么时候用?
1.静态变量/类变量(从节约堆内存上考虑)
对象中的成员变量的值都是相同的,而且都只需要使用该值,而不做修改,则定义为静态的!
如果其中哪怕只有一个对象将有可能修改这个值,都必须将其定义为成员变量,放到堆内存中存储,此时决定不能将其定义为静态的。
每个对象都不必在堆内存中为同一份数据分配空间,只需要在方法区存放一份数据即可!
前提:对象只读该数据,不修改该数据,因为大家共享这个数据。
2.静态方法(从执行代码上考虑,从方法的调用上考虑)
方法能否被定义为静态,就看一点:
方法中是否使用到了对象的特有数据或者调用到了普通方法,如果没有,则定义为静态方法!
1.不需要创建对象,因为创建对象耗费时间空间,而且静态方法的执行中没有使用到对象的数据。
(创建对象需要在堆内存开辟空间,调用构造方法进行初始化等操作)
2.调用简单,直接通过类名即可调用方法。
注意:不管是静态方法还是非静态方法,都只是一段代码,在方法区中都只存一份,只是存放的区域不同而已!不存在节约内存的说法。
=========================================================================
扩展:主函数main为什么设计成static的
首先,主函数的功能:程序的入口,由JVM调用
主函数专注于: * 在函数体中创建其它类的对象,指挥这些对象调用它们各自的方法来完成某种功能! * 代码按功能封装到函数中 * 函数都封装到类中 * 主函数只做一件事:创建那些封装好的类的对象,再调用类的方法!
public class StaticTest {
* 对象的特有属性,每个对象的id都不同
* 讨论主函数为什么是静态static的
* 1.主函数是程序的入口。
* 2.主函数中调用其它函数的2种方式:
a.静态方法,由类名调用;
b.非静态方法,由对象调用
* a.静态方法,被主函数调用,由于静态方法中只能使用类变量,使得静态方法的功能具有局限性(对象的特有属性无法在静态方法中使用,因为对象还未创建),不能满足大多数的功能需求;
* 这样就只留另一条路,调用非静态方法
* b.非静态方法的调用,必须由对象来操作,所以,主函数中必须先创建对象,再通过对象来调用,使得大多数功能的调用都以对象为起点进行
* Java面向对象,以对象为核心,将主函数设计为静态的,强制开发人员通过对象来调用方法!
* @param args
public static void main(String[] args) {
//say(); //静态方法中不能调用非静态方法
//只能通过对象来调用
StaticTest test = new StaticTest();
test.say();
//把say()也变为静态的,也能直接调用啊!其后果是,say()要能执行,那么id也必须静态,静态即共享---&id是对象的特有属性,不同对象有不同的id
//所以,主函数中调用方法,遵从Java的规范,用对象来调用方法!!!
public void say() {
System.out.println(this.id);
相关知识库:
浏览: 225284 次
logback配置文件的改动会导致应用重新加载,多改动几次后就 ...
不是可以在log4j中配置以控制台或者文件方式保存日志的?
很棒,正缺这个,非常感谢
[size=x-small][/size]
有,和YAML的格式有关,不知道有没有什么好的YAML格式的验 ...&静态变量和实例变量的区别?&&& 在语法定义上的区别:静态变量前要加static关键字,而实例变量前不加。
&&& 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码文件,不用创建任何实例象,静态变量就会被分 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 配空间,静态变量就可以被使用了。
&& 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
是否可以从一个static方法内部发出对非static方法的调用?
&&& 不可以。因为非static方法要与对象关联在一起,必须创建一个对象后,才可以在该对象上进行方法的调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,一个static方法被调用时,可能还没有创建任何实例对象,所以,一个static方法内部不可以发出对非static方法的调用。
Integer与int的区别?
&&& int是java提供的8种基本数据类型之一。Java为每个原始类型提供了封装类,Integer是Java为int提供的包装类。int的默认值是0,而Integer的默认值是null,即Integer可以区分出来未赋值和值为0的区别,int则无法表达出来未赋值的情况,例如想要表达出没有参加考试和考试成绩为0的区别,则只能用Integer。
&&&& 详见/dazuihou/p/3567821.html
Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
&&& Math类中提供了三种与取整有关的方法:ceil、floor、round。这些方法的作用与他们的英文名称的含义相对应,ceil的英文意思是装天花板,该方法就表示向上取整。floor的英文意思是地板,该方法就表示向下取整。至于round方法,他表示&四舍五入&,算法为Math.floor(x+0.5f),即将原来的数字加上0.5,之后再向下取整。所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
下面代码有什么不妥之处?
1.if(username.equals("zxx")){}
2.int x=1; return x==1?true:
&&& 答:1.应该先判断username是否是null;如果是null,则会出现空指针异常。
&&&&&&&&&&& 改为:if("zxx".equals(username)){}
&&&&&&&&& 2.x==1本身就返回boolean型,再用三元操作符判断true和false多此一举。
&&&&&&&&&&& 改为:return x==1;
请说出作用域public,private,protected以及不写时的区别
defualt(friendly)
&&& public:接口访问权限
protected:继承访问权限
default:包访问权限
private:你无法访问(除了包含该成员的类以外,其他任何类都无法访问这个成员)
阅读(...) 评论()第五讲 静态套利定价理论(APT)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第五讲 静态套利定价理论(APT)
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢今天在网上看到一个讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收。
下面就对Java中的垃圾回收和静态类型做一些总结:
一、Java中的内存分配
1、stack(栈),用于装变量和引用类型。如基本类型和引用类型的引用变量。
2、heap(堆) ,用于装new出来的值。
3、用来装静态变量的区域。如static变量,字符串常量。
4、用来装代码的区域。
二、垃圾回收时机
1、栈上的变量一旦声明,出作用域即会被回收。
2、堆里的对象,没有任何变量(栈上变量或静态区域的变量)指向这个对象的时候就会被回收,这个对象被标记为“垃圾对象”等待回收GC
3、GC是只回收堆空间,检查定时回收(频率由GLR决定)。
4、调用GC.Collect();“直接”回收对象(必须等GC处理完目前的任务,才来处理该任务)。
三、静态成员的垃圾回收
静态成员一般也可以分为静态基本类型和静态引用类型。
静态基本类型存储在在静态变量区域;静态引用类型的引用存储在静态变量区域,而实例(具体内容)存储在堆上。静态成员只存在一份,静态成员加载时机:类加载的时候(第一次访问),这个类中所有静态成员就会被加载在静态存储区,同时存储在。(注:如果是引用类型,如static student myst=new student(),myst=null这时候,在静态存储区里面存的是一个地址(myst),这个地址指向在堆里面创建的student实例对象,当myst=null的时候,在静态存储区里面的变量会一直存在,但是在堆里面的student实例对象因为没有变量指向它,所以会被回收)。因此如果不用的静态引用类型可以通过设置=null方式让GC可以回收其堆上的空间。
四、单例模式中静态成员不会被垃圾回收机制回收
单例模式中静态成员的声明由于静态的机制不会被GC回收,而对应的堆上实例对象在外部无法直接设为null,所以不会被垃圾回收机制回收。当然除非人为地断开单例中静态引用到单例对象的联接,否则jvm垃圾收集器是不会回收单例对象的。
本文已收录于以下专栏:
相关文章推荐
1)静态变量本身不会被回收 2)静态变量所引用的对象是可以回收的。 第一点大家应该没有疑问,下面我证明第2点: 看下面的例子及注释。自己可以运行试一下, 注意加上-verbose:gc参数 java ...
我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,...
先说下程序上线中碰到的一个问题:
我们开发的程序之前是一个服务启动一个JVM
现在是把不同的服务部署到了一个JVM里,不同的服务是会用到一个单例模式产生的读取redis数据库的类,
那么问题来了...
一。垃圾回收机制的意义
java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题,它使得Java程序员在编写程序的时候不再需要考虑内存管理
由于有个垃圾回收...
什么是常量池
常量池干嘛
常量池中到底是否能改变值 等等
Java中的引用类型和垃圾回收
垃圾回收就想垃圾车,每次天亮就会沿着街区开一圈,把垃圾都带走。
有的区域不需要这种垃圾车,也许它们不造垃圾吧,作为一个中级图钉我对这种地区很无奈,但是它们就是很少有垃圾甚至没有垃圾。首先应该是程序计数...
结构体。 (int32 类型就是结构体)
1.结构体可以定义属性,也可以定义字段
2.结构体不能调用无参数的构造函数
3.在调用构造函数的时候,必须给结构体的所有字段赋值
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 静态变量 的文章

更多推荐

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

点击添加站长微信