java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar 就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配
内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
结果为:
1
0 (成员变量具有缺省值 而局部变量则没有)
把代码改为:
结果则为
0
1
0
java类的成员变量有俩种:
一种是被static关键字修饰的变量,叫类变量或者静态变量;
另一种没有static修饰,为实例变量。
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
静态成员变量在类装载的时候就进行了创建,在整个程序结束时按序销毁。
实例变量在类实例化对象时候创建,在对象销毁的时候销毁。局部变量在局部范围使用时创建,跳出局部范围销毁。
1.栈 - 由编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
4.另外还有一个专门放常量的地方。- 程序结束释放
由于静态成员变量在类装载的时候就进行了创建,在整个程序结束时按序销毁。
这样就可以实现类似于打开程序到关闭程序的一次会话中Session的功能,使用静态变量保存数据反复使用。
分享到:
相关推荐
在PHP编程语言中,静态变量是一种特殊的变量类型,它与普通局部变量有着显著的区别。静态变量的主要特点是在函数或类的方法内部定义,但其值在函数执行结束时不会被销毁,而是保留到下一次该函数再次被调用时。这...
【Java Servlet实现登录功能】 Java Servlet 是一种Java技术,用于扩展服务器的功能,特别是在Web应用程序中。初学者可以通过学习如何使用Servlet来实现简单的登录功能,从而更好地理解Servlet的工作原理。 首先,...
SPSS(Statistical Product and Service Solutions)是一款强大的统计分析软件,而它的Java接口则允许开发人员在Java程序中调用SPSS的功能,实现数据处理和分析的自动化。 首先,SPSS提供了Statistics Java API,这...
**示例**: 如果一个项目中需要在每个页面底部显示公司的版权信息,可以使用静态库变量来实现。这样当版权信息需要更新时,只需要修改变量的默认值即可。 **创建方法**: - 在 **Administrator Tool - Manage - ...
在Web应用程序开发中,特别是在ASP.NET C#应用中,正确且有效地在类中使用Session是非常重要的,这能帮助我们实现用户个性化体验、购物车管理、登录状态维护等功能。 ### 一、理解ASP.NET中的Session Session对象...
2. **静态变量与实例变量的区别** - **定义上的区别**:静态变量前需要添加`static`关键字,而实例变量不需要。 - **内存分配的区别**:实例变量属于特定对象的一部分,每个对象有自己的副本;静态变量属于类级别...
### 静态包含与动态包含的区别 #### 一、静态包含 静态包含在Web开发中,特别是使用Java Server Pages (JSP) 技术时非常常见。它是指在页面被编译之前就将被包含的文件内容合并到当前页面中的过程。这意味着,当...
在Java中,类的初始化顺序涉及到静态变量、非静态变量、构造函数等多个方面。例如: - 类中的静态变量和静态代码块会首先被加载和执行。 - 接着是非静态变量的初始化。 - 最后是构造函数的调用。 2. **Java内存...
33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点...
### 发送邮件——Java代码简单实例 #### 一、引言 在当今信息化时代,电子邮件是一种非常重要的通信方式。在企业应用开发中,通过程序自动发送邮件也是一项常见需求。本篇文章将详细介绍如何使用JavaMail API来实现...
2. Static 关键字用于声明静态变量和静态方法,静态变量和静态方法可以在不创建对象的情况下使用。 3. equals 方法和 == 运算符的区别是 equals 方法用于比较对象的内容,== 运算符用于比较对象的引用。 4. 抽象类是...
- 静态变量是属于类而不是对象的变量。 - **特点**:所有对象共享同一份副本。 #### Superclass (超类) - 超类是被继承的类。 - **特点**:可以被子类扩展以添加新的功能。 #### Synchronized methods (同步方法)...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
* Java 和 C++的区别,重载和重写的区别,String 和 StringBuilder、StringBuffer 的区别,静态变量、实例变量、局部变量的线程安全性等。 * B 树、二叉树、分布式锁的实现、分布式 session 存储解决方案等知识点。 ...
- **静态变量**:是一类特殊的全局系统变量,其值在服务运行期间无法动态修改。 2. **用户变量** - **分类**:用户变量包括会话用户变量(以`@@session`开头)和局部变量(在存储程序内部使用)。 - **定义与...
javaEE通过MVC模式实现注册登入案例的myeclipse工程,设计MVC设计结构,数据库操作,等等。完整的工程代码。博客:http://blog.csdn.net/fengyuwuzu0519/article/details/75174713
首先建立一个Java类MySession来模拟Web中的Session,然后使用静态变量Map来存储不同的用户信息。setAttribute函数可以将对象存储在Map容器中,getAttribute函数可以从Map容器中获取对象。 通过对Session对象的仿真...
因此,静态方法内不能直接调用非静态方法或访问非静态变量,除非通过实例化对象来调用。 这些面试习题涉及了Java的基础语法、数据结构、类型转换、接口、异常处理、内存管理等多个方面,是评估Java开发者技能的关键...
JSP(JavaServer Pages)是Java的一个核心部分,它允许开发者将静态HTML内容与动态Java代码结合起来,以创建交互式的Web应用程序。本文将围绕"Java自学==jsp实例"这一主题,通过一个简单的JSP实例来深入理解其工作...