JAVA中可以定义匿名对象, 调用方法匿名对象有意义, 调用属性就没有意义了;
当对对象的方法只调用一次, 可以使用匿名对象, 这样比较方便, 当对一个对象的成员进行多次调用, 则需要给这个对象起一个名字;
private: 私有, 权限修饰符, 用于修饰类中的成员(成员变量, 成员函数), 私有旨在本类中有效;
在JAVA的类中,当你没有定义自己的构造函数的时候, 类中有一个合成的无参数的默认构造函数, 但是当你自己定义了构造函数之后, 这个系统合成的无参数的默认构造函数就不存在了, 因为编译器只有在发现类不包含任何构造函数的情况下才会替我们生成一个默认的构造函数, 一旦我们定义了一些其他的构造函数, 那么除非我们再定义一个默认的构造函数, 否则没有构造函数, 这条规则的依据是: 如果一个类在某种情况下需要控制对象的初始化, 那么该类很可能在所有情况下都需要控制;
JAVA里面有一个构造代码块, 这个代码块是给Class初始化用的, 这个构造代码块没有名字, 构造代码块是对象一建立就运行, 而且优先于构造函数执行, 和构造函数的区别是: 构造代码块是给所有对象进行统一初始化, 而构造函数时给对应的对象初始化。
在JAVA中的构造函数的参数名称如果和对应要初始化的成员变量名字不一致的话, 那么就会让人误解, 不知道这个参数是用来给哪个成员变量赋值的, 但是如果参数名称和对应要赋值的成员变量名称完全一致的话, 那么在构造函数体内部就会无法访问成员变量, 举个例子:
Car(int num)
{
num = num;
}
这个Car类, 有一个成员变量是num, 现在传入一个参数给这个构造函数, 然后希望传入参数的这个num,能给Car的成员变量num赋值, 但是在这个构造函数内部, num = num, 这两个num实际上都是这个构造函数的参数(这个原理实际上就是和C里面的先定义一个全局变量i, 然后我再for循环里面在定义一个局部变量i, 那么在for循环里面访问到的就是这个局部变量i, 而不会是那个全局变量), 所以导致的结果就是Car类的成员变量num并没有被赋值, 为了解决这个问题, 我们可以将左边的num改为this.num, 这样就表示我这个num是类的成员变量num了,
在JAVA的类里面如果一个大的构造函数调用另一个小的构造函数(大的构造函数表示参数多,小的构造函数参数相对较小), 不像调用普通的函数形式一样(函数名 + 参数列表), 而是直接this(参数列表)的形式, 注意, 只有一个构造函数调用另一个构造函数的时候才能这么写, 这是调用函数的一个特例!
前面讲到了在同一个类里如果一个构造函数里面要调用另一个构造函数那么要用this来调用, 这里还有一个规则, 就是这个this构造函数必须要放到调用这个this的构造函数的第一行(是不是意味着一个构造函数里面只能调用一个构造函数了? )
|
|