Java面向对象之概述及特征
一、面向对象概念
1.1 什么是对象?
万物皆对象。
1.2 什么是面向对象?
面向对象就是指以特征和行为的观点分析现实世界中事物的方式。
1.3 什么是面向对象编程?
面向对象编程就是指先使用面向对象的观点进行分析再使用面向对象的编程语言进行翻译的过程。
其中C语言是一门面向过程的编程语言。
其中C++语言是一门即面向过程又面向对象的编程语言。
其中Java语言是一门纯面向对象的编程语言。
1.4 面向对象与面向过程
- 面向过程(POP) 与 面向对象(OOP)
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 - 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
- 面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)
二、类和对象
1. 类和对象概念
对象主要指现实生活中客观存在的事物,在Java语言主要指内存区域的一块存储空间
类就是"分类"的概念,是多个对象共性提取的抽象描述,里面包含描述特征的成员变量以及描述行为的成员方法组成,是创建对象的模板。
2. 类的声明
(1)类定义的语法格式
修饰符 class 类名 {
属性声明;
方法声明;
}
说明:修饰符public:类可以被任意访问
类的正文要用{ }括起来
如:
public class Person{
private int age ; //声明私有变量 age
public void showAge(int i) { //声明方法showAge( )
age = i;
}
}
注意:
当类名由多个单词组成时,要求每个单词的首字母都要大写。
(2)成员变量定义的语法格式
class 类名 {
数据类型 成员变量名 = 初始值;
//其中初始值可以省略,但分号不可以省略
}
如:
class Person {
String name;
int age;
}
注意:
当成员变量名由多个单词组成时,要求从第二个单词起每个单词首字母大写。
注意:
- 局部变量 : 主要指编写在方法体内部的变量,作用范围从声明开始一直到方法体结束
- 成员变量 : 主要指编写在方法体外类体内部的变量,从声明开始一直到类体结束
(3) 对象的创建
1)语法格式
创建对象语法: 类名 对象名 = new 类名();
使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
如果没有对象名接受对象这表明是匿名对象。
new Person().eat() ; - 表示创建Person类型的对象,匿名对象 调用方法
2)注意事项
a.使用new关键字创建/构造对象的过程叫做 类的实例化;
b.对象创建的本质就是在内存区域的堆区申请一块存储空间,用于记录该对象独有
的特征信息。
3)匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
如:new Person().eat();
使用情况
如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
我们经常将匿名对象作为实参传递给一个方法调用。
(4) 引用的定义
1)基本概念
使用引用数据类型声明的变量 叫做引用型变量,简称为"引用"。
引用变量的定义本质上就是在内存区域的栈区申请一块存储空间,用于记录对象在堆区中的内存地址信息。
2)语法格式
类名 引用变量名;
如:
Person p; - 表示声明Person类型的引用变量名p
Person p = new Person(); - 表示声明Person类型的引用指向Person类型的对象
引用变量名.成员变量名
如:
p.name = "刘备";
System.out.println("我是" + p.name); // 我是刘备
三、对象的使用
1. 对象的生命周期
2. 对象的创建使用的内存解析
- 堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配(也就是new出来的对象)。
- 通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。
- 方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
例如:
实例化
实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概念类,具体到该类实物的过程。
实例化过程中一般由类名 对象名 = new 类名(参数1,参数2…参数n)构成。
四、类的成员
1. 成员变量属性
语法格式:
修饰符 数据类型 属性名 = 初始化值 ;
- 说明1: 修饰符 常用的权限修饰符有:private、缺省、protected、public 其他修饰符:static、final
- 说明2:数据类型 任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
- 说明3:属性名 属于标识符,符合命名规则和规范即可。
举例:
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}
2. 变量
2.1 变量的分类
成员变量
在方法体外,类体内声明的变量称为成员变量。
局部变量
在方法体内部声明的变量称为局部变量。
注意:二者在初始化值方面的异同:
- 同:都有生命周期
- 异:局部变量除形参外,均需显式初始化。
例如:
class Person{//人类
//1.属性 成员变量
String name;//姓名
int age = 1;//年龄
boolean isMale;//是否是男性
public void show(String nation){
//nation:局部变量
String color;//color:局部变量
color = "yellow";
}
}
//测试类
class PersonTest{
public static void main(String[] args){
Person p = new Person();
p.show(“USA”);
}
}
3.方法
3.1 语法格式
class 类名 {
修饰符 返回值类型 成员方法名(形参列表) {
方法体;
}
}
1. 修饰符:public,缺省,private, protected等
2. 返回值类型:
没有返回值:void。
有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用
3. 方法名:属于标识符,命名时遵循标识符命名规则和规范,
“见名知意”形参列表:可以包含零个,一个或多个参数。
多个参数时,中间用“,”隔开
4.返回值:方法在执行完毕后返还给调用它的程序的数据。
如:
class Person {
void show() {
System.out.println("没事出来秀一下!");
}
}
注意:
当成员方法名由多个单词组成时,要求从第二个单词起每个单词的首字母大写。
3.2 方法的详解
(1)返回值类型
返回值主要指从方法体内向方法体外传出的数据内容。
返回值类型主要指返回值的数据类型,可以是基本数据类型也可以是引用数据类型。
如:
- 当返回的数据内容是66时,则返回值类型写为int即可;
- 当返回的数据内容是3.14时,则返回值类型写为double即可;
- 当返回的数据内容是"hello"时,则返回值类型写为String即可;
- 使用return关键字可以返回具体的数据内容并且结束当前方法。
如:
- 当返回的数据内容是66时,则方法体内写 return 66即可;
- 当返回的数据内容是3.14时,则方法体内写 return 3.14即可;
- 当方法体内不需要返回任何数据内容时,则返回值类型写void即可。
(2)形参列表
形式参数主要用于将方法体外的数据内容带入到方法体的内部。
形参列表主要指多个形式参数,
语法格式:数据类型 形参变量名1, 数据类型 形参变量名2, …
如:
-
当传入的数据内容是66时,形参列表写为: int i即可;
-
当传入的数据内容是3.14时,形参列表写为:double d即可;
-
当传入的数据内容是"hello"时,形参列表写为:String s即可;
-
当传入的数据内容是66和3.14时,形参列表写为:int i, double d 即可;
-
当该方法不需要传入任何数据内容时,则形参列表位置啥也不写即可。
(3)方法体
方法体中主要用于编写描述该方法的功能语句。
如:
-
当该方法的功能是打印时,则方法体中写:System.out.println("...");
-
当该方法的功能是计算1+1的和并返回时,则方法体中写:return 1+1 即可;
3.3 方法的调用
方法通过方法名被调用,且只有被调用才会执行。
(1)语法格式
引用变量名.成员方法名(实参列表);
如:
p.show(); - 表示使用引用变量p调用该类型中名字为show的成员方法
(2)注意事项
a.实际参数列表主要用于对形式参数列表进行初始化工作,因此参数的个数、
参数的类型、参数的顺序等都需要保持一致。
b.实际参数可以传递直接量、变量、表达式以及方法的调用等。
注 意:
- 方法被调用一次,就会执行一次 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
- 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
- 方法中只能调用方法或属性,不可以在方法内部定义方法