静态成员

spring注入静态成员变量

你离开我真会死。 提交于 2020-04-01 12:49:18
  工作中遇到的问题,在工具类里面需要给静态成员变量注入值,而静态成员变量是在类加载的时候加载的,所以一直报空指针。 在网上找了几种方法,记录一下。   第一种:使用set函数注入。 1 @Component 2 public class LogUtil { 3 4 private static PayLogDao logDao ; 5 @Autowired 6 public void setLogDao(PayLogDao logDao){ 7 LogUtil.logDao = logDao; 8 } 9 }   第二种:使用 @PostConstructy注解。 1 @Component 2 public class LogUtil { 3 @Autowired 4 private PayLogDao logDao ; 5 6 private static LogUtil logUtil; 7 8 @PostConstruct 9 private void init() { 10 logUtil = this; 11 } 12 13 public static void writeSuccessLog(String ip,String mac,String clazz,String msg){ 14 PayLog log = new PayLog(); 15 log

用静态成员函数调用非静态成员变量

倾然丶 夕夏残阳落幕 提交于 2020-03-28 04:39:05
今天写程序要用到一个计时器,然后需要创建一个新的线程,这个线程是CtestDLG的一个成员函数,必须定义为静态的.但是这个时候就不能去访问非静态成员变量了,这里找到一个很好的解决办法: 先上代码: 1.线程函数的定义: private: int Count_time; CTime C_time; bool GetQuestion(); int mark;//考试分值,五个题目,一个20分,满分100 int QS[5];//随机题库序号 int count2;//题库总数 int count_Q;//当前输出的题目数量 static DWORD WINAPI Fun_Time(LPVOID lpParameter); }; 我们可以看到这个是一个类的成员函数 2.创建线程 void CTESTDlg::ONTIME() { HANDLE pThread_time = NULL; pThread_time = CreateThread(NULL,0,Fun_Time,this,0,NULL); } 这个是在一个消息函数中创建的.第四个参数传递的是一个this指针,指向当前的窗口类(这里很重要) 2.具体实现 DWORD WINAPI CTESTDlg::Fun_Time(LPVOID lpParameter) { CTESTDlg* temp = (CTESTDlg*

c++ static

强颜欢笑 提交于 2020-03-23 05:07:07
静态全局变量 #include <iostream> using namespace std; static size_t ctr = 0; size_t count_calls() { return ++ctr; } int main() { for(size_t i=0; i < 10; ++i) { cout << "times:" << count_calls() << endl;; } } 特点 该 变量 在全局数据区分配内存 未经初始化的静态全局变量会被程序自动初始化为0 静态 全局变量 在声明它的整个文件都是可见的,而在文件之外是不可见的 结果 全局变量和全局静态变量的区别 1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是 整个工程 ,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。 2)全局静态变量是显式用static修饰的全局变量,作用域是声明此变量 所在的文件 ,其他的文件即使用extern声明也不能使用。 静态局部变量 #include <iostream> using namespace std; size_t count_calls() { static size_t ctr = 0; return ++ctr; } int main() { for(size_t i=0

JAVA初始化顺序

好久不见. 提交于 2020-03-17 04:41:21
主要内容: 1 无继承情况下的JAVA初始化顺序 2 JAVA继承情况下的初始化顺序 无继承情况下的JAVA初始化顺序 1 class Sample 2 { 3 Sample(String s) 4 { 5 System.out.println(s); 6 } 7 Sample() 8 { 9 System.out.println("Sample默认构造函数被调用"); 10 } 11 } 12 class Test{ 13 static Sample sam=new Sample("静态成员sam初始化"); 14 Sample sam1=new Sample("sam1成员初始化"); 15 static{ 16 System.out.println("static块执行"); 17 if(sam==null)System.out.println("sam is null"); 18 sam=new Sample("静态块内初始化sam成员变量"); 19 } 20 Test() 21 { 22 System.out.println("Test默认构造函数被调用"); 23 } 24 } 25 //主函数 26 public static void main(String str[]) 27 { 28 Test a=new Test(); 29 } View Code

静态成员和非静态成员的区别?

拥有回忆 提交于 2020-03-13 07:34:56
静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 示例: Codeusing System;using System.Collections.Generic;using System.Text; namespace Example01{ class Program { class Class1 { public static String staticStr = "Class"; public String notstaticStr = "Obj"; } static void Main(string[] args) { //静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值 Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr); Class1 tmpObj1 = new Class1(); tmpObj1.notstaticStr = "tmpObj1"; Class1 tmpObj2 = new Class1();

静态成员和非静态成员的区别?

▼魔方 西西 提交于 2020-03-13 07:34:09
静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 来源: https://www.cnblogs.com/dupeng0811/archive/2009/03/12/1409509.html

写代码的规范!!!!

旧街凉风 提交于 2020-03-13 04:35:40
代码规范 第一条:考虑用静态工厂方法代替构造器 原因:静态工厂方法第一大优势它们有名称,第二大优势,不必在每次调用时都创建一个新对象, 第三优势可以返回原返回类型的任何子类型的对象。 (冷不丁的想用枚举来做静态工厂实现) 第四优势在创建参数化类型实例的时候,他们使得代码变得更加简洁。 缺点当然也有:一:类如果不含共有或者受保护的构造器就不能被子类化,二:与其他静态方法没有区别。 遵守命名习惯可以弥补这一劣势,比如newtype创建新对象,gettype获取对象 所以,一般一个静态工厂方法需要有详细的注释,遵守标准的命名, 如使用getInstance、valueOf、newInstance等方法名; 第二条:遇到多个构造器参数时要考虑用构造器 第一中构造就是常见的重叠构造器,一个构造器中this(xxx)调用同名构造器,但是参数过多就容易懵了, 可以使用无参模式,build生成不可变对象。 第三条:用私有构造器或枚举类型强化Singleton属性(单例模式) 第四条:通过私有构造器强化不可实例化的能力 第五条:避免创建不必要的对象,重用不可变对象 小心自动拆装箱,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。 第6条:消除过期对象的引用:下面例子引用了arraylist的remove方法, 如果没有将元素置为null的话,就会随着垃圾回收器活动的增加

Java 静态变量和静态方法

故事扮演 提交于 2020-03-11 01:06:06
在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。 静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java 虚拟机就可以根据类名找到它们。 调用静态成员的语法形式如下: 类名 . 静态成员 注意 : static 修饰的成员变量和方法,从属于类。 普通变量和方法从属于对象。 静态方法不能调用非静态成员,编译会报错。 静态变量 类的成员变量可以分为以下两种: 1 . 静态变量(或称为类变量),指被 static 修饰的成员变量。 2 . 实例变量,指没有被 static 修饰的成员变量。 静态变量与实例变量的区别如下: 1 静态变量 运行时,Java 虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。 在类的内部,可以在任何方法内直接访问静态变量。 在其他类中,可以通过类名访问该类中的静态变量。 2 实例变量 每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。 在类的内部,可以在非静态方法中直接访问实例变量。 在本类的静态方法或其他类中则需要通过类的实例对象进行访问。 静态变量在类中的作用如下: 1 . 静态变量可以被类的所有实例共享

C/C++返回内部静态成员的陷阱

删除回忆录丶 提交于 2020-03-10 14:28:26
在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。 这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些标准库的话,你可以看到许多各式各样的解决方法。大体来说有下面几种: 1)在函数内部通过malloc或new在堆上分配内存,然后把这块内存返回(因为在堆上分配的内存是全局可见的)。这样带来的问题就是潜在的内存问题。因为,如果返回出去的内存不释放,那么就是memory Leak。或者是被多次释放,从而造成程序的crash。这两个问题都相当的严重,所以这种设计方法并不推荐。(在一些Windows API中,当你调用了一些API后,你必需也要调用他的某些API来释放这块内存) 2)让用户传入一块他自己的内存地址,而在函数中把要返回的内存放到这块内存中。这是一个目前普遍使用的方式。很多Windows API函数或是标准C函数都需要你传入一个buffer和这个buffer的长度。这种方式对我们来说应该是屡见不鲜了。这种方式的好处就是由函数外部的程序来维护这块内存,比较简显直观

C++ static静态成员函数

时光怂恿深爱的人放手 提交于 2020-03-10 07:59:01
与静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符"∷"。 如Box∷volume( );实际上也允许通过对象名调用静态成员函数,如a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用class a的类型而已。静态成员函数的作用是为了能处理静态数据成员。 可以说,两者的根本区别:**非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。**在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。 假如在一个静态成员函数中有以下语句: cout << height << endl ; //若height已声明为static,则引用本类中的静态成员,合法 cout << width << endl ; //若width是非静态数据成员,不合法 但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout << a . width << endl ; //引用本类对象a中的非静态成员 假设a已定义为Box类对象,且在当前作用域内有效,则此语句合法。 例: #