static修饰变量的初始化

调用取静态变量的值时,如果要初始化的话,得在静态块或调用该值方法那边初始化

静态块初始化:

public class StaticDemo {
private static String str;  //定义的静态变量
  static{
    str = "静态块命名";
  }
  public static String getStr() {
    return str;
  }
}

在main方法调用

public class Test {
  public static void main(String[] args) {
    System.out.println(StaticDemo.getStr());
  }
}

结果输出:静态块命名

被调用的静态方法内初始化

public class StaticDemo {
 private static String str;  //定义的静态变量

  public static String getStr() {
    str = "静态方法临时命名";
    return str;
  }
}

在main方法调用后结果输出:静态方法临时命名

但是在构造方法里面初始化

public class StaticDemo {
  private static String str;
  public StaticDemo(){
    str = "静态块命名";
  }
  public static String getStr() {

    return str;
  }
}

在main方法调用后结果输出:null

调用静态方法取静态变量的值时,构造方法为静态变量传值初始化是失败的

时间: 2024-11-08 23:51:23

static修饰变量的初始化的相关文章

4.41 final修饰变量的初始化时机

/* final修饰变量的初始化时机 A:被final修饰的变量只能赋值一次. B:在构造方法完毕前.(非静态的常量) */ class Demo { // int num = 10; // final int num2 = 20; int num; final int num2; { // num2 = 10; } public Demo() { num = 100; // 无法为最终变量num2分配值 num2 = 200; } } class FinalTest2 { public sta

iOS Block的简单使用以及__block 和static修饰变量

简单的代码总结,不足之处多多指教. //简单的使用 -(void)blockOne{ int number=23; int(^BlockOne)(int) = ^(int num2) { return number*num2; }; NSLog(@"输出的block %d",BlockOne(2)); } -(void)blockTwo{ int(^block)(int,int) = ^(int stra,int str2) { return stra + str2; }; NSLog

C/C++之全局、static对象/变量的初始化问题

关于全局.static对象/变量的初始化问题 1. 全局变量.static变量的初始化时机:main()函数执行之前(或者说main中第一个用户语句执行之前). 2. 初始化顺序. 1)全局对象.外部static对象 a)同一编译单元(同一源文件)中,按照对象/变量的定义顺序初始化. b)不同编译单元,C++标准未保证初始化先后顺序,只保证都在main()之前初始化完成. 2)函数内部local static变量,在该函数调用过程中第一次遇到该static变量时初始化.      基于以上观点,

static, const 和 static const 变量的初始化问题

const 常量的在超出其作用域的时候会被释放,但是 static 静态变量在其作用域之外并没有释放,只是不能访问. static 修饰的是静态变量,静态函数.对于类来说,静态成员和静态函数是属于整个类的,而不是属于对象.可以通过类名来访问,但是其作用域限制于包含它的文件中. static 变量在类内部声明,但是必须在类的外部进行定义和初始化. const 常量在类内部声明,但是定义只能在构造函数的初始化列表进行. class A { public: A(int a) : constNum(a)

php中函数内使用static修饰变量

首先理解静态变量的区别,声明一个函数test() function num(){ $a = 0; echo $a; $a++; } num();num();num(); //输出000 function num(){ static $a = 0; echo $a; $a++; } num();num();num(); //输出012 从上面可以看到使用static的区别,static可以在函数被重复调用的时候,static变量保留上次执行函数后的结果. 可以利用此类特性做隔行变色等 functi

static修饰变量

(1)修饰局部变量 改变存储类型,放到静态区(可修改) 栈区到静态区(静态区开辟的变量,程序结束后销毁,出范围不能使用,但是存在在静态区) (2)修饰全局变量 改变链接属性(外部链接属性变成内部链接属性) (3)修饰函数 改变链接属性(外部链接属性变成内部链接属性)

C语言中static修饰符的意义

在C语言中,static通常有2种含义:1)定义变量的生命周期:2)定义变量或者函数的作用域. 变量的生命周期是指,相对于程序运行的进程生命周期,变量存在的时间段.变量的生命周期由变量的存储类型(位置)决定.因此static的第1种含义也可以理解为,static定义了变量的存储类型(位置). C语言中,变量存储位置分为栈.全局静态区.堆.栈用来做函数调用,参数传递等,在程序的运行过程中是操作最频繁的数据区.全局静态区,是变量一直存在于内存中,在程序整个运行过程中不会被销毁.堆,是由操作系统维护的

static修饰符详解

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

Java变量的初始化问题探究

对于java的变量,我们知道有成员变量和局部变量. 关于他们的初始化,基本上所有书上都会写.成员变量,java会帮助你初始化,局部变量,则需要程序员自己初始化. 对于类的成员变量.不管程序有没有显示的初始化,Java  虚拟机都会先自动给它初始化为默认值. 规则为: 1.整数类型(byte.short.int.long)的基本类型变量的默认值为0. 2.单精度浮点型(float)的基本类型变量的默认值为0.0f. 3.双精度浮点型(double)的基本类型变量的默认值为0.0d. 4.字符型(c