1.面向对象思想概述
面向过程:当要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
面向对象:当要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事。
2.类与对象
一个类包含成员变量(属性)和成员方法(行为)
public class student {
// 成员变量直接定义在类当中,在方法外面
String name;
int age;
// 成员方法不要写static关键字。
public void eat(){}
public void sleep(){}
public void study(){}
}
// 通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。
// 步骤:
// 1.导包:也就指出需要使用的在什么位置
// import 包名.类名称;
// 对于当前和当前类属于同一个包的情况,可以省略包语句不写。
// 2.创建:
// 格式:类名称 对象名 = new 类名称();
// 3.使用:
// 分为两种情况:
// 使用成员变量名:对象名.成员变量名
// 使用成员方法:对象名.成员方法名(参数)
// 也就是说想用谁,就用对象名点儿谁
// 注意事项:如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样
public class Demo2Student {
public static void main(String[] args){
Student stu = new Student();
System.out.println(stu.name);// null
System.out.println(stu.age);// 0
// 改变对象当中的成员变量数值内容
// 将右侧的字符串,赋值交给stu对象当中的name成员变量
stu.name = "123";
stu.eat();
}
}
当一个对象作为参数,传递到方法当中时,实际上传递进去的是对象的地址值。
- 成员变量与局部变量的不同:
- 定义位置不一样。局部变量定义在方法内部,成员变量定义在方法外部,直接写在类当中。
- 作用范围不一样。局部变量只有在方法当中才能使用,出了方法就不能再用。成员变量在整个类全都可以用。
- 默认值不一样。局部变量没有默认值,若想使用,必须手动赋值。成员变量如果没有赋值,会有默认值,规则和数组一样。
- 内存位置不一样。局部变量位于栈内存。成员变量位于堆内存。
- 生命周期不一样。局部变量随着方法进栈而诞生,随着方法出栈而消失。成员变量随着对象创建而诞生,随着对象被垃圾回收而消失。
- 标准的类格式如下:
- 所有的成员变量都要使用private关键字修饰
- 为每个成员变量编写一对Getter/Setter方法
- 编写一个无参数的构造方法
- 编写一个全参数的构造方法
满足上述条件的类叫做JavaBean
3.访问控制
- 一旦成员变量和成员方法被private修饰,那么在本类中依然可以访问。超出本类后就不能访问了。
- 通过Setter/Getter方法可以用于向私有成员变量设置值和获取私有成员变量的值。
- bool类型的成员变量的get方法要写成isXXX的形式
- 当方法的局部变量和类的成员变量重名时,根据就近原则,优先使用局部变量。如果需要访问本类的成员变量,需要使用格式:this.成员变量名。通过谁调用的方法,谁就是this。
4.构造方法
- 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
- 格式为
public 类名称(参数类型 参数列表){ }
- 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。
- 构造方法不要写返回值类型,连void也不要写。所以构造方法不能return一个具体的返回值。
- 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法什么事情都不做。就像:
public student(){ }
。一旦写了至少一个构造方法,那么编译器将不再赠送。此时如果没有定义没有参数的构造方法,那么在新建对象时,不传入参数,就会报错。 - 构造方法是可以进行重载的。