初始化

单例模式

帅比萌擦擦* 提交于 2020-02-10 05:33:15
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 应用实例: 1、一个党只能有一个主席。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口

C++对象数组与对象指针

拈花ヽ惹草 提交于 2020-02-10 03:22:06
(一)对象数组   将具有相同类类型的对象有序地集合在一起便构成了对象数组,以一维对象数组为例,其定义形式为:   类名 对象数组名[];   Point points[100];   关于对象数组的几点说明:   (1)在建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需要调用100次构造函数。   (2)如果对象数组所属类有带参数的构造函数时,可用初始化列表按顺序调用构造函数,使用复制初始化来初始化每个数组元素。   Point A[3]={Point(0,0),Point(1,1),Point(2,2)}; //Point(int a=0,int b=0)   Point A[3]={Point(1),Point(2),Point(3)}; //Point(int a=0,int b=0)   (3)如果对象数组所属类有单个参数的构造函数时候,定义数组时可以直接在初值列表中提供实参。   Point A[3] ={1,2,3}; //Point(int a=0,int b=0)   等价与:   Point A[3]={Point(1),Point(2),Point(3)};   (4)如果对象数组在创建时没有初始化,则所属类要么有合成默认构造函数,要么定义无参数的构造函数或全部参数为默认参数的构造函数。   (5

JVM类加载机制

点点圈 提交于 2020-02-10 01:17:25
个人博客 http://www.milovetingting.cn JVM类加载机制 前言 本文为学习Java相关知识所作笔记,参考以下资料: https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享! JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将 JSP 文件转换成对应的 Class 类)。 验证 这一阶段的主要目的是为了确保 Class 文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 准备 准备阶段是正式为类变量分配内存并设置类变量的初始值阶段,即在方法区中分配这些变量所使用的内存空间。注意这里所说的初始值概念,比如一个类变量定义为: public static int v = 8080; 实际上变量 v 在准备阶段过后的初始值为 0 而不是 8080,将 v 赋值为 8080 的 put

tars源码解析3-springboot启动

早过忘川 提交于 2020-02-09 20:14:57
从spring xml ,spring JavaConfig,spring boot ,spring cloud。原理从始到终都是没有任何变化的,只要我们掌握了最核心的只不过是表现方式不同了。所以有了 技术万变不离其中 tars一样的,如果玩转它。 从前面两篇,分析而言。要改成springboot的方式,无非就是使用它的方式改变了,核心是不会变的。 使用方式有哪几个变化呢? 启动方式,springboot starter方式,注解启动。 注解服务。 围绕这两个变化。 我们知道了tars服务启动需要启动哪些类,初始化哪些类,同理starter无非是jar包中配置了引入启动类,监听器org.springframework.context.ApplicationListener。然后注解@EnableTarsServer引入初始化某个类而已。 非常熟悉spring与springboot生命周期的,那更加清楚,不仅仅是这两种方式,还有很多种,可以使用。 服务解析方式发生改变,以前是读取xml,读取javaConfig文件,现在变成注解而已。跟我练习,如何使用注解呢? 定义注解 标记类 springboot生命周期中扫描这些类,判断有没有TarsServant注解标记了,有那么就取出,放入服务中即可。 客户端使用,TarsClient,无非就是一个生命周期中的类,来初始化扫描这些标记了的类

Java基础之二、类的基础

旧街凉风 提交于 2020-02-09 14:05:06
类定义---方法及其处理的数据对象的集合结构 将现实的对象(物体)和概念映射到程序中的对象(变量)中 1:使用 new 运算符创建的类类型的主体称为 实例 ,创建实例的操作称为 实例化,   new Account()实例化了一个Account实例; 2:对象就是对程序运行时 动态创建 的主体的总称 3:类 实例 中的字段,即 实例变量 ,会初始化为默认值 4:类结构  原则上所有的字段都应该设为私有,未指定private的字段默认访问都是对包内部公开的  将字段设为私有,防止外部访问,使方法和字段紧密结合称之为 封装 5:构造函数的作用就是正确的 初始化实例,防止初始化不完整或者不正确  声明类类型的时候一定要提供构造函数,如果类中未定义,会默认定义一个空的构造函数  构造函数不是方法,不能通过实例.构造函数()访问 6:方法和消息  实例方法的调用可表示为向对象“ 发消息 ” 7:标识符命名  类:大驼峰(首字母大写);接口:大驼峰(首字母大写),表示动作的接口名称时形容词。表示(“可……的”)接口以”……able“结尾,例如Cloneable,Runnable;  方法:小驼峰(首字母小写);字段:小驼峰(首字母小写);常量:全部大写,多个单词之间用_分隔;局部变量或形参:小驼峰(首字母小写) 8:方法访问器  用于获取字段值的方法称为 getter 方法

JVM原理梳理

喜欢而已 提交于 2020-02-09 04:04:19
最近在研究JVM原理,整理心得以便于后续面试复习使用。 一。JVM内存模型(运行时数据区) 说明:这是JVM规定的内存模型,每个具体实现根据厂商有所不同。比如:HotPot 1.8之前有持久带(方法区的实际实现)的概念,其他如IBM J9没有这个概念, 1.程序计数器(PC) 线程执行的字节码的行号指示器,一块比较小的内存,这个指示器一行一行的读取命令进行处理。 不同线程执行的命令肯定是不一样的所以这个需要每个线程有一个。 执行本地方法(Native)时值为unifined空。 该区域是唯一不会OOM(内存溢出)的地方 2.栈 虚拟机栈是描述Java方法执行的内存模型,是动态概念。每个方法执行时会创建一个栈帧,里面存放局部变量,操作数栈,动态链表等信息。 基本数据类型都是直接存放到栈上的,对应到每个方法就是该方法的栈帧。但是,对象都放到堆上,栈里只存放对象的引用。 3.本地方法栈 上面的栈是执行Java字节码,本地方法栈执行的是本地方法,作用相同。本地方法可以使用不同语言实现,比如C++。 4.堆 内存最大的一块,所有对象都在这里创建,GC(垃圾回收的主要战场,注意不是全部)。 内存分配策略: 使用哪种一般有GC方式决定。使用分代复制方法的一般使用指针碰撞,使用标记清除方法的使用空闲列表。 指针碰撞: 内存被占用和空闲区域是规整的,指针指向临界位置

Windows安装MySQL初始化出现:Install/Remove of the Service Denied解决方法

谁说胖子不能爱 提交于 2020-02-09 03:16:15
Windows安装MySQL初始化出现:Install/Remove of the Service Denied解决方法 在使用Windows安装MySQL在命令行窗口初始化时出现Install/Remove of the Service Denied是因为打开命令行没有使用管理员权限进行,权限不够无法进行上面的操作,如下图所以: 解决方法:重新使用管理员身份打开命令行,再次输入以上操作即可: 来源: CSDN 作者: CHQC388 链接: https://blog.csdn.net/CHQC388/article/details/104226243

wwise初始化失败

北慕城南 提交于 2020-02-09 01:39:38
wwise初始化失败 http://gad.qq.com/question/detail/29087 请问大家,我在接入wwise时(cocos2d引擎),pc平台和ios都是正常的 但是在Android平台,遇到的问题是AK::SoundEngine::Init返回AK_Fail 初始化参数都是默认参数,使用的wwise版本是2016.2.4.6089 已查明原因,自己回答下:cocos2d-x用的是JavaActivity,而WwiseAudio需要NativeActivity: platformInitSettings.pJavaVM = app_state->activity->vm; platformInitSettings.jNativeActivity = app_state->activity->clazz; AKRESULT ret = AK::SoundEngine::Init(&initSettings, &platformInitSettings); 另外在这之前要调用内存初始化 AkMemSettings memSettings; memSettings.uMaxNumPools = 20; AK::MemoryMgr::Init(&memSettings) 来源: CSDN 作者: kuangben2000 链接: https://blog.csdn

【WPF学习】第十五章 WPF事件

十年热恋 提交于 2020-02-09 01:11:01
原文: 【WPF学习】第十五章 WPF事件   前两章学习了WPF事件的工作原理,现在分析一下在代码中可以处理的各类事件。尽管每个元素都提供了许多事件,但最重要的事件通常包括以下5类:    生命周期事件 :在元素被初始化、加载或卸载时发生这些事件。    鼠标事件 :这些事件是鼠标动作的结果。    键盘事件 :这些事件是键盘动作(如按下键盘上的键)的结果。    手写笔事件 :这些事件是使用类似钢笔的手写笔的结果。在平板电脑上用手写笔代替鼠标。    多点触控事件 :这些事件是一根或多根手指在多点触控屏上触摸的结果。尽在Windows7中支持这些事件。 一、生命周期事件   当首次创建以及释放所有元素时都会引发事件,可使用这些事件初始化窗口。表1-1列出了这些事件,他们是在FrameworkElement类中定义的。 表1-1 所有元素的生命周期事件   为了弄清Initialized事件和Loaded事件之间的关系,分析一下呈现过程是有帮助的。FrameworkElement类实现了ISupportInitialize接口,该接口提供了两个用于控制初始化过程的方法。第一个方法是BeginInit(),在实例化元素后立即调用该方法。调用BeginInit()方法后,XAML解析器设置所有元素的属性(并添加内容)。第二个方法是EndInit(),完成初始化后,将调用该方法

【WPF学习】第二十七章 Application类的任务

时间秒杀一切 提交于 2020-02-09 01:06:40
原文: 【WPF学习】第二十七章 Application类的任务   上一章介绍了有关WPF应用程序中使用Application对象的方式,接下来看一下如何使用Application对象来处理一些更普通的情况,接下俩介绍如何初始化界面、如何处理命名行参数、如何处理支付窗口之间的交互、如何添加跟踪文档以及如何创建单示例应用程序。 一、显示初始化界面   WPF应用程序的运行速度快,但并不能在瞬间启动。当第一次启动应用程序时,会有一些延迟,因为公共语言运行时(Common Language Runtime,CLR)首先需要初始化.NET环境,然后启动应用程序。   这一延迟未必成为问题。通常,只需要经历很短的时间,就会出现第一个窗口,但如果具有更耗时的初始化步骤,或者如果只是希望通过显示打开的图像应用程序显得更加专业,这时可使用WPF提供的简单初始界面特性。   下面是添加初始界面的方法:   (1)为项目添加图像文件(通常是.bmp、.png或.jpg文件)。   (2)在Solution Explorer中选择图像文件。   (3)将Build Action修改为SplashScreen。   下次运行应用程序时,图像会立即在屏幕中央显示出来。一旦准备好运行时环境。而且Application_Startup方法执行完毕,应用程序的第一个窗口就将显示出来,这时初始化界面图像会很快消失