Java 初始化类中的变量

Java 初始化类中的变量,java,c++,class,Java,C++,Class,我正在学习计算机工程,我的第二学期刚刚开始。我制作Android应用程序已经有一段时间了 我的编程讲师教导C++面向对象说,除非我们使用构造函数,否则我们不能初始化类中的变量,因为在生成该类的对象之前没有对这些数据成员的内存。p> 他说这是不正确的: class example { int a = 0; }; class example { int a = 0; } 但我的经验告诉我们: 我在我的Android项目中创建了一个保持常量的类。我不做那个类的任何对象。

我正在学习计算机工程,我的第二学期刚刚开始。我制作Android应用程序已经有一段时间了

我的编程讲师教导C++面向对象说,除非我们使用构造函数,否则我们不能初始化类中的变量,因为在生成该类的对象之前没有对这些数据成员的内存。p> 他说这是不正确的:

class example
{
       int a = 0;
};
class example
{
       int a = 0;
}
但我的经验告诉我们:

我在我的Android项目中创建了一个保持常量的类。我不做那个类的任何对象。我初始化过变量,从未使用过构造函数。但它工作得很好:

public class Constants {

       public static final int a = 1;

}
我想知道在没有专用于变量的内存的情况下如何初始化变量,以及它是如何工作的

我的故事哪一部分是错的?我想知道当没有专用于变量和常量的内存时,我的代码是如何工作的

他说这是不正确的:

class example
{
       int a = 0;
};
class example
{
       int a = 0;
}
嗯,是的,它是不正确的,在结尾,在}之后需要有一个分号

使用分号,这是合法的C++11;=0是非静态数据成员初始值设定项NSDMI(简称)。它是在构造函数中执行等效初始化的静态糖

静态的东西是每个类的,即使没有创建该类的对象也存在。非静态的东西是每个对象的

他说这是不正确的:

class example
{
       int a = 0;
};
class example
{
       int a = 0;
}
嗯,是的,它是不正确的,在结尾,在}之后需要有一个分号

使用分号,这是合法的C++11;=0是非静态数据成员初始值设定项NSDMI(简称)。它是在构造函数中执行等效初始化的静态糖

静态的东西是每个类的,即使没有创建该类的对象也存在。非静态的事物是每个对象。

真理 类内初始值设定项在C++11中变得合法;因此,从你所说的话中得出的唯一结论是,你的老师生活在过去

然而,如果他教授的是C++03,而不是该语言的更高版本,那么他认为它的格式不正确是正确的

需要注意的是,他所说的关于非静态数据成员及其在实际创建此类对象之前缺乏存储的内容仍然适用

类内初始值设定项将在构造期间初始化数据成员,只要数据成员未在所用构造函数的mem初始值设定项中初始化,则后者优先

struct A {
  A () = default;
  A (int x)   : m (x) { }
  int m = 0; // ^ mem-initializer
};
进一步阅读 真相 类内初始值设定项在C++11中变得合法;因此,从你所说的话中得出的唯一结论是,你的老师生活在过去

然而,如果他教授的是C++03,而不是该语言的更高版本,那么他认为它的格式不正确是正确的

需要注意的是,他所说的关于非静态数据成员及其在实际创建此类对象之前缺乏存储的内容仍然适用

类内初始值设定项将在构造期间初始化数据成员,只要数据成员未在所用构造函数的mem初始值设定项中初始化,则后者优先

struct A {
  A () = default;
  A (int x)   : m (x) { }
  int m = 0; // ^ mem-initializer
};
进一步阅读
@ BULB你是说java把记忆存储在一个类中而不是制作一个对象吗?@ BLUB我刚刚编辑了我的问题。你的指导老师正在教一些过时的C++。@ BLUB,你是说java把记忆存储在一个类中的变量而不做一个对象吗?@ BLUB我刚刚编辑了我的问题。你的指导老师正在教一些过时C++。