一、什么是面向对象?
OOP:在java中,一切皆对象,语言实现的操作就是找到对象,使用对象。
而c/c++则是面向过程编程,语言的实现就是实现操作过程,至于操作的是谁,被操作的是谁,则不关心。
例如同样是洗衣服这一个流程,java关心的是什么样的衣服对应什么样的洗衣服方法,至于洗衣服方法内部如何操作,不关心。而c/c++关心的是洗衣服这个过程是怎么样的,先倒水再放洗衣粉再放衣服。
至于深入理解面向对象,放在后面的学习中。
二、类的定义与使用
一个源文件只有一个主类 public class,主类名称必须和源文件名称相同,但可以有很多普通类class。
使用关键字class来定义类
class 类名称{
//属性 成员属性 对象属性
//方法 成员方法 对象方法
}
定于一个dog类:
我们要注意的是 类只是一个模板!没有具体意义。没有具体对象那么这个类中任何属性方法都无法调用。
该类的所有成员属性和成员方法都定义在类中,不同对象的属性和方法表现出来也是不同的,属性和方法和具体对象强相关,这也是面向对象的一种体现。
在java中使用class来定义类的实质就是创建了一个新的类型,比如上图中Dog类,创建后和string类就没有区别。
三、类的实例化
通过类来产生对象,就叫类的实例化 ,使用new关键字来产生对象。
语法格式1:类名称 引用名称 = new 类名称();
产生实例化对象后访问成员属性和方法就和正常的类一样了
例如 dog.name //调用名称属性 dog.color //调用颜色属性
dog.barks //调用叫方法
tips:用人类来类比,人类就是人的一个类,里面存在各种不同的成员属性和成员方法,成员属性我们举例 男 和 女,成员方法我们举例 如果你是女则做饭打扫卫生 和 如果你是男则外出打工。当没有人(对象)存在时,(此处可以理解为你还没有出生)这个类只是一个模板,没有任何意义,而当一个具体的人存在时(你出生了),就可以调用这个类中的属性和方法,比如你是男生,那么就可以调用类中性别属性确定你是男生,然后调用方法 如果你是男则外出打工。这就是具体对象访问类中具体属性和方法。如果换了一个对象比如换成女的,那属性和方法也会一同改变。
那么上图中产生Dog类实例化对象的这个操作叫什么?
叫构造方法!调用构造方法就是为了产生对象,给对象属性做初始化操作。特别的,我们可以在类中定义该类的构造方法,也可以不定义,具体参考构造方法的特点4.
构造方法的几个特点:
1 构造方法名字与类名称相同,无法自定义方法名称 比如上图中new Dog的Dog与类名称Dog一样
2 构造方法没有返回值类型声明,没有void
3 构造方法在创建对象时 ,由编译器自动调用,且只在对象产生时调用一次。
4 如果在定义类时,没有明确定义构造方法,则编译器会自动生成默认的无参构造,若定义了构造方法,则无参构造不再生成。
上图中Dog类中并未定义构造方法,于是编译器自己生成了默认的无参构造。如果自己定义了有参构造,那么在调用构造方法时一定要按照有参构造的格式来调用,否则无效,因为定义后默认的无参构造是不会生成的。
正确写法为 Dog dog = new Dog(n,c);
构造方法调用时JVM干了什么?
1 首先分析Dog类,如果Dog如果已经被加载进内存中(产生对象调用了),那么执行下一步,否则将Dog加载进JVM
2 执行new 在堆上开辟空间
3 调用构造方法为成员属性赋值 构造方法都是在产生对象时才赋值的,就算类中已经定义的属性中存在具体数值,没有对象时也不赋值。(没有具体数值的属性默认值为其数据类型的默认值)。
图一:定义类中属性有具体赋值,但没有调用构造方法产生对象时该值不存在
图二|:当调用构造方法产生无参构造时,产生了对象,则赋值。
总结