类class和对象object是面向对象的核心概念。
类是对一类事物的描述,是抽象的,概念上的定义。
对象是实际存在的该类事物的每个个体。因此也称为实例。
java用类描述事物,定义类其实就是定义类中的成员和变量它包括
属性:对应类中的成员变量 Field=属性=成员变量
行为:对应类中的成员方法 Method=(成员)方法=函数
变量分类
在方法体外,类体内申明的变量称为成员变量。
在方法体内申明的变量称为局部变量。
局部变量除形参外,需要显示的初始化。成员变量有默认初始化值。
方法
方法是类和对象行为特征的抽象,也成为函数。
java的方法不能单独存在,必须存在于类型。
return语句传递返回值。没有返回值的是void
栈
对象的引用 局部变量
堆
new出来的东西(包括成员变量)
对象的创建和使用
使用new + 构造器 创建一个新的对象
使用“对象名.对象成员” 的方式访问对象成员(包括属性和方法。)
如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
类的访问机制
在一个类中访问机制:类中可以直接访问类中的成员变量。(static方法访问非static方法会编译出错。)
在不同的类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
匿名对象
我们可以不定义对象的句柄,直接调用对象的方法。这样子的对象叫匿名对象。
new Person().eat();
如果对一个对象只需要进行一次方法调用可以使用匿名方法。经常把匿名对象作为实参传递给一个方法调用。、
方法的重载
在同一个类中,允许存在一个以上的同名方法,只要他的参数个数或者参数类型不同
与返回值类型无关,只看参数列表,且参数列表必须不同来区别。
可变个数的形参
使用和数组类似,并且在系统内部取数据的时候,采用的就是数组封装的。
因此这样子的两个方法不能构成重载
method(String[] arg) method(String …arg)
封装和隐藏
使用者对类内部定义的属性直接操作会导致数据的错误混乱或者安全性问题。可以隐藏属性,然后对外部提供公共的方法进行操作。这样可以隐藏一个类不需要对外提供实现的细节。可以在公共的方法中加入一些实现逻辑,踢除和控制不合理的部分,便于修改,增加代码的可维护性。
类的成员:构造器
具有和类相同的名称,不声明返回值类型(与void不同),不能被static final synchronized abstract native修饰。
根据参数不同,构造器可以分为下面两种
隐式的无参数构造器(系统提供)
显式定义的构造器,包括有参数和无参数。
当显式定义一个构造器后,系统不会再为之生成默认的构造器。
父类的构造器并不能被子类继承,
java中,每个类至少有一个构造器,没有显式定义的,系统会自动生成一个无形参的。
this
他在方法内部使用,即这个方法所属的对象的引用;
他在构造器内部使用,表示该构造器正在初始化的对象。
this总是指向指向当前对象,即当前正在操作本方法的对象。
this表示当前对象,可以调用类的属性,方法和构造器。
当在方法内需要调用该方法的对象时,就用this
当形参和成员变量重名时,如果在方法内部需要使用成员变量。必须添加this表明该变量是类成员变量。
public Person(String name){
this.name = name;
}
在任意方法内,如果当前类的成员变量或者成员方法可以在其面前添加this,增强程序的可读性。
public void test(){
this.hello();
}
public void hello(){
}
表明。在test方法里,需要使用当前对象的成员方法hello();
this可以作为一个类中,构造器互相调用的特殊格式(只能放在首行和super一样。)