Ⅰ java中的成员变量不赋值默认是0吗
一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
如果在一个方法中定义一个变量,java不会给其分配默认值,就必须我们来给他初始化,否则将得到编译错误的提示;
Ⅱ java类的成员变量可以直接赋值啊
可以,重要的是在其权限范围内才可以。
package ch05.sample;
public class Clothes
{
String id; //实例变量
private String colorType; //实例变量
private int size; //实例变量
private static String depart; //类变量
final String design="yangzi"; //常量
}
代码中的实例变量、类变量、常量都属于成员变量。
public
成员变量可以被项目中的任何方法访问,建议尽量少用
protected
不在同一个包中的类不能访问,但子类可以访问
private
只能在同一个类中使用
static
类变量,其值为该类的所有对象共享,不会因类的对象不同而不同
final
最终成员变量,其值保持不变,即常量
transient
当对象被持久化时(例如写入数据库),该成员变量的值不需要保存
volatile
同步多线程访问的成员变量的值,以便使不同的线程总是得到
该成员变量的同一个值。
Ⅲ c++中给字符串成员变量初始化
在C++中,使用std::string类创建对象时,默认情况下会初始化为空字符串。如果需要在构造函数中为std::string成员变量提供默认值,可以通过设置默认参数来实现。例如:
定义一个类A,其中包含一个std::string类型的成员变量str。在构造函数中,可以为str设置默认值" ",这样在创建A类对象时,如果没有提供实参,str将被初始化为" "。具体的实现方式如下:
class A {
public:
A(std::string a = " ") : str(a) {}
//在构造函数中加上默认实参初始化为空串,创建对象时,给
//它赋个实参就可以初始化为那个实参了,否则为" "。
private:
std::string str;
};
这样,当创建A类对象时,可以使用如下两种方式:
A obj1; //str初始化为" "
A obj2("hello"); //str初始化为"hello"
如果不提供实参,则str将使用默认值" "进行初始化。通过这种方式,可以灵活地为std::string成员变量提供默认值,提高代码的可读性和可维护性。
需要注意的是,这里的默认实参" "只是一个示例,可以根据实际需求选择合适的默认值。例如,如果希望默认值为空字符串,可以将默认实参设置为""。
此外,在实际开发中,还可以结合其他初始化方法,如使用初始化列表,进一步优化代码结构和性能。例如:
A(std::string a) : str(a) {}
这种方式在初始化成员变量时更加高效。
总之,通过合理设置默认实参,可以方便地为std::string成员变量提供初始化值,从而简化代码逻辑并提高程序的健壮性。
Ⅳ 32 - C++ 的成员初始化列表
构造函数初始化列表是C++中为类成员(变量)设置初始值的一种方法。当我们定义和初始化类时,常常会在构造函数中进行此类操作。初始化成员有两种常见方式,直接在构造函数内或使用成员初始化列表。
以 Entity 类为例,仅有一个 string 类型的 name 成员。我们添加了接受 name 参数的构造函数和一个无参构造函数,分别用以传入特定值和设置默认值。在无参构造函数中,我们通常将 name 设为 "Unknown",但 C++ 提供的另一种初始化方式是成员初始化列表。
在成员初始化列表中,我们可以在构造函数定义后,添加冒号并列出需要初始化的成员及其值。例如,我们可以同时初始化 name 和 m_Score,确保按照类成员的定义顺序进行。这种方式有助于保持构造函数清晰,避免混淆,并在处理大量成员时提高代码整洁度。
然而,直接在函数内初始化成员可能隐藏了性能问题。当在构造函数中多次创建对象时,如 m_Name = "Unknown",这可能导致对象的构造执行两次,造成资源浪费。通过将初始化移到初始化列表,可以避免这种不必要的重复,尤其是在处理复杂类时。
对于整数等基本类型,如果没有显式赋值,它们通常不会被初始化。总的来说,尽管成员初始化列表可能需要适应新的代码风格,但其功能性和性能优势是显而易见的,因此建议在编写C++代码时经常使用。
Ⅳ lombok中的@Builder.Default注解
lombok中的@Builder.Default注解为成员变量赋默认值
(1)只对成员变量设置默认值,builder构造默认值是无效的
如果我们用,java的new操作,是会对Student设置默认值的
但是Builder是无效的
原因在于,编译生成的Student.class文件,保留了成员变量的初始值,但是在StuentBuilder中,只有成员变量,而没有默认值
(2)设置@Builder.Default注解后,通过标识判断是否启用默认值
可以看到编译生成的.class文件,没有对age设置默认值。所以new出现的对象肯定没有设置默认值。
其次,通过引入标识 age$set ,判断是否启用默认值
this.age$set 默认是 false ,只有在
中才对其进行赋值为 true 。
也就是说,如果不调用 Student s = Student.builder().age(4).build(); , age$set 为 false ,执行 Student.$default$age() 方法,设置默认值。否则,获取 this.age 。
。
【总结】
(1)不用@Builder.Default,为成员变量设置默认值,new出来的对象自带默认值
(2)启用@Builder.Default,new出来的对象为空对象,不带默认值
(3)启用@Builder.Default,不设置-> Student.builder().build() ,为默认值
(4)启用@Builder.Default,设置-> Student.builder().age(4).build() ,为设置的值
关键看 Student.class 文件
Ⅵ double java默认初值
基本类型的初始值基本类型默认值:
boolean false
char u0000(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
上面的默认值,是当变量作为类的成员使用时才有的。