`
yxwang0615
  • 浏览: 560887 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java 静态变量 与 非静态变量

    博客分类:
  • java
 
阅读更多

一、创建一个类的对象时(new 类名)时,该类的.class文件会被加载到一段内存中。

 

1.先将该类的.class文件会被加载到一段内存,初始化static属性和方法,为他们分配空间,以后一直在内存中,即使这个对象被销毁。(这就是不建议使用static属性和方法的原因之一)

2.copy其中非static属性和方法,为他们初始化,分配空间,然后才可以使用,因为非static的属性和方法是跟随对象的,所以当对象被回收时,属于该对象的属性和方法也被回收,再new的时候再生成。

 

 

二、执行某类的静态方法时(类名.方法名),该类不会被加载到内存中,也不会自动调用构造方法(构造 方法只在实例化的时候才调用),既然没有创建对象就不会存在对象的内存地址,得出结论类中的静态变量和静态方法的地址是单独的,和类的对象没关系。

 

public class t1 {
	public static String str0 = "str0";
	public static String str1 = "str1";
	public t1() {
		System.out.println("类被实例化");
	}
	public static void printf(){
		System.out.println("print some thing...");
	}
	/**
	 * 调用T1.str0 T1.printf() 都不会调用构造函数。
	 */

}

   类中得静态变量和静态方法在整个程序结束时按序销毁,类的静态变量属于全局,在整个应用程序都可以使用。

 

  静态方法也和静态变量一样占用内存吗?

 

  不管是静态方法还是实例方法,方法最终在运行时都只占用一份内存,因为它保存的是程序的代码,只有类的数据才会有   多份。

  方法静态动态都是个字节码,占的内存都差不多;真正占内存的是对象(主要是属性字段),特别是在静态成员上定义的   是一个集合,然后又往里面放很多东西的话。因为这样的内存不会被主动释放。

 

 

 

分享到:
评论

相关推荐

    java中静态与非静态的变量定义与使用

    总结起来,Java 中的静态变量与非静态变量之间的主要区别在于它们的生命周期、存储位置以及访问方式。静态变量是类级别的,与对象无关,而实例变量是对象级别的,每个对象都有自己的一份副本。理解这两种变量类型...

    静态变量和非静态变量的区别.xmind

    静态变量和非静态变量的区别

    静态变量与非静态变量获取配置文件application中变量值的区别.docx

    静态变量与非静态变量获取配置文件application中变量值的区别 在 SpringBoot 应用程序中,经常会遇到获取配置文件中的变量值,并将其赋值给变量的情况。在这种情况下,静态变量和非静态变量的使用会出现一些问题。...

    static静态变量使用@Value注入方式.md

    在深入了解如何使用`@Value`注解给静态变量赋值之前,我们先简要回顾一下`@Value`注解的基本用法及其与静态变量的关系。 ##### 2.1 `@Value`注解简介 `@Value`注解用于将配置文件中的值注入到特定的变量中。它可以...

    java静态变量与方法.doc

    Java中的静态变量和静态方法是面向对象编程中的关键概念,它们与实例变量和实例方法有着显著的区别。在Java中,`static`关键字用于声明类级别的成员,而不是对象级别的成员。 **一、静态成员变量与实例成员变量的...

    Java成员变量局部变量静态变量成员方法全局方法等概念的区

    实例变量与对象关联,每个对象都有自己的一份副本,而静态变量则被所有类的实例共享。成员变量可以在类的任何方法中访问,也可以在类的外部通过对象进行访问。 2. 局部变量(Local Variables): 局部变量是在方法...

    springboot 使用yml配置文件给静态变量赋值教程

    为了解决这个问题,我们可以创建带有`@Value`注解的非静态setter方法,用于在Spring容器初始化时设置静态变量的值。首先,确保`ClickHouseUtil`类有`@Component`注解,这样Spring容器会自动管理这个类并调用setter...

    java之中的静态变量与静态方法的继承与覆盖问题.doc

    ### Java之中的静态变量与静态方法的继承与覆盖问题 #### 静态变量与静态方法的基本概念 在Java编程语言中,静态变量(也称为类变量)和静态方法(也称为类方法)是由`static`关键字修饰的成员变量和成员方法。...

    java-静态变量方法块

    在Java编程语言中,静态变量、静态方法、静态代码块以及非静态变量和非静态方法是核心概念,它们对于理解和编写Java程序至关重要。下面将详细解释这些概念,并通过实例程序来阐述它们的使用和内存管理。 首先,静态...

    Java中的静态变量、静态方法与静态代码块

     可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。  静态变量有两种情况:  ● 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例可以直接使用  ● 静态变量...

    关于Java静态成员变量和静态初始化块等的初始化顺序的详细介绍

    详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序

    Java中的静态变量静态方法静态块与静态类.docx

    ### Java中的静态变量、静态方法、静态块与静态类 #### 一、静态变量 静态变量,也称为类变量,是定义在类中方法之外的,并且被`static`关键字修饰的变量。这类变量并不属于类的任何实例,而是属于类本身。这意味...

    JAVAStatic静态变量.doc

    静态方法不能访问非静态变量,因为它们不与特定的对象实例关联。它们只能访问静态变量和其他静态方法。像`Integer.parseInt()`和`Float.parseFloat()`这样的方法就是静态方法,可以直接通过类名调用,而无需创建类的...

    Java 成员变量和局部变量

    3. **静态与非静态**: 静态成员变量属于类,而非实例。这意味着所有类的实例共享同一份静态变量。非静态成员变量则是每个实例独有的。 4. **this关键字**: 在方法中,使用`this`关键字可以引用当前对象的成员变量,...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    java入门教程:数据类型_类变量(静态变量).pdf

    5. **默认值**:静态变量与实例变量(非静态变量)有相同的默认值:数值类型默认为0,布尔类型为false,引用类型为null。 6. **访问方式**:静态变量可以通过类名直接访问,无需创建类的实例。例如,`ClassName....

    Java静态和非静态成员变量初始化过程解析

    Java静态和非静态成员变量初始化过程解析 Java静态和非静态成员变量初始化过程解析是Java语言中一个非常重要的概念。了解Java静态和非静态成员变量的初始化过程对大家的学习或者工作具有一定的参考学习价值。 首先...

    JAVA静态方法和非静态方法的区别和实例.doc

    静态方法可以访问静态变量和其他静态方法,但不能访问非静态变量和方法。 例如,在以下代码中,我们定义了一个名为 `Test` 的类,其中包含一个静态方法 `test1()`: ```java public class Test { public static ...

    java入门教程:数据类型_类变量(静态变量).docx

    在Java中,类变量,又称为静态变量,是一种特殊的数据成员,它与实例变量(非静态变量)有所不同。 类变量使用`static`关键字进行声明,这意味着它们是属于类的,而不是类的任何特定实例。在类中声明静态变量时,...

Global site tag (gtag.js) - Google Analytics