面向对象的主要内容
Java类及类的成员:属性,方法,构造器;代码块, 内部类
面向对象的特征:封装, 继承,多态
其他关键字的使用:this, super, package,import,static, final,abstract, interface等
1.1面向过程和面向对象的程序设计思想
面向过程(Process Oriented Programming):Oriented 发音:奥润忒的
面向对象(Object Oriented Programming):
1.2类(Class)和对象(Object)
类:对具有相同特征的一类事物的抽象描述
对象:在实际上具体存在的,对象又被称为类的实例;
类的内部成员:
属性(Field)又称为 成员变量,字段,域。
方法(Method)又称为函数。
1.3面向对象完成具体功能的三大步骤
-
创建类。
-
创建类的对象。
-
对象调用属性和方法。
下面是举例说明
//Ps:下面一共有两个类 //1. 创建Phone类 public class Phone { //1.1 设计类的属性 String name;//属性:手机品牌 //1.2 设计类的方法 public void call() { System.out.println("手机能够拨打电话"); } public void sendMessage(String message) { System.out.println("发送信息:" + message); } } //Phone的测试类:PhoneTest public class PhoneTest { public static void main(String[] args) {//main方法也是方法 //2. 创建Phone的第一个对象 Phone phone1 = new Phone(); //3. 通过Phone的对象去调用属性和方法,格式为: 对象.属性,对象.方法 //(1)调用属性 phone1.name = "hua wei mate50";//给属性赋值 System.out.println("name = " + phone1.name); //(2)调用方法 phone1.call(); phone1.sendMessage("你好,华为!"); //创建Phone的第二个对象,这里要说明的是: 每一个对象的属性都互不干扰,独立存在 //即如果修改第一个对象的属性,而第二个类的属性不会改变。具体看下面图1.1 Phone phone2 = new Phone(); phone2.name = "IPhone6" System.out.println("name = " + phone2.name); System.out.println("name = " + phone1.name); } } 补充://创建完类的对象后,即使不给对象的属性赋值,也有默认值 byte short int long char 的默认值是 0; float double 的默认值是 0.0; boolean 的默认值是 false; 引用数据类型的默认值是 null;
图1.1
对图1.1 的解析:
栈帧:存入栈中的一个方法,这里只有一个main()方法,所以只有一个栈帧,如果在main()方法里调用其他的方法,则其他的方法按照顺序入栈成为一个栈帧
-
main()方法入栈,局部变量中的形参args 首先存入到main()方法这个栈帧中。
-
Person对象的变量 p1 存入main栈帧, 通过new创建Phone类的变量,同时在堆中为其开辟一块内存空间 ,空间内存储了对象p1的成员变量 name,age,gender, 这片空间的首地址值赋给变量p1。
-
然后通过对象p1.的方式调用属性name,age为其赋值;
-
再往后就重复2,3步,需要注意的是:每创建一个对象,都要在堆中为其开辟一片内存空间。
”创建一个的对象“ 指的是new出来的对象,如 Phone p2 = new Phone(); ,而 Phone p3 = p2这样的根本不叫创建了一个新的对象,这是直接赋值引用。 p1,p2 只是变量而已,只不过这个变量我们声明存储的是Person对象的首地址值,就int a ,我们声明a中存储的数据是int类型。真正的对象存储在堆中,p1作用:我们利用其存储的对象地址 通过“p1.”的方式 来调用对象的属性和方法。
java变量分类图,来源于https://blog.csdn.net/qq_43842093/article/details/127200896,具体可以看看这个。
1.4对象在内存的结构解析
栈: 方法内定义的变量,Ps:main方法也是方法,所以在程序入口main方法内定义的phone1,phone2 存入栈中
堆:new出来的结构(即对象或数组),包括对象里面的属性,即上面Phone类对象中的name属性
方法区:存放类的模板(类就相当于创建对象的模板)
在程序入口main方法内定义的phone1,phone2 存入栈中
堆:new出来的结构(即对象或数组),包括对象里面的属性,即上面Phone类对象中的name属性
方法区:存放类的模板(类就相当于创建对象的模板)