1.面向过程和面向对象
1)面向过程(c语言是面向过程语言)
面向过程是有具体的操作步骤,一步一步实现,适合简单,不需要太多协作的情况
2)面向对象(JAVA是面向对象语言)
面向对象是从宏观上把握,分析整个系统
3)面向过程和面向对象的区别和联系
1、都是解决问题的思维方式,都是代码组织的方式。
2、解决简单问题可以使用面向过程
3、解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。
2.对象和类
1)对象和类的定义
对象:客观存在的实体(个体)
类是对相同特征和共同行为的对象的抽象
注:类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。
2)类的基本组成(一个Java文件可以同时定义多个class)
对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。
2.1)属性定义格式:[修饰符] 数据类型 变量名;
注:1.属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。
2.在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量有默认值
整型:0
浮点型:0.0
字符型:\n0000
布尔型:false
引用类型:null
2.2)方法定义格式:[修饰符] 返回值类型 方法名(形式参数列表){
方法体;
}
方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
编程代码
运行结果
2.3)构造器(构造器也叫构造方法,用于创建该类的对象)
构造方法的作用:
通过构造方法来创建(new)对象
构造方法的特征
1.构造方法的方法名必须和类名相同
2.构造方法没有返回值类型,注意void也是一种返回值类型
3.使用new 关键字调用构造方法
编程代码
运行结果
注:编写的类如果没有显式定义构造方法,程序在编译时会自动添加一个无参构造方法,一旦显式有定义构造方法,在编译时不再自动添加无参构造
构造方法也可以发生重载,(有参构造方法和无参构造方法就构成了方法的重载)
编写代码及运算结果
this关键字代表当前对象本身,可以使用this区分局部变量和成员变量
3)创建对象:
1.创建对象 类名 对象名 = new 类名();
2.访问(调用)成员变量 对象名.属性名=赋初值(前面已经声明过变量类型);
3.3.访问(调用)方法 对象名.方法名();
编写代码及结果
编写代码及结果
对应的UML图如下
3.面向对象的内存分析
栈,堆,方法区
1)栈
栈里面存储局部变量
特点:
1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
3. 栈属于线程私有,不能实现线程间的共享!
4. 栈的存储特性是“先进后出,后进先出”
5. 栈是由系统自动分配,速度快,栈是一个连续的内存空间
2)堆
堆里面存储使用new关键字创建的对象
特点:1. 堆用于存储创建好的对象和数组(数组也是对象)
2. JVM只有一个堆,被所有线程共享
3. 堆是一个不连续的内存空间,分配灵活,速度慢
3)方法区
方法区里面存储字符串常量
特点:
1. JVM只有一个方法区,被所有线程共享!
2. 方法区实际也是堆,只是用于存储类、常量相关的信息!
3. 用来存放程序中永远是不变或唯一的内容