发布网友 发布时间:2022-04-20 03:30
共1个回答
热心网友 时间:2023-07-17 03:36
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类(见如下代码)
publicclassOuterClass{
publicstaticclassInnerClass{
InnerClass(){
System.out.println("=============我是一个内部类'InnerClass'=============");
}
}
}
publicclassTestStaticClass{
publicstaticvoidmain(String[]args){
//不需要new一个OutClass
newOuterClass.InnerClass();
}
}
static有三个个完全不同的含义:
一·用在全局变量,表明这个变量在每个编译单元有独自的实例:
//foo.h
staticinta=123;
//foo.cpp
#include"foo.h"
intfoo_func(){returna++;}
//bar.cpp
#include"foo.h"
intbar_func(){returna++;}
二·如果你分别编译foo.cpp和bar.cpp,再把它们链接在一起,全局变量a会有两份,那两个函数会操纵不一样的a实例。
三·用在函数里的局部变量,表明它的生存周期其实是全局变量,但仅在函数内可见:
intget_global_id()
{
staticintseed=0;
returnseed++;
}
如果错误,加上这个选项即可:
-Wl,--whole-archive-lpthread-Wl,--no-whole-archive
而且这个问题目前只在ubuntu上有,在Redhat系平台上不需要这么做。