面向对象编程
OO:面向对象
OOP(Object-Oriented Programming):面向对象编程
面向对象编程的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据
对于描述复杂的事务,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向对象的思路去处理。面向过程与面向对象是不可分割的。
抽象:抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象。例如:对于学生管理系统来说,学生对象拥有班级,学号,姓名,性别等属性,这就是一个抽象
三大特性
- 封装
- 继承
- 多态
从认识论角度考虑是先有对象后有类。对象:是具体的事物。类:是对对象的抽象
从代码运行角度考虑是先有类后有对象。类是对象的模板
静态方法与非静态方法的调用
// 静态方法
// 通过方法名.类名进行调用
student.setname();
// 非静态方法
// 实例化这个类之后再调用
student s1 = new student();
s1.setname();
public static void main(String args[]){
// 和类一起加载的
public static void a();{
b(); // 此处会报错,因为a()是随着类加载的,时间片很早,此时b()没实例化,并不会加载,所以调用不存在
}
// 类实例化之后才会存在
public void b(){
}
}
类与对象的关系
类:类是一种抽象的数据类型,他是对某一类事物的整体描述/定义,但是并不能具体代表某一个具体的事物
对象:对象是抽象概念的具体实例
对象是通过引用来操作的:栈 ——> 堆 (栈中存放的只是对象的名称或者引用,实际对象是存放在堆中的)
// Student.java
public class Student{
// 包含的属性,字段
String name;
int age;
String sex;
// 包含的方法
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setSex(String sex){
this.sex = sex;
}
}
// main.java
public class main{
public static void main(String args[]){
Student student = new Student(); // 实例化一个Student对象,名字为student,他拥有Student中的所有属性和方法
student.setName("张三");
student.setAge(21);
student.setSex("男");
System.out.println(student.name); // 张三
System.out.println(student.age); // 21
System.out.println(student.sex); // 男
}
}
属性(成员变量)的默认初始化:
- 数字: 0 0.0(浮点数)
- char:u0000
- boolean:false
- 其他:null
构造器
一个类即使什么都不写,他也会存在一个方法,该方法为构造方法(构造器)
构造器:
- 和类名相同
- 没有返回值
public class Student{
/*
public Student(){ // 默认存在的构造函数(构造器)
}
*/
}
- 使用new关键字,本质是在调用构造器
- 构造器一般用来初始化值
一旦定义了有参构造,无参构造就必须显示定义
// Student.java
public class Student{
public Student(String name){
this.name = name;
}
public Student(){
}
}
// main.java
Student student = new Student(); // 此时如果在Student.java中不存在public Student(){}方法,则会报错
// 一旦定义了有参构造,无参构造就必须显示定义
IDEA中可以使用 alt + insert 来快速构造方法,alt + enter 自动补全代码。
对象的创建和使用
- 必须使用new关键字创造对象,注意构造器的规则
- 对象的属性 student.name
- 对象的方法 student.setName();
类:
- 静态的属性(即:属性)
- 动态的行为(即:方法)