静态变量

内部类

久未见 提交于 2020-01-24 15:18:47
内部类的定义: 内部类就是定义在另一个类里面的类。反之,包含内部类的类称为外部类。 我们为什么要使用内部类呢? 1.外部类能给内部类提供更好的封装,把内部类隐藏在外部类之内,不允许同一个包中的其他类去访问。 2.内部类能直接访问外部类的所有数据,包括私有数据。 3.内部类实现的功能,外部类也能使用。 内部类分为: 1.成员内部类 2.静态内部类 3.方法内部类 4.匿名内部类 下面在下就详细说说这个4中内部类: 1.成员内部类: 在其外部类中被定义,与成员变量,方法并列。 package org.member.innerclass; public class Big { //定义一个整形变量 private int i = 10; //定义一个整形变量 private int k = 20; //定义一个静态整形变量 private static int j = 30; //定义一个方法 public void method1() { System.out.println( "method1..." ); } //定义一个静态方法 public static void method2() { System.out.println( "method2..." ); } //定义成员内部类 class Small { //内部类和外部类的成员变量能够共存的 //定义一个整形变量

静态变量、非静态变量的区别和注意事项

烂漫一生 提交于 2020-01-23 05:52:22
静态变量 静态变量随着类的加载而加载 静态变量即可以通过类名访问,也可以通过对象名访问 静态变量随着类的加载而进入方法区中的静态区 非静态变量 非静态变量在对象调用的时候创建 非静态变量只可以通过对象名访问 非静态变量属于对象,存储在堆内存中 注意事项 静态不能访问非静态 来源: CSDN 作者: 程序窦 链接: https://blog.csdn.net/weixin_43942518/article/details/103998767

静态变量和实例变量的区别

妖精的绣舞 提交于 2020-01-22 18:00:39
静态变量用static修饰,实例变量不用。 public class Person { static String position; String name; } 静态变量是随着类的字节码的加载而被加载进内存的,所以只要程序一启动运行到该类时就会被加载进内存,不管创建了多少个对象在内存中只存储一份。而实例变量是在创建对象以后才能被分配内存空间,创建对少个对象就会存储多少份。 静态变量被存储到内存的静态区,实例变量被存储到堆中。 静态变量是和类相关的,使用类名直接调用。实例变量是和对象相关的必须通过对象名调用。 public static void main(String[] args) { Person.position = "老师"; Person p = new Person(); p.name="老王" } 来源: 51CTO 作者: 熊熊爬楼梯 链接: https://blog.51cto.com/11583017/2430453

Block那些不得不说的故事

时光毁灭记忆、已成空白 提交于 2020-01-21 22:19:32
Blocks是带有自动变量(局部变量)的匿名函数,能够捕获它所在函数内部的变量。实质是OC对闭包的对象实现,是一种特殊的数据类型,其可以作为变量被定义、可以作为参数、可以作为返回值,block的声明与赋值只是保存了一段代码段,在调用时执行内部的代码。block的设计思想是可以将有意义的代码片段组群成一个区块(block),而非转成分散且特定命名的程序。区块可以有区块外部无法通过名称访问,属于 区块本身的变量 、程序以及函数。 官方解释: Block对象是C级语法和运行时功能。 它们类似于标准C函数,但除了可执行代码之外,它们还可能包含对自动(堆栈)或托管(堆)内存的变量绑定。 因此,块可以维护一组状态(数据),它可以用于在执行时影响行为。您可以使用块来组合可以传递给API的函数表达式,可选地存储并由多个线程使用。 块作为回调特别有用,因为块包含要在回调时执行的代码和执行期间所需的数据。 一.Block的模式和实质 Obejctive-C中,Block实际有自己的isa指针,它是被当做一个对象处理的,调用的时候也是给这个block发送了一个消息。block在OC中的实现如下: struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...); //函数指针

Java多线程中static变量的使用

二次信任 提交于 2020-01-21 20:22:31
转自:http://blog.csdn.net/yy304935305/article/details/52456771 有时候,对于在多线程中使用static变量有没有冲突,是否存在安全问题不能十分的确定。在使用过程中有点含糊,总想找点时间好好追究一下,可总因开发项目时间的紧迫而搁浅。我想,没有做进一步的研究而拿项目繁忙说事,这是自己的借口吧! 鲁迅先生曾说过:“时间就像海绵里的水,只要愿挤,总还是有的”。不管肿(怎)么说,这事还是要做的啊。如果越往后推,可能造成的潜在影响更大。这始终是个隐患,不能不除。 不是痛定思痛,而是认识到事情的重要性,就要开始行动了... ... 以上是个人的闲言碎语,不足而看。下面,我们就少言几句进入到技术领域吧! 线程,是我们项目中绕不过的重点领域。提到线程,就常会听到线程安全的术语。那什么是线程安全呢?通俗点说,就是线程访问时不产生资源冲突。其实,这是一个有点难以定义的概念,不是很容易让人一听就懂的概念。“一个类可以被多个线程安全调用就是线程安全的”《 Java 编程并发实践》。 来说说静态变量、实例变量、局部变量在多线程下的安全问题吧! (一)静态变量:线程非安全 1、静态变量:使用static关键字定义的变量。static可以修饰变量和方法,也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说

php中的static关键字

会有一股神秘感。 提交于 2020-01-21 19:26:24
学习博客: https://www.jianshu.com/p/ab5749914f7c static可以声明类的属性和方法为静态,和常规属性、方法有什么区别呢? 类的静态属性不能通过实例访问,静态方法可以通过实例访问但是执行会有不同的地方。 静态变量 PHP中静态变量的作用域是全局作用域,所以即使静态变量所在函数执行完毕后依然存在; PHP中静态变量可以作为递归函数的终止条件,正是因为以上这一点。 PHP中静态变量初始化必须是一个常量,而非变量或者函数的返回值之类的。 多个对象实例共享同一个变量 静态方法 php5.3之后出现了延迟静态绑定,可以让重构的时候方法指向被调用的类,而不是父类。 来源: CSDN 作者: liuxiang15 链接: https://blog.csdn.net/liuxiang15/article/details/104063894

JAVA虚拟机类加载机制

十年热恋 提交于 2020-01-21 03:22:05
JAVA虚拟机类加载机制 2020第一更 简单易懂JAVA虚拟机类加载机制 类从被加载到虚拟内存中开始,到卸载内存为止,他的整个生命周期包括:加载–>链接–>初始化–>使用–>卸载 加载 获取二进制字节流 静态存储结构转化方法区的运行时数据结构 在JAVA堆生成一个类对象、作为方法区的访问入口 链接:包含验证,准备,解析 验证 验证Class的标识:魔术 Magic Number 验证Class的版本号 验证常量池 Class文件每部分(字段表,方法表)是否正确 元数据验证(父类验证,继承验证,final验证) 字节码验证(指令验证) 符号引用验证(通过符号引用是佛偶能找到字段,方法,类) 准备 为类变量分配内存并且设置类变量的初始化阶段 只对static类变量进行内存分配 static int n = 2; 初始化值是0,而不是2,因为这时候还没有执行任何Java方法.(静态变量,静态块初始化) static final int n = 2 对应到常量池,在准备阶段必须被赋值成2 类变量:一般称为静态变量 实例变量:当对象被实例化的时候,实例变量就跟着确定了,随着对象的销毁而销毁。 解析 对符号引用进行解析 直接引用:指向目标的指针或者偏移量 符号引用–》直接引用 主要涉及:类,接口,字段,方法(接口,类)等。 初始化 为标记为常量的字段赋值,以及执行clinit方法

SpringContextHolder类

橙三吉。 提交于 2020-01-20 23:46:21
1、通常使用SpringContextHolder类获取bean实例: 解决: 如果要在静态方法中调用某一bean的方法,那么该bean必须声明为static的,但正常情况下@Autowired无法注入静态的bean,。 利用Spring的使用SpringContextHolder工具类的getBean方法来获取静态bean。 /** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. * */@Service@Lazy(false)public class SpringContextHolder implements ApplicationContextAware, DisposableBean { private static ApplicationContext applicationContext = null; private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); /** * 取得存储在静态变量中的ApplicationContext. */ public static ApplicationContext getApplicationContext() {

赢在面试之Java基础(1)

Deadly 提交于 2020-01-20 21:11:47
1.一个.java的源文件中是否可以包含多个类(不是内部类)?有什么限制?   可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.java中有没有goto?   java中的保留字,现在没有在java中使用. 3.说说&和&&的区别?   &和&&都可以作逻辑与的运算符,表示逻辑与and,当运算符两边的表达式的结果均为true是,整个运算结果才为true,否则,只要一方为false,则结果为false;   &&还有短路的功能,即,如果第一个表达式为false,则不再计算第二个表达式,例:if(str!=null&&!str.equals(s))表达式,当str为null时,后面的表达式不会执行.而如果str!=null时,后面的表达式才会执行. 4.在java中如何跳出当前的多重嵌套循环? 5.switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 6.静态变量和实例变量的区别?   在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被 分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只 要程序加载了类的字节码,不用创建任何实例对象

jvm(一)class文件如何加载到jvm

只愿长相守 提交于 2020-01-20 04:28:31
编译好的class文件如何被加载到jvm中?相信只要去钻研的小伙伴们都会产生这个疑问,下面我就来谈谈我个人的理解。 首先,官网上是分为这么几个步骤:加载、链接以及初始化。为了方便理解,我这里采用图解来描述。 装载(Load) 这个装载我们并不陌生,因为spring初始化bean之前也会存在这个过程。在装载里面其实主要完成以下三件事情: 通过一个类的全限定名获取定义此类的二进制字节流。 说白了就是按照类的全路径去查找该类,并且将类文件转化为二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 这里如果不了解运行时数据区的话,可能一下子没法理解。简单来说就是,类的元信息以及Java类里存在的静态变量或常量等信息都要保存在方法区里,所以需要转化为符合方法区的数据结构。 在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。 这里也需要对运行时数据区有了解,举个例子,Object obj=new Object;这里真实的对象其实存放在Java堆中,而描述类的元信息存放在方法区(这个obj对象是什么类型、由谁创建等)。对象的对象头会有个指针指向方法区,以便随时获取类的元信息。 链接(Link) 从上图中可以看到,链接里又包含:验证、准备和解析。 验证 验证就是保证被加载类的正确性。比如,文件的格式、元数据、字节码