static为什么可以修饰类?
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类(见如下代码)
public class OuterClass {
public static class InnerClass{
InnerClass(){
System.out.println("============= 我是一个内部类'InnerClass' =============");
}
}
}
public class TestStaticClass {
public static void main(String[] args) {
// 不需要new一个OutClass
new OuterClass.InnerClass();
}
}
static有三个个完全不同的含义:
一·用在全局变量,表明这个变量在每个编译单元有独自的实例:
// foo.h
static int a = 123;
// foo.cpp
#include "foo.h"
int foo_func() { return a++; }
// bar.cpp
#include "foo.h"
int bar_func() { return a++; }
二·如果你分别编译foo.cpp和bar.cpp,再把它们链接在一起,全局变量a会有两份,那两个函数会操纵不一样的a实例。
三·用在函数里的局部变量,表明它的生存周期其实是全局变量,但仅在函数内可见:
int get_global_id()
{
static int seed = 0;
return seed++;
}
如果错误,加上这个选项即可:
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
而且这个问题目前只在ubuntu上有,在Redhat系平台上不需要这么做。
2023-08-29 广告