5.9 this关键字
使用this可以强调本类中的方法,除此之外this还有:
(1)表示类中的属性。
(2)可以使用this调用本类的构造方法。
(3)this表示当前对象。
5.9.1 使用this调用本类中的属性
5.9.2 使用this调用构造方法
如果一个类中有多个构造方法,,可以利用this关键字互相调用。
class Person44{
private String name; //姓名
private int age; //年龄
public Person44() { //无参构造
System.out.println("一个新的Person对象被实例化。");
}
public Person44(String name,int age) {
this.name=name; //为name属性赋值
this.age=age; //为age属性赋值
this();//错误的调用,只能放在构造方法的首行
}
public String getInfo() { //取得信息
this();
return "姓名:"+name+",年龄:"+age;
}
}
以上程序编译时出错,因为this()只能放在构造方法的首行。
另外,对于this()调用构造方法的时候一定要留一个构造方法作为出口,即程序中至少存在一个构造方法是不使用this调用其他构造方法的。
5.9.3 this表示当前对象
关于当前对象的解释。
现在假设有张三、李四、王五3个人在谈话,如果现在说话的人是张三,则“当前正在说话的人”就是张三;以此类推,所以只要是“当前正在说话的人”,那么就表示是当前对象。
5.10 static 关键字
从前面的讲解的概念中,如果使用一个类要分别开辟栈内存及堆内存,在堆内存中要保存对象中的属性,每个对象有每个对象自己的属性,如果现在有些属性希望所有对象共享,则就必须将其声明为static属性。如果一个类中的方法不想由对象,而是由类名称直接调用,则就可以声明为static方法。
5.10.1 使用static声明属性
如果在程序中使用static声明属性的话,则此属性称为全局属性(有些也称静态属性)。
Java中常用的内存区域。
在Java中主要存在4块内存空间,这些内存空间的名称及作用如下:
(1)栈内存空间:保存所有的对象名称(更准确的说是保存了引用的堆内存空间的地址)。
(2)堆内存空间:保存每个对象的具体属性内容。
(3)全局数据区:保存static类型的属性。
(4)全局代码区:保存所有的方法定义。
类的公共属性应该由类进行修改是最合适的,因为用户不知道一个类到底有多少个对象产生。把使用static声明的属性称为类属性。
类属性调用
类名称.static属性
5.10.2 使用static声明方法
static既可以在声明属性的时候使用,也可以用来声明方法,用它声明方法有时也被称为“类方法”,可以由类名称直接调用。
关于static方法定义的说明。
在实际的开发之中,如果要定义一个类中的方法。一般都会以非static方法(普通方法)为主,而定义为static方法一般只有一种情况:此方法不希望通过实例化对象进行调用,那么此时会有两种因素:
(1)本类没有提供有普通属性,这样产生实例化对象没有意义;
(2)本类无法直接进行对象实例化,只能够利用static操作。
需要说明的是。非static声明的方法可以去调用static声明的属性或方法的。但是static声明的方法是不能调用非static类型声明的属性或方法的。
static是不能调用任何非static内容的,因为在程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名所调用。
5.10.3 static的相关应用
static属性是所有对象共享的,那么就可以使用static属性统计一个类到底产生了多少个实例化对象。
可以使用static为对象进行自动编名操作。
5.10.4 理解main方法
public:表示此方法可以被外部调用。
static:表示此方法可以由类名称直接调用。
void:主方法是程序的起点,所以不需要任何的返回值。
main:系统规定好默认调用的方法名称,执行时默认找到main方法名称。
String args[]:表示的是运行时的参数。参数传递的形式为“Java类名称 参数1 参数2 参数3···”。
使用static定义方法的补充。
如果一个方法要由主方法直接调用,则必须按以下格式声明:“public static 方法的返回值类型 方法名称(参数列表){}”。