面向对象
什么是面向对象
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。
但是,具体到微观事物的操作,我们仍然会使用面向过程的思路去处理。
面向对象的本质是:以类的方式组织代码,以对象的方式(组织)封装数据。
三大特性:
- 封装
- 继承
- 多态
从认识的角度考虑是先有对象后有类。对象,是具体的事物,类,是抽象的,是对对象的抽象。
值传递
public static void main(String[] args) {
int a = 1; //实际参数
System.out.println(a); //1
change(a);
System.out.println(a); //1
}
public static void change(int a) { //形式参数
a = 10;
}
虽然说main方法中调用了change方法,但是change方法无返回,实际上形式参数得到数值之后向下执行,又回到了主方法,实际参数a并不会进行任何改变。
引用传递
public class PassByReference {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person);
change(person);
System.out.println(person);
}
public static void change(Person person) {
person.name = "Ayin";
}
}
class Person{
String name;
}
在change方法中,person参数是一个对象,指向的是person这个类(new Person),将person.name传递给了Person person = new Person();通过指向该类,来改变Person类中name这个属性。
创建与初始化对象
- 使用new关键字创建对象
- 使用new关键字的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及对类构造器中的引用。
- 类的构造器也被称作为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回值,也不能写void
public class Student {
//默认的初始化
String name;//null
int age;//0
public void study() {
System.out.println(this.name + "在学习");
}
}
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.name = "Ayin";
student.study();
}
}
构造器
在idea中,java文件即使写了一个完全为空的类,在测试类里也可以进行该类的实例化对象,因为在生成的.class文件中,默认增加了一个构造方法。即:一个类即使什么都不写,也会存在一个方法(构造器)!
作用:
- new本质在调用构造方法
- 初始化对象的值
注意:定义有参构造之后,如果想使用无参构造,必须显示定义一个无参的构造。
public class person {
String name;
int age;
public person() {
}
public person(String name) {
this.name = name;
}
public person(String name, int age) {
this.name = name;
this.age = age;
}
}