首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不能在main()中定义静态成员变量?

在main()函数中定义静态成员变量是不允许的,原因如下:

  1. main()函数是程序的入口函数,它负责程序的启动和结束,只会被调用一次。静态成员变量是属于类的成员,而不是属于对象的成员。在main()函数中定义的静态成员变量没有对象可以访问,因为在main()函数执行完毕后,程序就会结束,对象也会被销毁,无法访问静态成员变量。
  2. 静态成员变量在内存中只有一份拷贝,不依赖于对象的存在。而main()函数是一个独立的函数,没有对象的概念,无法访问静态成员变量。
  3. 静态成员变量的生命周期与程序的生命周期相同,它会在程序启动时被初始化,在程序结束时被销毁。而main()函数只是程序的一部分,它的生命周期比整个程序要短,无法保证静态成员变量的完整生命周期。

总结起来,main()函数是程序的入口函数,它的作用是启动和结束程序,不适合定义静态成员变量。静态成员变量应该在类的定义中进行声明和定义,它们与对象无关,属于类的一部分,可以被类的所有对象共享和访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java静态变量(类变量)、实例变量、局部变量成员变量

学习Java的过程,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。...//成员变量静态变量(类变量) public static String level = "SSS"; //成员变量静态变量(类变量) public int getAge...成员变量:作用范围是整个类,相当于C的全局变量定义在方法体和语句块之外,一般定义在类的声明之下;成员变量包括实例变量静态变量(类变量); 实例变量:独立于与方法之外的变量,无static修饰,...声明在一个类,但在方法、构造方法和语句块之外,数值型变量默认值为0,布尔型默认值为false,引用类型默认值为null; 静态变量(类变量):独立于方法之外的变量,用static修饰,默认值与实例变量相似...,一个类只有一份,属于对象共有,存储在静态存储区,经常被声明为常量,调用一般是类名.静态变量名,也可以用对象名.静态变量名调用; 局部变量:类的方法变量,访问修饰符不能用于局部变量,声明在方法、构造方法或语句块

2.1K20

Java 菜鸟入门 | Java静态变量、实例变量、局部变量成员变量

//成员变量静态变量(类变量) public static String level = "SSS"; //成员变量静态变量(类变量) public int getAge...成员变量 作用范围是整个类,相当于 C 语言中的全局变量定义在方法体和语句块之外,一般定义在类的声明之下;成员变量包括实例变量静态变量(类变量)。...静态变量(类变量) 独立于方法之外的变量,用 static 修饰,默认值与实例变量相似,一个类只有一份,属于对象共有,存储在静态存储区,经常被声明为常量,调用一般是类名.静态变量名,也可以用对象名.静态变量名调用...成员变量 VS 局部变量 区别 成员变量 局部变量位置不同 类、方法外 方法 初始化值不同 有初始值,无需初始化 无默认值,使用前需完成赋值 内存位置不同 堆内存 栈内存 生命周期不同 随对象创建而存在...,随对象的消失而消失 随方法的调用而存在,随方法的运行结束而消失 作用域 所属大括号 总结 以上就是关于 Java 编程静态变量、类变量、实例变量、局部变量以及成员变量之间的相关区别了。

1.5K20

Java类的初始化过程:(静态成员变量静态代码块,普通成员变量,代码块初始化顺序)

初始化过程是这样的: 1.首先,初始化父类静态成员变量静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类静态成员变量静态代码块,按照在程序中出现的顺序初始化; 3.其次,...初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 类的加载顺序: 父类静态成员变量静态块>子类静态成员变量静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类的加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介...extends A { Test() { super("B"); System.out.print("B"); } public static void main

30630

为什么Java类的成员变量不能被重写?成员变量在Java能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java能够被重写么?...这是为什么呢?...不会重写成员变量,而是隐藏成员变量 Java文档对隐藏域的定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 在一个类,子类成员变量如果和父类成员变量同名,那么即使他们类型不一样,只要名字一样。父类成员变量都会被隐藏。在子类,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们推荐隐藏成员变量,因为这样会使代码变得难以阅读。

3.5K40

【小家java】类静态代码块、构造代码块、静态变量成员变量执行顺序和继承逻辑

com.sayabc.boot2demo1.main.Parent的getAge() // 返回类型java.lang.String与java.lang.Integer兼容...因为false指明了装载类的过程,不进行初始化。初始化则不会执行static块。...我觉得脑子里应该浮现出一个这样的知识点: Java赋值顺序: 1、父类的静态变量赋值 2、自身的静态变量赋值 3、父类成员变量赋值和父类块赋值 4、父类构造函数赋值 5、自身成员变量赋值和自身块赋值...b变量的赋值语句还没有执行哦~~~) 而对象初始化的顺序为:成员变量 -> 普通代码块 -> 构造函数 因此这一波过后:a=110了。...其实这是一个冷知识: 它的关键在于:static StaticTest st = new StaticTest()这句代码,内嵌的这个变量恰好是个静态成员,而且是本类的实例 这就导致了这个有趣的现象

1.4K20

【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包定义闭包 )

文章目录 总结 一、静态闭包变量 1、执行普通闭包变量 2、执行静态闭包变量 二、 在闭包定义闭包 三、 完整代码示例 总结 在闭包 , 打印 this , owner , delegate ,...之外的类 , owner , delegate 是上一层闭包 B ; 一、静态闭包变量 ---- 1、执行普通闭包变量 在类定义闭包变量 , 在闭包打印 this、owner、delegate 值...如果将闭包声明为静态变量 , class Test2 { def static closure = { println "this : " + this println...closure() 执行结果为 : 打印的值都是 Test2 类 ; this : class Test2 owner : class Test2 delegate : class Test2 还是上述静态闭包变量...---- 在 Test2 类定义 闭包变量 closure2 , 在 closure2 闭包定义 closure3 闭包 , class Test2 { def closure2 = {

74320

【C++】泛型编程 ⑮ ( 类模板示例 - 数组类模板 | 自定义持有指针成员变量 )

一、支持 数组类模板 存储的 自定义类 1、可拷贝和可打印的自定义类 在上一篇博客 , 定义了 可拷贝 与 可打印 的 自定义类 Student , 可以被存放到 数组类模板 ; 由于其 成员变量..., 开始讨论 自定义是 char* 类型指针的情况 , 这里涉及到了 堆内存分配 以及 深拷贝 问题 ; 如果将上述 Student 类的 char m_name[32] 数组成员 , 改为 char...* m_name 指针成员 ; 那么需要进行 堆内存管理 , 在 构造函数 分配堆内存 ; 在 析构函数 释放堆内存 ; 为了避免 浅拷贝 问题出现 , 需要 进行 等号 = 运算符重载 ; 以及...Array.cpp 代码文件 #include "Array.h" // 左移 << 操作符重载 // 注意 声明时 , 需要在 函数名 和 参数列表之间 注明 泛型类型 // 实现时 , 不能在...Student& s) { out << "name : " << s.m_name << " , age : " << s.m_age << " ; "; return out; } int main

14410

【C++】类和对象之初始化列表与static成员

这里_n没有办法初始化,它只能在函数体。 声明并没有定义,是在对象实例化的时候才整体定义。 但是有一些成员必须在定义的时候初始化。...这里是显示的调构造 【注意】 每个成员变量在初始化列表只能出现一次(初始化只能初始化一次) 类包含以下成员,必须放在初始化列表位置进行初始化,不能在函数体内初始化: (1)引用成员变量...就像下面这样,临时变量具有常性。 内置类型可以给缺省值,而自定义类型给个缺省值还要定义一个全局变量,很麻烦。 那么为什么下面这样可以?...3.1 概念 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。...0; } static成员函数没有this指针 3.2 特性 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态静态成员变量必须在类外定义定义添加static关键字,类只是声明

10810

【C++】类和对象(下)

对于类,我们要初始化类的成员变量,就需要定义一个对象,这叫做对象实例化,是对象的整体定义。那么要对 对象的每个成员变量定义初始化的话,就要走初始化列表,并且所有成员变量都要先走初始化列表!...const修饰的成员变量是一样的,都是能在定义的时候初始化。...静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。...N<<endl; }  静态成员变量能在类外定义初始化,在类内则会频繁初始化,一直改变值。 ​...通过定义静态成员函数,就可以不定义对象直接调用,静态成员变量是没有this指针的,所以也不能调用其他成员变量

29020

硬钢百度面试!

A a; cout<<sizeof(a)<<endl;// 输出 4; return 0; } 静态成员a不占用类的大小,所以类的大小就是b变量的大小 即4个字节 五、为什么一般构造函数定义为虚函数...所以在实现多态时,当用基类操作派生类,在析构时防止只析构基类而析构派生类的状况发生,要将基类的析构函数声明为虚函数。 为什么构造函数写为虚函数?...定义时要分配空间,不能在类声明初始化,必须在类定义体外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。...,但是只能在该函数内进行使用该静态局部变量, extern的作用(作用域扩展) 将全局变量的作用域扩展到其定义之前:如果全局变量不在文件的开头定义,其作用范围只限定于从定义处到文件结尾,如果在定义点之前的函数想引用该变量...考虑类的情况 const成员变量:不能在定义外部初始化,只能通过构造函数初始化列表进行初始化,并且必须有构造函数;不同类对其const数据成员的值可以不同,所以不能在声明时初始化。

16920

JAVA 1-6章测试题

变量分为几种? 答:Java变量就是指在程序运行的过程可能会变化的值。 变量分为成员变量和局部变量。 5、局部变量成员变量的区别?...答:局部变量成员变量的区别: 1>局部变量定义在类的方法体,而成员变量定义在类中方法体外的; 2>局部变量能在定义的方法体或者代码块中使用,而成员变量在本类中都可以使用。...为什么? 答:有。 1>方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。 2>方法内部类对象不能使用该内部类所在方法的非final局部变量。...51、静态内部类可以有静态成员,而非静态内部类则不能有静态成员对吗?为什么? 答:对!...因为静态成员在类装载的时候和类一起加载,然而非静态内部类相当于类的局部变量一样,在创建对象的时候才初始化,所以非静态内部类不能有静态成员。 52、何为javabean?

83130

PHPStatic(静态)关键字功能与用法实例分析

但在PHP中用 static 关键字来定义静态方法和属性, 也可用于定义静态变量以及后期静态绑定。 2、为什么要引入static?...因为函数在程序运行中被调用,所以静态数据成员能在任何函数内分配空间和初始化。...这样,它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声明;二是类定义的内部实现,那里有类的成员函数定义;三是应用程序的main()函数前的全局数据声明和定义处。...静态数据成员要实际地分配空间,故不能在类的声明定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在类声明写成定义是错误的。...它也不能在头文件类声明的外部定义,因为那会造成在多个使用该类的源文件,对其重复定义

1.2K41

Java 内部类及其原理

如用private修饰,则只能在外部类的内部访问。 2.局部内部类 局部内部类是定义在一个方法或作用域中的类,它的访问权限仅限于方法内或作用域内。 ? 局部内部类也可以返回,像这样: ?...匿名内部类在编译的时候有系统自动起名:Main$1 匿名内部类是没有构造器的类,大部分用于继承其他类或实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写 4.静态内部类 静态内部类也是定义在另一个类里面的类...静态内部类是不需要依赖于外部类的,与静态成员变量类似。 ?...外部创建该静态类时可以如下创建: Main.Inner mi = new Main Inner(); 内部类实现原理 内部类为什么能够访问外部类的成员定义内部类如下: ?...匿名内部类为什么只能访问局部的final变量

54140

【C++】static关键字及其修饰的静态成员变量函数详解

在 C++ static 的内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员能在任何函数内分配空间和初始化。...静态数据成员要实际地分配空间,故不能在类的声明定义(只能声明数据成员)。类声明只声明一个类的"尺寸和规格",并不进行实际的内存分配,所以在类声明写成定义是错误的。...它也不能在头文件类声明的外部定义,因为那会造成在多个使用该类的源文件,对其重复定义。...静态成员变量和类对象和其成员变量关系如下图: 静态成员变量必须在类外定义定义添加static关键字,类只是声明 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问 静态成员函数没有隐藏的...++ 类对象的销毁数=析构函数静态成员变量++ 类对象的在生命周期数=构造函数静态成员变量-析构函数静态成员变量 设计一个类,在类外面只能在栈/只能在堆上创建对象 如下,我们平常创建类对象的时候

79210

static用法详解

静态数据成员定义时要分配空间,所以不能在类声明定义。...是C++很常用的修饰符,它被用来控制变量的存储方式和可见性。 为什么要引入static?   ...需要一个数据对象为整个类而非某个对象服务,同时又力求破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见。 static的内部机制   静态数据成员要在程序一开始运行时就必须存在。...静态数据成员要实际地分配空间,故不能在类的声明定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在 类声明写成定义是错误的。...它也不能在头文件类声明的外部定义,因为那会造成在多个使用该类的源文件,对其重复定义

1.1K90

《JAVA SE》类与对象的注意事项

声明一个类就是创建一个新的数据类型,而类在 Java属于引用类型, Java 使用关键字 class 来声明类。 ---- 一、字段/属性/成员变量 在类, 但是方法外部定义变量....该类会一开始先加载进内存,随即person类中所有的static变量都会加载到方法区。 3.1.1 方法区 1.类的所有方法都在方法区存储。 2.方法区存储常量和静态变量。...3.1.2 注意事项 (1)问:在JAVA能否在方法定义一个静态变量? 答:不能!方法定义的都是局部变量,在栈存取,一旦方法调用结束,弹出栈帧就会销毁,所以不可以。...因此这导致了两个情况: (1)静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的). (2)this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用...(private关键字也不可以修饰外部类) 3.2.2 为什么main方法是静态方法? 主方法是一个程序的入口,若主方法是成员方法,必须先new一个对象,但入口都不存在何谈new一个对象呢?

23320

JAVA知识基础(四):深入理解static关键字

调用格式: 类名.静态变量名 类名.静态方法名() 如果变量或者方法被 private 则代表该属性或者该方法只能在类的内部被访问而不能在类的外部被方法。...静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问....7、静态导包 静态导包格式:import static 这两个关键字连用可以指定导入某个类的指定静态资源,并且不需要使用类名调用类静态成员,可以直接使用类静态成员变量成员方法 静态导包在书写代码的时候确实能省一点代码...访问静态变量静态方法的两种方法: 静态变量: 类名.静态变量 对象.静态变量(推荐) 静态方法: 类名.静态方法 对象.静态方法(推荐) 静态成员变量虽然独立于对象,但是代表不可以通过对象去访问...this也是可以访问static的变量的! 9、static静态方法 static修饰的方法也叫做静态方法,其实我们最熟悉的static静态方法就是main方法。

33220

Java高频面试题 -- 静态

由于它不是在Java按对象定义的,因此可以节省内存。 2. 为什么用Java创建静态变量不是一个好习惯? 答:静态变量是类的所有对象共有的。 如果创建了新对象,则无需测试静态变量的值。...为什么在Java中将main方法标记为静态方法? 答:Javamain方法被标记为静态,因此JVM可以调用它来启动程序。 如果main方法不是静态的,那么Java进程将调用哪个构造函数?...这时,静态块可作为初始化复杂静态成员变量初始化的工具。 静态块甚至在执行main之前执行。 有时,我们也可以用静态的类方法替换静态块。 6. 是否可以在不定义main()方法的情况下执行程序?...答:,从Java 7开始,您需要main()方法来执行程序。 在Java的早期版本,有一种解决方法可用于使用静态块执行。 但是现在这个差距已经缩小。 7....Java静态方法和实例方法有什么区别? 答:通常,需要为不依赖于对象成员变量的类定义行为。 这种行为是通过静态方法捕获的。

45021

「JAVA」从语法到案例,从定义到使用,详细解释Java 内部类的完全实现

实例内部类不能定义静态成员,只能定义实例成员(非静态成员); 5....静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,还是必须通过外部类的实例去访问。 3. 在静态内部类可以同时定义静态成员和实例成员。 4....不过局部内部类使用的较少,在开发推荐使用。...不能使用public、private、protected、static等这些修饰符; 局部内部类只能在当前方法中使用,作用域范围仅限于当前的方法; 局部内部类和实例内部类一样,不能拥有静态成员,但都可以访问外部类的所有成员...; 局部内部类访问的局部变量必须使用final修饰,在Java 8是自动隐式加上final,但是依然是常量,值不能被改变; 为什么推荐使用局部内部类?

73250
领券