`
danielhjd
  • 浏览: 246239 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

静态(static) 和 非静态(non-static)

    博客分类:
  • Java
J# 
阅读更多

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的...

 

静态(static)就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。

 

非静态(non-static)就是在编译时,通过new 来实例化和初始化以对象(即通过new在系统中开辟一内存来储存),直到改对象退出程序,才释放空间,也就是说只有对象存在,那块内存就会一直存在。

 

由于两者在系统中内存的分配方式不同,所以在调用静态对象和非静态对象的方法不同。他们的生命周期也不同。

 

例如:静态(static)

 

package StaticS;

class TStatic{ 
    static int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	System.out.println(TStatic.i);//声明对象引用,并实例化 
	TStatic tt = new TStatic(); //同上 
	System.out.println(TStatic.i); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
}

 

输入:

5
5
4
4
4
4

分析:

TStatic t = new TStatic(5); 给static int i 赋值为“5”

TStatic tt = new TStatic(); 又给static int i 赋值为“4”

由于 i 是static 所以 每一次都是在同一个 内存空间上修改 所以值也会变化...

 

例如:非静态(non-static)

package StaticS;

class TStatic{ 
     int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	TStatic tt = new TStatic(); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
} 

 

输出:

5
5
4
5

 

分析:

TStatic t = new TStatic(5); 给static int i 赋值为“5”

TStatic tt = new TStatic(); 又给static int i 赋值为“4”

由于 i 不是 所以 每一次只是在 t or tt 分配的内存空间上修改i的值  所以值至于t or tt相关

分享到:
评论

相关推荐

    hoist-non-react-statics:将非React特定的静态信息从子组件复制到父组件

    提升机无React静力 将非React特定的静态信息从子组件复制到父组件。 与Object.assign相似,但使用React可以防止覆盖静态关键字。 $ npm install --save hoist-non-react-statics用法import hoistNonReactStatics ...

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所不同,它们在使用和行为上存在显著的差异。 首先,让我们来探讨一下静态内部类与非静态内部类的主要区别: 1. **引用关系**: - 静态...

    Java中静态方法和非静态方法的区别.docx

    非静态方法可以访问静态数据成员和静态方法,也可以访问另一个类或同一类的非静态成员和方法,还可以更改任何静态数据成员的值。 三、访问成员和方法 静态方法只能访问另一个类或同一个类的静态数据成员和静态方法...

    springboot无法从静态上下文中引用非静态变量的解决方法

    首先,需要理解静态方法和非静态方法的区别。静态方法可以不用创建对象就调用,因为它属于类级别的方法,而非静态方法必须有了对象的实例才能调用,因为它属于对象级别的方法。因此,想在静态方法中直接引用非静态...

    clazy:基于Clang框架的面向Qt的静态代码分析器

    KDAB生成了针对MSVC和Linux AppImage的预先构建的clazy二进制文件,您可以从获得它们。 制作说明 Linux 安装依赖 OpenSUSE风滚草: zypper install cmake git-core llvm llvm-devel llvm-clang llvm-clang-devel ...

    浅谈PHP中静态方法和非静态方法的相互调用

    在PHP编程语言中,类的方法可以被分为静态方法(static methods)和非静态方法(non-static methods)。理解这两种类型方法的差异以及它们之间如何相互调用对于编写面向对象的代码非常重要。 首先,我们来介绍静态...

    lombok-1.16.16源码和文档

      默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。 @ToString   生成toString方法,默认情况下,会输出类名、所有属性,属性会...

    C++静态成员函数与静态成员变量小结

    静态成员在C++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。静态成员存在于内存中,而非静态成员需要...

    Java static(静态变量)和私有化功能与用法分析

    非 Static 变量和方法 non-static 变量和方法是对象级别的,每个对象都有一份拷贝。non-static 方法可以调用 static 方法和变量,但是 static 方法不能调用 non-static 方法和变量。 私有化 私有化是 Java 中的...

    face-static:静止的

    【标题】"face-static:静止的" 指的可能是一个用于人脸识别或者面部静态分析的项目,"静止的"可能意味着它专注于处理静态图像中的脸部特征识别或分析。在IT领域,这类技术通常涉及计算机视觉和深度学习,尤其是人工...

    php5.3后静态绑定用法详解

    后静态绑定的工作原理,是在继承范围内引用静态调用的类,并存储了上一个"非转发调用"(non-forwarding call)的类名。"非转发调用"指的是在没有使用self::,parent::,static::及forward_static_call()的条件下直接...

    Java中的Static class详解及实例代码

    2. 非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。 3. 一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法...

    java的基础

    Java中方法可以被声明为静态(static)或非静态(non-static)。这两种类型的方法有着明显的区别: 1. **静态方法**: - 静态方法是属于类级别的,而不是实例级别的。 - 可以通过类名直接调用,而无需创建对象。 - ...

    普通成员函数、类成员函数和类静态成员函数实例(VS2010)

    普通成员函数是类的一部分,它们可以访问类的所有非静态成员,包括私有(private)、保护(protected)和公有(public)成员。这是因为每个普通成员函数都有一个隐含的参数,即指向类实例的指针`this`。通过`this`...

    java-嵌套类(inner class)-来自oracle官网

    嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...

    Python中static相关知识小结

    在Python中,`static`的概念主要用于类的静态成员变量和静态方法上。这与Java等面向对象语言中的`static`概念较为相似,但实现机制有所不同。静态成员或静态方法在Python中主要通过类名直接调用来使用。 ##### 成员...

    java中内部类的使用.doc

    - 静态内部类不能直接访问外部类的非静态成员,因为它们不持有外部类的实例引用。但是,它们可以访问外部类的静态成员。 - 示例: ```java public class OuterClass { static int outerVar = 10; static class...

    PHP类与对象后期静态绑定操作实例详解

    后期静态绑定的工作原理是,它记录了上一次“非转发调用”(non-forwarding call)的类名。当执行静态方法调用时,`static::`运算符会指向明确指定的类(通常是`::`左侧的类名)。而在非静态方法中,`static::`则...

Global site tag (gtag.js) - Google Analytics