面向对象思想(Object Oriented Programming):
一切客观存在的事物都是对象,万物皆对象。
任何对象,一定具有自己的特征和行为。
特征:称为属性,一般为名词,代表对象有什么。
行为:称为方法,一般为动词,代表对象能做什么。
类的抽取:在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分。
属性:通过变量表示,又称实例变量
语法:数据类型 属性名;
位置:类内部,方法的外部
方法:通过函数表示,又称实例方法。
语法:
public 返回值类型 方法名(形参){
//方法的主体
}
类:
public class Student(){
//属性:
int sid;//学号
String name;//名字
int age;//年龄
// 方法:
public void study(){
System.out.println("study...");
}
}
注意:不再书写static,后续解释。
对象的创建public class Test{
public static void main(String[] args){
Student stu=new Student();//基于Student类创建对象
//访问属性:对象名.属性名
stu.sid=1;
stu.name="张三";
stu.age=18;
//调用方法:对象名.方法名
stu.study();
}
}
类与对象的关系
类是模板,根据模板创建对象。
类:定义了对象具有的特征和行为,类是对象的模板。
对象:拥有多个特征和行为的实体,对象是类的实例。
局部变量必须先赋值再使用,否则编译错误。
实例变量未赋值可以直接访问。
实例变量的默认值:
整数:0
小数:0.0
字符:u0000
布尔:false
其他:null
对于成员变量而言,其赋值和取值访问的先后顺序具有不确定性,对于成员变量可以在一个方法调用前赋值,也可以在方法调用后进行,这是运行时发生的,编译器确定不了,交给jvm去做比较合适。
实例变量和局部变量的区别
| 局部变量 | 实例变量 | |
|---|---|---|
| 定义位置 | 方法或方法内的结构当中 | 类的内部,方法的外部 |
| 默认值 | 无默认值 | 字面值(与数组相同) |
| 使用范围 | 从定义行到包含其的结构结束 | 本类有效 |
| 命名冲突 | 不允许重名 | 可与局部变量重名,局部变量优先 |
对象的实例方法包含两部分:方法的声明和方法的实现。
方法的声明:
代表对象能做什么。
组成:修饰符 返回值类型 方法名(形参列表)
方法的实现:
代表对象怎么做:即如何实现对应的功能。
组成:{}
在有些情况下,对象的同一种行为可能存在多种实现过程。
到底采用哪种实现形式,需要取决于调用者给定的参数。
重载(Overload):一个类中定义多个相同名称的方法。
要求:
- 方法名称相同。
- 参数列表不同(类型、个数、顺序)。
- 与访问修饰符、返回值类型无关。
调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法。
好处:屏蔽使用差异,灵活、方便。
只是参数名称不同构不成方法重载
构造方法:类中的特殊方法,主要用于创建对象。
构造方法:创建并初始化对象
特点:
- 名称与类名完全相同。
- 没有返回值类型。
- 创建对象时,调用构造方法,不可通过句点调用。
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。
对象在栈空间,属性及其所赋的默认值在堆空间中。
把堆空间的地址给栈空间中的对象。
new Student(); 触发对象创建
对象创建过程:
- 开辟空间并为属性赋予默认值。
- 执行构造方法的代码。
- 将对象的地址赋值给变量。
构造方法也可以重载,遵循重载规则。
创建对象时,根据传入参数,匹配对应的构造方法。
向类中添加了带参的构造方法,需要再加上原本的无参构造方法。
在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法。
如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据需求自行添加。
构造方法为属性赋值:
方法一:创建对象的同时,将值传入构造方法。
方法二:由构造方法为各个属性赋值。
类是模板,可服务于此类的所有对象。
this是类中的默认引用,代表当前实例。
当类服务于某个对象时,this则指向这个对象。
第一种用法:调用实例属性、实例方法。
例如:this.name、this.study()
第二种用法:调用本类中的其他构造方法。
例如:this()、this(实参)
this():调用无参构造
this(实参):调用有参构造
注意:必须在构造方法的首行
this()必须是构造方法的首行而且只能调用一次



