static

JVM学习五:JVM之类加载器之编译常量和主动使用

折月煮酒 提交于 2020-03-01 12:08:40
在学习了前面几节的内容后,相信大家已经对JAVA 虚拟机 加载类的过程有了一个认识和了解,那么本节,我们就继续进一步巩固前面所学知识和特殊点。 一、类的初始化回顾 类在初始化的时候,静态变量的声明语句以及静态代码块都被看作类的初始化语句,Java虚拟机会按照初始化语句在类文件中的先后顺序来依次加载它们。 上图中a的初始化其实经过了四步 1、a被初始化为默认值0 2、a被赋予正确的初始值1 3、执行静态代码块,将a的值赋为2 4、执行静态代码块,将a的值赋为4 因此最终的执行结果是4,一个类只能被一个ClassLoader加载一次,只有没有被加载过的类或者已经被卸载的类才可能被再次加载。类的初始化步骤如下: 1、假如这个类还没有被加载和连接,那就先进行加载和连接 2、假如存在直接的父类,并且这个父类还没有被初始化则先初始化直接的父类 3、假如类中存在初始化语句,那就依次执行初始化语句。 注意:Java虚 拟机在初始化一个类的时候要求它的父类已经被初始化,但是这条规则并不适应于接口!在初始化一个类的时候并不会初始化他所实现的接口!在初始化一个接口的 时候也不会去初始化他的父接口!因此一个父接口并不会因为他的实现类或者子接口的初始化而初始化,只有当程序使用该接口特定的静态变量的时候才会去初始化 这个接口! 我们上面的例子印证了第三点,对于前两点我们知道我们构造一个类的时候假设它有父类

静态成员函数和静态成员变量

≡放荡痞女 提交于 2020-03-01 07:40:51
静态成员变量 作用:实现多个对象间数据共享。相当于不同对象间共享一个成员变量 例: 用_total 统计建立了多少个对象,每建立一个新的对象,total++,每个对象都可以访问total,且结果相同。 class A { 11 public : 12 static int _total ; 13 A ( ) { 14 _total ++ ; 15 } } ; 一个类可以有多个静态成员变量,所有对象共享 **static 成员变量和普通 static 变量一样,都在内存分区中的全局数据区分配内存,到程序结束时才释放。**所static成员变量不会随着对象的创建而分配内存,也不会随对象销毁而释放内存。 必须初始化 且在类外进行,可以不赋值默认为0 因为 全局数据区的变量都有默认的初始值 0,而动态数据区(堆区、栈区)变量的默认值是不确定的,一般认为是垃圾值。 对于静态成员变量不同 对象既可以通过对象名访问,也可以通过类名访问,访问的都是内存上的同一块空间(this指针也可以访问) 初始化 前面说过类只是一个模板,只有在建立对象后才能在内存放存放数据,在类中是不能对成员函数进行初始化的,因为没有地方存储。而静态成员变量是不依赖对象存在的,故其初始化在类外,没有初始化的静态成员变量是无效的。 (实际上是初始化在内存上开辟空间,才能存储数据) type 类名:: 成员变量名 = value

linux部署django项目流程(全)

社会主义新天地 提交于 2020-02-29 21:10:29
1.python3和python2共存配置 流程在下面网址中 https://www.cnblogs.com/vinic-xxm/p/11358894.html 2.安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 3.导出django开发环境清单 pip freeze > packet.txt 4.在linux环境中批量安装清单环境包 pip3 install -r packer.txt 5.将完整的django项目上传到linux系统中 6.项目测试,关闭防火墙 systemctl stop firewalld 运行项目观察是否正常运行 7.安装配置uwsgi pip3 install uwsgi 创建软连接 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 8测试uwsgi环境 uwsgi --http 10.10.14.180:80 --file 项目名/wsgi.py --static-map=/static=static 9配置uwsgi配置文件 mkdir script vim uwsgi.ini [uwsgi] chdir=/opt

PHP反射机制实现插件的可插拔设计

放肆的年华 提交于 2020-02-29 17:22:39
说PHP和ASP等同的朋友们可以就此打住了,PHP支持反射,而且还是非常的强大。好了,我们开始今天的话题。 功能描述: 页面拥有一个主导航菜单,里头有默认连接若干。 插件统一存放在一个目录,插件载入后会自动在导航菜单中增加上自己所需的链接。 插件载入时可执行一定的操作。 动态增删插件无需改动代码。 最终效果: 首页,插件1,插件2 “首页”是系统自带的菜单项。“插件1”和“插件2”是由插件注册的菜单项。 实现过程: 1. 文件结构 Learn plugin plugin1.php plugin2.php test.php 如此设计后,页面入口为test.php,插件都存放在plugin目录下,只要遍历plugin目录就可以找到所有的插件了。 2. 设计插件接口 interface IPlugin{ static function getname(); static function init(); static function getMenu(); } 3. 插件内部实现接口 Plugin1实现接口:<?php Class Welcome implements IPlugin{ static function getname(){ return ‘Welcome (Plugin)’; }static function getMenu(){ return array( ‘text’

Java基础Note——面向对象01

早过忘川 提交于 2020-02-29 14:18:46
面向对象01 软件设计 原则: 可重用性,可拓展性,可维护性 面向对象的最小单位是类。 面向对象四大特征:封装,继承,多态,抽象 类和对象 特征:封装,继承,多态,抽象 关系:类是多个对象抽象出来的共性 对象是类的实例,类是对象的模板 类的定义 在面先过程中,专门为描述对象定义一个类,不需要main。 另外再创建测试类 内存分析 不同类型的成员变量的初始值就是各个类型的默认值。 对象的创建实质上类似于栈中有个指针,指向了堆空间中创建的一组数据。 对象打印和比较-生命周期-匿名对象 打印对象:对象名@hashcode.(哈希表中的值) 比较:对象直接 == 比较的是地址值 生命周期:new关键字在heap中开辟新空间创建,当堆中对象未被任何变量引用,且被GC回收时结束。 匿名对象:没有名称的对象,new Object();匿名对象在堆中开辟一块没有名称的对象, 只能使用一次 。 构造器 编译器在编译源文件时会默认创建一个缺省构造器,即默认的一个构造器。所以类中一定会有构造器 作用:1)构建对象,但是必须和new一起使用。2)完成对象初始化 特点 :构造器名称和当前类的名称相同;禁止使用返回类型,返回类型默认当前类的类型;不需要return; 构造器返回值是当前类的地址 new xxx(); 其实是调用类中的构造器创建对象。 编译器创建的默认构造器特点: 1)符合构造器特点。 2)无参

初识synchronized

谁说我不能喝 提交于 2020-02-29 08:54:05
初识synchronized 线程安全问题 什么是synchronized synchronized几种使用方式 synchronized特性 线程安全问题 首先得知道什么是线程安全问题 这里我们打个比方 在同一个时间段我们使用两个线程对同一个数据进行++操作,这个被操作数据就可能会出现线程安全问题,假如说这个数据是0,两个线程同时++,我们想要得到的数据是2,但其实最后是1,原因是线程之间是不可见的。 第一个线程在读这个数的时候是0,假如第二个线程在第一个线程写回前读了这个数,那么它读到的也是0,这个时候第一个线程写回也就是++操作,这个时候这个数是1,而第二个线程对读到的数进行++操作,写回的时候也是1。 我们看代码: public class test4 { public static class MyRunna implements Runnable { public static int count; @Override public void run() { count++; } } public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 1000; i++) { new Thread(new MyRunna()).start(); } Thread

QuartzCore 绘图介绍,

泪湿孤枕 提交于 2020-02-29 08:11:18
pattern 合并图片 http://donbe.blog.163.com/blog/static/138048021201061781655949/ shadow 阴影 http://donbe.blog.163.com/blog/static/13804802120106179746722/ 渐变 Gradients http://donbe.blog.163.com/blog/static/138048021201062042426239/ Transparency Layers 给我们很方便的画阴影 http://donbe.blog.163.com/blog/static/13804802120106204528100/ 用 Quartz 画聊天对话框背景实例 http://donbe.blog.163.com/blog/static/13804802120106302487518/ mask 和 layer绘图相关 笔记 http://donbe.blog.163.com/blog/static/13804802120107239483208/ Transforms CTM, 转换矩阵 http://donbe.blog.163.com/blog/static/138048021201061054243442/ 关于iphone开发2d游戏的总结(图形) http:/

Java学习笔记八(static、final、代码块等)

无人久伴 提交于 2020-02-28 23:12:40
static关键字的使用: static:静态的 static可以用来修饰属性、方法、代码块、内部类; 使用static修饰属性 :静态变量(类变量) 按是否使用static修饰,属性又可以分为静态属性和非静态属性(实例变量)。 实例变量 :如果创建类的多个对象,每个对象都独立的拥有一套类中的非静态属性,通过改变其中一个对象的属性,并不会影响到其他对象的同一属性值。 静态变量 :如果创建类的多个对象,多个对象共享一个静态变量;当我们通过其中一个对象改变其中的属性值时,会导致其他对象调用的此静态变量也是修改过的。 几点说明 : 1、静态变量随着类的加载而加载,可以通过“类。属性”的方式进行调用; 2、静态变量的加载要早于对象的创建; 3、由于类只会加载一次,因此静态变量在内存中也只存在一份:存在于方法去的静态域中; 4、 类变量 实例变量 类 yes no 对象 yes yes 上面标示类和对象出现时类变量和实例变量的情况。 5、静态变量举例:System.out;Math.PI; 使用static修饰方法 :(静态方法) 1、随着类的加载而加载,可以通过“类。静态方法” 2 静态方法 非静态方法 类 yes no 对象 yes yes 3、静态方法中只能调用静态的属性和方法;非静态方法中可以调用静态和非静态的属性和方法。 static的几个注意点 : 1

C语言 存储类型

折月煮酒 提交于 2020-02-28 20:22:33
C语言 存储类型 类型 作用域 生命周期 存储位置 auto变量 一对{}内 当前函数 栈区 static局部变量 一对{}内 整个程序运行期 初始化在data段,未初始化在BSS段 extern变量 整个程序 整个程序运行期 初始化在data段,未初始化在BSS段 static全局变量 当前文件 整个程序运行期 初始化在data段,未初始化在BSS段 extern函数 整个程序 整个程序运行期 代码区 static函数 当前文件 整个程序运行期 代码区 register变量 一对{}内 当前函数 运行时存储在CPU寄存器 字符串常量 当前文件 整个程序运行期 data段 内存分区 一、内存分区说明 代码区(text segment) 加载的是可执行文件代码段,所有的可执行代码都加载到代码区,这块内存是不可以在运行期间修改的。 未初始化数据区(BSS) 加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段,存储于数据段的数据(全局未初始化,静态未初始化数据)的生存周期为整个程序运行过程。 全局初始化数据区/静态数据区(data segment) 加载的是可执行文件数据段,存储于数据段(全局初始化,静态初始化数据,文字常量(只读))的数据的生存周期为整个程序运行过程。 栈区(stack) 栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等

C# Confluent.Kafka 使用心得

天大地大妈咪最大 提交于 2020-02-28 12:51:15
一、遇到问题:Confluent.Kafka.KafkaException: Broker: Specified group generation id is not valid 这个问题很诡异,网卡一直没有找到解决方案。 首先来说,出现这个问题环境。 1.创建一个分了3个区的topic。 2.启动一个生产者。 3.消费者用手动提交偏移量的方式,且拿到队列之后,每个消息处理时间大约20ms。 4.依次启动三个消费者,前面的消费就会报这样的错。 猜测:可能是因为手动提交偏移量,不及时,导致服务器不当知道如何再分配到三个分区上面。 解决:不用手动提交偏移量方式。//c.Commit(); 因为即使用了手动提交偏移量的试,并且最后不提交,消费者拿到的偏移量也是会变化到下一个的。查阅资料,这个是消费者与服务器之间的Session连接后,本地会有一个偏移量,会自动变化到下一个。但是消费者如果断开,再次连接,又会从头获取队列。 二、问题:Kafka设置为手动提交偏移量时,消费者不提交偏移量,也会自动拿下一条队列。 此问题是kafka自己的机制问题,导致程序最初的错误设计:当处理消息失败时,不提交偏移量,直接处理消息,这样拿到的也是下一条队列。 解决:不用手动提交偏移量的方式,还是采用自动提交,出错的时候,记录topic和offset。单独出错处理! 三、测试代码,生产者与消费者。 static