首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从JVM内存管理的角度谈谈静态方法静态属性 和 java对象引用与JVM自动内存管理

先分析一下静态方法静态方法的区别: 静态方法有一个和静态方法很重大的不同:静态方法有一个隐含的传入参数,该参数是JVM给它的,和我们怎么写代码无关,这个隐含的参数就是对象实例在stack中的地址指针...因此静态方法(在stack中的指令代码)总是可以找到自己的专用数据(在heap 中的对象属性值)。...当然静态方法也必须获得该隐含参数,因此静态方法在调用前,必须先new一个对象实例,获得stack中的地址指针,否则JVM将无法将隐含参数传给静态方法。...而静态方法无此隐含参数,因此也不需要new对象,只要class文件被ClassLoader load进入JVM的stack,该静态方法即可被调用。当然此时静态方法是存取不到heap 中的对象属性的。...一个Java应用程序由一系列线程组成,每个线程执行一系列方法,而每个方法通过参数局部变量来引用对象。这些引用属于引用集合中的一部分,直接进入应用程序。

85931

C# .NET面试系列二:面向对象

封装提供了对对象的抽象,使得对象可以被看作是一个独立的实体,而不需要了解其内部实现。继承(Inheritance):继承是一种机制,允许一个类(子类派生类)继承另一个类(父类基类)的属性方法。...子类的静态字段初始化:执行子类的静态字段初始化。静态字段按照声明的顺序初始化。方法调用:最后,可以调用类中的方法方法是在实例被创建后才能被调用。...静态变量属于类的实例,每个实例都有独立的副本,需要通过实例访问。静态成员包括静态字段静态方法等,属于类而不是实例,可通过类名直接访问。...静态成员包括静态字段静态方法等,属于类的实例,需要通过实例访问。理解静态变量和静态成员的重要性在于它们提供了在类级别上共享数据和行为的机制,而不必依赖于类的实例。14. 属性能在接口中声明吗?...需要通过实例访问静态变量将其声明为静态。18. 在 .Net 中所有可序列化的类都被标记为_?

14410
您找到你想要的搜索结果了吗?
是的
没有找到

C#关键字常见面试题

扩展修改继承的方法属性、索引器事件的抽象虚拟实现需要 override 修饰符。 static作用?...在类、接口和结构中,可以将 static 修饰符添加到字段方法属性、运算符、事件和构造函数。static 修饰符不能用于索引器终结器。 静态类与静态类的区别?...成员主要指的是:字段方法属性、运算符、事件和构造函数等。 静态成员用static修饰符,静态成员不需要静态成员属于类所有,静态成员属于类的实例化对象所有。...静态方法的使用场合 静态方法最适合工具类中方法的定义。 静态变量适合全局变量的定义。 静态方法静态方法区别(优/缺点)? 优点 属于类级别的,不需要创建对象就可以直接使用。...(静态方法可以任意的调用静态方法/变量) 不可以使用 this 引用 static 方法属性访问器。 sealed 关键字有什么作用?

14610

JAVA- 面向对象编程(上)

来访问对象中的属性方法 同一个类可以创建多个实例 字段/属性/成员变量 在类中,但是方法外部定义的变量.这样的变量我们称为“字段属性“成员变量"三种称呼都可以一般不会严格区分)....,操作就会引发异常 控制台运行结果: 初始化后: 利用对象.变量名进行变量数据的修改 对于static来说,要访问静态成员方法可以利用:类名.方法静态方法内部不能够访问静态的数据成员...3.静态方法可以访问静态数据成员,并可以更改静态数据成员的值 总结: 静态有限制,静态没有限制 静态方法不能直接使用静态数据成员调用静态方法(静态数据成员和方法...,以及方法属性 ,然后我们可以通过关键字new创建对象 Java的变量包括(1.实例成员量,2.静态成员变量-有static修饰) , 方法包括(1.静态成员方法,...2.实例成员方法), 对于静态变量和方法可以通过类名去访问,而实例则需要创建对象,然后通过对象访问

10510

C#面试题

7、接口不能包含字段和已实现的方法,接口只包含方法属性、索引器、事件的签名;抽象类可以定义字段属性、包含有实现的方法。 5. 重载与覆盖的区别?...4、const默认是静态的;而readonly如果设置成静态需要显示声明 。 5、支持的类型时不同,const只能修饰基元类型值为null的其他引用类型;readonly可以是任何类型。...静态成员和静态成员的区别? 静态变量使用 static 修饰符进行声明,静态成员在加类的时候就被加载(上一篇中提到过,静态字段是随类型对象存放在Load Heap上的),通过类进行访问。...静态函数的实现里不能使用静态成员,如静态变量、静态函数等。 4. 特性是什么?如何使用? 特性与属性是完全不相同的两个概念,只是在名称上比较相近。...比如: 不正确的使用静态字段,导致大量数据无法被GC释放; 没有正确执行Dispose(),托管资源没有得到释放; 不正确的使用终结器Finalize(),导致无法正常释放资源; 其他不正确的引用,导致大量托管对象无法被

75120

.NET面试题解析(05)-常量、字段属性、特性与委托

字段属性有什么异同? 4. 静态成员和静态成员的区别? 5. 自动属性有什么风险? 6. 特性是什么?如何使用? 7. 下面的代码输出什么结果?为什么?...C#中的委托都继承自System.Delegate类型; 委托类型的声明与方法签名类似,有返回值和参数; 委托是一种可以封装命名(匿名)方法引用类型,把方法当做指针传递,但委托是面向对象、类型安全的...不带有static 修饰符声明的变量称做静态变量,在对象被实例化时创建,通过对象进行访问 。 一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一静态变量可以是不同的值 。...静态函数的实现里不能使用静态成员,如静态变量、静态函数等。 5. 自动属性有什么风险? 因为自动属性的私有字段是由编译器命名的,后期不宜随意修改,比如在序列化中会导致字段值丢失。 6....C#中的委托都继承自System.Delegate类型; 委托类型的声明与方法签名类似,有返回值和参数; 委托是一种可以封装命名(匿名)方法引用类型,把方法当做指针传递,但委托是面向对象、类型安全的

99920

HotSpot类模型之InstanceKlass「建议收藏」

对象 _inner_classes 用一个jushort数组保存当前类的InnerClasses属性和EnclosingMethod属性 _nonstatic_field_size 静态字段需要占用的内存大小...正常情况下,HotSpot使用Klass来表示Java类,用oop来表示Java对象,而Java对象中可能定义静态静态字段静态字段值存储在oop中,而静态字段值存储在表示当前Java类的java.lang.Class...,那么这些值同样存储在了Class对象中,也就是表示Class对象的oop中,这样静态静态字段存储在了一个oop上,通过_offset_of_static_fields属性偏移来定位静态字段的存储位置...在完成静态字段布局后,紧接着会布局静态字段,此时的_offset_of_static_fields字段的值为96。   我们需要分清相关类的表示方法,如下图所示。...Klass的属性_java_mirror就指向保存该类静态字段的Oop对象,可通过该属性访问类的静态字段。 Oop是HotSpot的对象表示模型,在后面会详细介绍。

89230

.NET面试题解析(05)-常量、字段属性、特性与委托

字段属性有什么异同? 4. 静态成员和静态成员的区别? 5. 自动属性有什么风险? 6. 特性是什么?如何使用? 7. 下面的代码输出什么结果?为什么?...C#中的委托都继承自System.Delegate类型; 委托类型的声明与方法签名类似,有返回值和参数; 委托是一种可以封装命名(匿名)方法引用类型,把方法当做指针传递,但委托是面向对象、类型安全的...4、const默认是静态的;而readonly如果设置成静态需要显示声明 。  5、支持的类型时不同,const只能修饰基元类型值为null的其他引用类型;readonly可以是任何类型。 2....静态函数的实现里不能使用静态成员,如静态变量、静态函数等。 5. 自动属性有什么风险? 因为自动属性的私有字段是由编译器命名的,后期不宜随意修改,比如在序列化中会导致字段值丢失。 6....C#中的委托都继承自System.Delegate类型; 委托类型的声明与方法签名类似,有返回值和参数; 委托是一种可以封装命名(匿名)方法引用类型,把方法当做指针传递,但委托是面向对象、类型安全的

81610

C#基础知识系列六(静态类和静态类成员)

静态类不能包含实例构造函数,但可以包含静态构造函数。 如果静态类包含需要进行重要的初始化的静态成员,也应定义静态构造函数。 静态类成员   静态类可以包含静态方法字段属性事件。 ...静态方法属性不能访问其包含类型中的静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。   更常见的做法是声明具有一些静态成员的静态类,而不是将整个类声明为静态类。 ...因此,可以同对待静态字段一样使用 ClassName.MemberName表示法来访问 const 字段。 不需要对象实例。   C# 不支持静态局部变量(在方法范围内声明的变量)。...对静态方法的调用以 Microsoft 中间语言 (MSIL) 生成调用指令,而对实例方法的调用生成 callvirt 指令,该指令还检查 null 对象引用。 ...4:当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象需要继承等特性时,应该使用静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。

80620

C# 学习笔记(3)—— 类和结构体

什么是类 类代表一组具有公共属性和行为的对象。...} 我们可以通过修饰符来控制访问权限,如下所示 修饰符 访问权限 private 只有同一个类中可以访问 public 同一程序集引用该程序集的其他程序集都可以访问 protected 只有同一个类派生类中可以访问...;但若使用 const 修饰字段,如果没有在定义字段时初始化,就会产生编译错误 如前所述,你也可以使用 static 关键字来声明静态字段,区别就是静态字段必须通过类来访问 属性 属性是对字段的扩展。...静态构造函数用于初始化类中的静态成员,在创建第一个实例引用任何静态成员之前,CLR 都将自动调用静态构造函数 public class Person { private static string...但若创建了托管资源的对象,在应用程序使用完这些托管资源之后,垃圾回收期将运行对象的析构函数来释放这些资源 public class Person { ~Person()

22010

《JAVA SE》类与对象的注意事项

声明一个类就是创建一个新的数据类型,而类在 Java中属于引用类型, Java 使用关键字 class 来声明类。 ---- 一、字段/属性/成员变量 在类中, 但是方法外部定义的变量....这样的变量我们称为 “字段属性 “成员变量”(三种称呼都可以, 一般不会严格区分). 1.1 注意事项 1.使用 . 访问对象字段. 2....(4)类的null引用也可以通过类名访问static属性。 3.2 静态方法 如果在任何方法上应用 static 关键字,此方法称为静态方法静态方法属于类,而不属于类的对象。...因此这导致了两个情况: (1)静态方法不能直接使用静态数据成员调用静态方法(静态数据成员和方法都是和实例相关的). (2)this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用...其中被static所修饰的数据属性称为类属性, static修饰的方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法

23320

笔记(一 )——Java零碎知识摘录

是定义在引用变量上,T是类上方法上;如果有泛型方法泛型方法,都满足条件,会执行泛型方法。 带不同泛型的ArrayList在编译后生成的Class是相同的!...(java虚拟机类加载机制) 类的初始化的执行顺序 》没有父类的情况: 类的静态属性 类的静态代码块 类的静态属性 类的静态代码块 构造方法 》有父类的情况: 父类的静态属性 父类的静态代码块...子类的静态属性 子类的静态代码块 父类的静态属性 父类的静态代码块 父类构造方法 子类静态属性 子类静态代码块 子类构造方法 部分特殊不引起类初始化,先记录下吧。...通过子类引用父类的静态字段,不会导致子类初始化,对于静态字段,只有直接定义这个字段的类才会被初始化 通过数组定义来引用类,不会触发此类的初始化 常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类...因为static方法要与对象关联在一起,必须创建一个对象后,才可以在该对象上进行方法的调用,而static方法调用时不需要创建对象,可以直接调用。

53020

C#基础02

= == 六个 用来判断两个事物之间的比较关系 返回的值均为布尔型 布尔类型 自包含有真假两个值,false true(默认值是flase) 特别地注意:对于成员变量可以不赋初值,而方法内变量则必须需要赋初值...逻辑运算符 && (与关系)|| (关系)!(取反) 基本格式: 表达式1 逻辑运算符 表达式2(一般连接的是关系表达式,需要返回bool型的数值) 同样,逻辑表达式返回的值仍然是bool型数值。...知识点: .net 静态字段方法属性 要求对象引用 说明该类的中方法没有static 不是静态的.有静态字段方法属性,要求该类必须实例化。...1.实例化类为对象:classT sl=new classT(); 2.静态方法属性可以通过对象属性引用: sl.ff(); 静态方法中不能访问静态成员 在static 静态方法函数中引用静态方法导致...静态方法函数中只能引用静态的函数方法 解决方法:找到在静态函数方法引用静态方法 改成静态的 或者实例化后引用

12800

Java的类和对象

这样的变量我们称为 “字段属性 “成员变量”(三种称呼都可以, 一般不会严格区分)....就可以调用 System.out.println(TestDemo.count); } } 输出结果 100 注意事项 静态方法和实例无关, 而是和类相关 静态方法不能直接使用静态数据成员调用静态方法...(静态数据成员和方法都是和实例相关的). this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关)....注意事项 private 不光能修饰字段, 也能修饰方法 通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定....类中定义的属性,大概分为几类:类属性对象属性。其中被static所修饰的数据属性称为类属性, static修饰的方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法

5600

.NET面试题系列 - C# 基础知识(1)

Finalize:在GC决定回收这个对象之后,会调用这个方法。如果要做一些额外的例如回收对象托管属性对象,应当重写这个方法。只有在存在托管对象时才需要这么做。在垃圾回收中会详细介绍。...另外需要关注的是,静态字段在类型对象中,而类型对象是唯一的,所以所有该类型的实例都指向一个类型对象,意味着一个实例更改了静态字段的值,所有其他实例都会受影响。 ? 第四句调用了静态方法lookup。...GetType方法会返回对象指向的类型对象(包括静态成员和方法表)。 加载堆不受GC控制,所以静态字段属性也不受GC控制。...在创建第一个实例引用任何静态成员之前,将自动调用静态构造函数来初始化类(的类型对象)。这个静态构造函数只会执行一次。 无法直接调用静态构造函数。它的访问修饰符是private(不需要写明)。...这是因为静态构造函数只负责初始化静态成员,只负责维护类型对象,它和类型的实例对象没有关系,所以你加入任何参数(你试图为静态字段属性赋值?这是不可能的,因为根本就没有实例)都是没有意义的。

1.8K20

c# readonly

注意:对于引用类型,readonly修饰符仅防止修改字段本身的值,而不是防止修改字段引用对象。换句话说,你不能更改引用字段的指向,但是可以更改该字段指向的对象属性方法。...如果readonly字段是实例字段静态),那么它的内存将会在堆上分配,作为创建对象实例时分配的一部分。每个对象实例都有自己的readonly实例字段副本。...对于静态 readonly 字段,它们在实例构造函数中初始化。...但是,对于可变的引用类型(如列表、字典自定义类),虽然你无法改变readonly字段本身引用对象,但你仍然可以修改该对象的内部状态。例如,你可以向一个readonly的列表中添加项目。...在处理可变的引用类型时,还需要采取额外的同步措施以确保线程安全。 readonly修饰的对象传递的是引用还是实例 无论字段是否被 readonly 修饰,对象的传递方式(引用值)都取决于其类型。

17250

探秘static——类不需实例化就能用?

static英文意思为“静止的,静态的”,在OOP中可以作为修饰符,类、字段属性方法等被static修饰后,变为静态类、静态字段静态属性静态方法……        static修饰的类成为静态类...,静态类中只能包含静态成员(被static修饰的字段属性方法),不能被实例化,不能被继承;静态中可以包含静态成员。        ...2、被调用时不需要实例化的情况:        被调用成员为静态成员(此时它所属的类为静态静态类)。...当含有静态成员的静态类实例化出对象后,这些对象公用这些静态成员,通过类名对象名都能访问它们。         在网上看到两个有趣的小例子:         人是一个静态类。...所以,方法内部的静态变量,执行完静态变量值不消失,再次执行此对象方法时,值仍存在,它不是在堆和栈中分配的,是在静态配的, 这是与局部变量最大的区别。

1.1K40

C# static

访问速度:通常来说,访问位于高频段的静态字段比访问常规托管堆的对象更快。这主要是因为这些字段在物理内存中的位置固定不变,所以可以直接访问。...引用类型的处理:对于引用类型的静态字段,其引用(即地址)保存在高频段,但其实际指向的对象数据仍然存储在托管堆的其他部分。...static修饰的含义 static 关键字可以用于修饰类的成员(变量、方法属性)和类本身。...静态方法只能访问静态变量其他静态方法,它们不能访问类的静态成员。 静态属性 (static properties): 静态属性用于获取设置静态数据成员的值。它们的工作方式类似于静态方法。...这样,每当相关对象实例不再被引用时,垃圾收集器就能释放与该实例关联的内存。 使用 WeakReference:对于大型对象数据结构,可以考虑使用 WeakReference。

19020

【 JavaSE 】 类和对象

就可以调用 System.out.println(TestDemo.count); } } 输出结果:100 注意: 静态方法和实例无关, 而是和类相关 静态方法不能直接使用静态数据成员调用静态方法...(静态数据成员和方法都是和实例相关的) this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关) 实际中方法具体要不要带..., 也能修饰方法 通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定 getter和setter方法 定义: 使用 private 来修饰字段就无法直接使用这个字段了...: 使用 this() 调用构造函数,必须放在第一行 不能在静态方法中使用(静态方法不依赖对象,this使用需要对象) 认识代码块 ---- 字段的初始化方式有: 就地初始化 使用构造方法初始化 使用代码块初始化...其中被static所修饰的数据属性称为类属性, static修饰的方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法 静态代码块优先实例代码块执行,实例代码块优先构造函数执行

44420

Java小白成长记 · 第 2 篇《HelloWorld》

下面讨论一下 static(静态) 修饰符的含义: 当我们说某个事物是静态时,就意味着该字段方法不依赖于任何特定的对象实例 。 即使我们从未创建过该类的对象,也可以调用其静态方法访问其静态字段。...相反,对于普通的静态字段方法,我们必须要先创建一个对象并使用该对象来访问字段方法,因为静态字段方法必须与特定对象关联。...我们可以在类的字段方法前添加 static 关键字来表示这是一个静态字段静态方法。...使用类名直接引用静态变量是首选方法,因为它强调了变量的静态属性。 类似的逻辑也适用于静态方法。...我们可以通过对象引用静态方法,就像使用任何方法一样,也可以通过特殊的语法方式 Classname.method() 来直接调用静态字段方法

37310
领券