静态变量

关于static 关键字的总结

谁都会走 提交于 2019-12-16 21:18:47
转发自:https://www.cnblogs.com/xrq730/p/4820992.html 前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否有钻研精神。 静态变量和静态方法 static关键字最基本的用法是: 1、被static修饰的变量属于类变量,可以通过 类名.变量名 直接引用,而不需要new出一个类来 2、被static修饰的方法属于类方法,可以通过 类名.方法名 直接引用,而不需要new出一个类来 被static修饰的变量、被static修饰的方法统一属于类的 静态资源,是类实例之间共享的,换言之,一处变、处处变 。JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?个人认为主要有三个好处: 1、不同的类有自己的静态资源,这可以实现静态资源分类。比如和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了 2、避免重名。不同的类之间有重名的静态变量名、静态方法名也是很正常的,如果所有的都放在一起不可避免的一个问题就是名字重复,这时候怎么办

static的用法

♀尐吖头ヾ 提交于 2019-12-15 20:35:05
static能用来修饰什么 : 属性,方法,代码块,内部类 static修饰属性 (成员属性): 静态变量或者类变量 使用static 和 不使用static修饰属性时的区别: 1.不使用static修饰时:当我们创建了类的多个对象时,每一个类都有一套属于自己的非静态属性。当修改其中的非静态属性时,不会导致其他对象中同样的属性值进行修改 2.使用static修饰时:当我们创建了类的多个对象时,多个对象共享同一个static修饰的变量。当我们改变了某一个对象中的static修饰的属性时,会导致其他对象的static属性也会修改。 public class StaticTest { public static void main(String[] args) { Person p1=new Person(); p1.name="zs"; p1.age=23; p1.nation="china"; Person p2=new Person(); p2.name="ls"; p2.age=24; System.out.println(p2.nation); // 打印结果为china } } class Person{ String name; int age; static String nation; } 3.静态变量随着类的加载而加载,实例变量是随着类的实例而加载的

50道最新java基础部分面试题(二)

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-14 23:44:28
java基础部分面试题(前11题请看上一篇博客) 12、静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。 public class VariantTest{ public static int staticVar = 0; public int instanceVar = 0; public VariantTest(){ staticVar++; instanceVar++; System.out.println(“staticVar=” + staticVar + ”

【php基础】静态与非静态变量、方法

烈酒焚心 提交于 2019-12-13 00:41:39
静态的变量或者是函数是保存的静态内存中的,只有到程序结束时才会被释放,那他是什么时候赋值的呢 如果类中调用一次,静态类在编译的时候需要多做工作,动态类在执行的时候需要多做工作,然而php是动态语言,每一次这两步都不掉,所以对于只运行一次的类,无所谓谁快谁慢。 但是如果一个类在程序当中要多次调用就不一样了,静态类是编译的时候就赋值了,程序之后的运行都可以直接调用过来,而不用动态的分配内存了,就节约了时间,这就是为什么静态类比动态类快的原因(前提是调用多次记得)。 class A {   public static $a;   public $b;   public function __construct($a=1,$b=2)   {     self::$a = $a;     $this->$b = $b;   }   public static function func_static()   {     echo 'func_static'.PHP_EOL;     echo $this->b; //报错,不能使用$this关键字,不能调用      echo self::$a//正常   }   public function func()   {     echo 'func'.PHP_EOL;   }   } A::func_static();//正常 A::func(

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序

余生长醉 提交于 2019-12-11 23:12:26
父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量(父类实例成员变量)、 父类构造函数、 子类非静态变量(子类实例成员变量)、 子类构造函数。 详情参考 https://blog.csdn.net/xybelieve1990/article/details/48678603 来源: CSDN 作者: 一路风情 链接: https://blog.csdn.net/qq_33280890/article/details/103499036

Java中关于static静态关键字

谁说我不能喝 提交于 2019-12-11 15:47:46
在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。本文主要来去讲解一下static的来龙去脉。 static要解决什么问题? 我们知道,当我们通过new关键字去创建对象的时候,那么数据的存储空间才会被分配,类中的成员方法才能被对象所使用。但是呢有两种特殊的情况:1、我们通过new关键字创建的对象共享同一个资源,而不是说每个对象都拥有自己的数据,或者说根本就不需要去创建对象,这个资源和对象之间是没有关系的。2、希望某个方法不与包含它的类的任何对象联系在一起。总结下来就是说:即使没有创建对象,也能使用属性和调用方法,static目的就是在于解决这个问题。 格式 修饰变量:static 数据类型 变量名 修饰方法:【访问权限修饰符】 static 方法返回值 方法名(参数列表) 特点 static可以修饰变量,方法被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。在类被加载的时候,就会去加载被static修饰的部分。被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。 static静态变量

VB 变量的声明及作用域

♀尐吖头ヾ 提交于 2019-12-11 08:16:23
一、变量的声明 一般来说,变量必须先声明后使用。即告诉编译器在程序中使用了哪些变量,及为变量开辟多大的内存空间。 声明变量有两种方式:隐式声明、显式声明。 1隐式声明:vb的变量可以不经声明直接使用(但不易检查错误,不建议使用) 2显式声明:用声明语句创建变量。格式为:declare 变量名 as 类型 强制显式声明变量: 为了避免写错变量名引起的麻烦,可在类模块、窗体模块或标准模块的声明段中加入语句Option Explicit,VB将自动检查程序中是否有未定义的变量,若有将显示错误信息。 声明语句有以下四种格式: 1、Dim<变量名>[As<数据类型>] 用于在标准模块(Module)、窗体模块(Form)或过程(Procedure)中定义变量或数组。 用Dim语句在窗体的过程中声明的变量称为局部变量,其作用域仅局限在本过程内部,过程一旦执行完毕,其值也就消失了。 2、Private<变量名>[As<数据类型>] 用于声明模块变量。 如果要在一个窗体模块的所有过程中共享同一个变量,则应在这个窗体模块的声明段用Private语句进行声明。这种变量称为模块级变量,其作用域为整个窗体模块。 3、Public<变量名>[As<数据类型> ] 用于在标准模块中定义全局变量或数组。 如果在标准模块的声明段中用Public关键字来声明模块级变量,那么这个变量的作用域是整个工程

Java基础篇(中)

二次信任 提交于 2019-12-10 15:56:04
4 、 Java 关键字 下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类、方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充 , 继承 final 最终值 , 不可改变的 implements 实现(接口) interface 接口 native 本地,原生方法(非 Java 实现) new 新 , 创建 static 静态 strictfp 严格 , 精准 synchronized 线程 , 同步 transient 短暂 volatile 易失 程序控制语句 break 跳出循环 case 定义一个值以供 switch 选择 continue 继续 default 默认 do 运行 else 否则 for 循环 if 如果 instanceof 实例 return 返回 switch 根据值选择执行 while 循环 错误处理 assert 断言表达式是否为真 catch 捕捉异常 finally 有没有异常都执行 throw 抛出一个异常对象 throws 声明一个异常可能被抛出 try 捕获异常 包相关 import 引入 package 包 基本类型 boolean 布尔型 byte 字节型

全面解析JVM加载中初始化的时机

三世轮回 提交于 2019-12-10 12:14:59
JVM类加载过程 JVM类加载过程分为几个阶段,分别是 加载 、 验证 、 准备 、 解析 和 初始化 。 加载 是把二进制字节码载入内存, 验证 是校验字节流中包含的信息是否符合当要求, 准备 是为静态变量分配内存并设置静态变量初始值, 解析 是把常量池内的符号引用替换为直接引用, 初始化 是执行所有静态变量的赋值动作和静态语句块中的语句。更多详尽分析请阅读之前的文章《 JVM的类加载机制全面解析 》,这里不再赘述了。 欢迎关注微信公众号: 万猫学社 ,每周一分享Java技术干货。 类初始化的时机 对于我们开发人员,我认为应该具体了解一下初始化阶段什么时候在开始。JVM规范对此做了严格规范,有且只有以下5种情况必须对类进行初始化: 遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类没有被初始化过,就需要先进行初始化。对于字节码指令不了解的同学,可能就是一脸蒙圈了。我们来说人话,就是:使用new关键字实例化对象的时候、读取和设置一个类的静态字段(不被final修饰的)和调用一个类的静态方法的时候。这样说更容易被理解一些。 使用java.lang.reflect包中的方法对类进行反射调用的时候,如果类没有被初始化过,就需要先进行初始化。 当初始化一个类的时候,如果发现它的父类还没有被初始化过,就需要先初始化它的父类。

静态变量、实例变量、局部变量与线程安全

天大地大妈咪最大 提交于 2019-12-10 04:50:56
静态变量:线程非安全。 加static关键字的变量,只能放在类里, 不能放到方法里 。 静态变量有默认初始化值。 静态变量表示所有实例共享的一个属性,位于方法区,共享一份内存,而成员变量是对象的特殊描述,不同对象的实例变量被分配在不同的内存空间, 一旦静态变量被修改,其他对象均对修改可见,故线程非安全。 实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。 成员变量(实例变量): 1、成员变量定义在类中,即类中的普通变量,在整个类中都可以被类中方法所访问(如过和局部变量重名,需用this关键字)。 2、成员变量随着对象的建立而建立,随着对象的消失而消失, 存在于对象所在的堆内存中 。 3、 成员变量有默认初始化值 实例变量为对象实例私有,在虚拟机的堆中分配,若在系统中只存在一个此对象的实例,在多线程环境下,被某个线程修改后,其他线程对修改均可见,故线程非安全;如果每个线程执行都是在不同的对象中,那对象与对象之间的实例变 量的修改将互不影响,故线程安全。 成员变量和类变量的区别: 1、两个变量的生命周期不同 成员变量随着对象的创建而存在,随着对象的回收而释放。 静态变量随着类的加载而存在,随着类的消失而消失,且优先于对象存在。 2、调用方式不同 成员变量只能被对象调用。 静态变量可以被对象调用,还可以被类名调用。 3、数据存储位置不同 成员变量存储在堆内存的对象中