提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
学习面向对象内容的三条主线:
- 1.java类及类的成员:属性、方法、构造器;代码块、内部类
-
2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)
-
3.其他关键字:this、super、static、final、abstract、interface、package、import
一、面向过程和面向对象
- 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
1.面向对象的三大特征:
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
2.面向对象分析方法分析问题的思路和步骤:
- 根据问题需要,选择问题所针对的现实世界中的实体。
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
- 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
- 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
3.面向对象的思想概述
- 可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人
- 面向对象程序设计的重点是类的设计
- 类的设计,其实就是类的成员的设计
二、Java语言的基本元素
- 类(Class):类是对一类事物的描述,是抽象的、概念上的定义
- 对象(Object):对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
- java类的实例化,即创建类的对象
1.类
类的成员:属性、方法、构造器;代码块、内部类
//创建类
class <class_name>{
field;//成员方法
method;//成员方法
}
//实例化对象
<class_name>.<对象名> = new <class_name>;
class为定义类的关键字,class_name为类的名字,{}中为类的主体。
类中的元素称为:成员属性;类中的方法称为:成员方法。
- 属性 = 成员变量 = field = 域、字段 = 实例变量
- 方法 = 成员方法 = 函数 = method
- 建类的对象 = 类创的实例化 = 实例化类
1.1 字段、属性、成员变量
1.语法规则:
- 语法格式:
修饰符 数据类型 属性名 = 初始化值 ; - 说明1: 修饰符
常用的权限修饰符有:private、缺省、protected、public、static、final - 说明2:数据类型
任何基本数据类型(如int、Boolean) 或任何引用数据类型 - 说明3:属性名
属于标识符,符合命名规则和规范即可 - 举例:
class Person {
public String name; //声明public变量 name
private int age;//声明private变量 age
}
2.变量的分类:成员变量和局部变量
- 在方法体外,类体内声明的变量称为成员变量。
- 在方法体内部声明的变量称为局部变量。
- 注意:二者在初始化值方面的异同(见下图):
- 同:都有生命周期
- 异:局部变量除形参外,均需显式初始化
3.成员变量和局部变量的内存位置
示例:
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”);
}
}
4.对象属性的默认初始化值
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了 基本数据类型之外的变量类型都是引用类型,如上面的Person及前面讲过的数组。
成员变量类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0F |
double | 0.0 |
char | 0或写为:’\u0000’(表现为空) |
boolean | false |
引用类型 | null |
5.认识null
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常.
class Person {
public String name;
public int age;
}
class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name.length());//获取字符串长度
}
}
// 执行结果
Exception in thread "main"java.lang.NullPointerException
at Test.main(Test.java:9)
1.2 方法 (method)
1.举例
public void eat(){}
public void sleep(int hour){}
public String getName(){}
public String getNation(String nation){}
2.方法的声明格式:
权限修饰符 返回值类型 方法名(形参列表){
方法体代码程序
return 返回值;
}
3.说明
3.1 权限修饰符,
- 默认方法的权限修饰符都使用public
- java规定的4种权限修饰符:private、public、缺省、protected
3.2 返回值类型
3.2.1.有返回值 vs 无返回值
1.如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量。“return 数据”
2.如果没有返回值,则方法声明时,使用void来表示。通常没有返回值的方法中,就不需要使用return,但是,如果使用的话,只能用“return;”表示结束此方法的意思
3.2.2.定义方法该不该有返回值?
1.看题目要求
2.凭经验,具体问题具体分析
3.3 方法名
- 属于标识符,遵循标识符的规则和规范,做到“见名知意“
3.4 形参列表
- 个数:方法可以声明0个,1个,或多个形参
- 格式:数据类型1 形参1;数据类型2 形参2 …
- 我们定义方法时,该不该不定义形参?
- 看题目要求
- 凭经验,具体问题具体分析
3.5 方法体:方法功能的体现
4.return关键字的的使用:
- 1.适用范围:使用在方法体中
- 2.作用:针对有返回值类型的方法,使用"return 数据"方法返回所要的数据
- 3.注意点:return关键字后面不能声明执行语句
5.方法的调用
- 调用:方法通过方法名被调用,且只有被调用才会执行。
- 方法调用的过程分析
- 注意
- 方法被调用一次,就会执行一次
- 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
- 方法中只能调用方法或属性,不可以在方法内部定义方法。
- 特殊的:方法A中又调用了方法A:递归方法
2.对象
2.1对象的创建
- 创建对象语法:类名对象名 = new 类名();
- 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
举例:
public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
}
public class Zoo{
public static void main(String args[]){
Animal xb=new Animal(); //创建对象
xb.legs=4;//访问属性
System.out.println(xb.legs);
xb.eat();//访问方法
xb.move();//访问方法
}
}
- 说明: 如果创建了一个类的 多个对象,对于类中 定义的属性,每个对 象都拥有各自的一套 副本,且互不干扰。
- 类的访问机制:
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中 定义的成员。
2.2对象的使用
Person p1 = new Person();执行完后的内存状态。其中类定义如下:
class Person{
int age;
void shout(){
System.out.println(“oh,my god! I am ” + age);
}
}
Person对象使用执行完后的内存状态。其中类定义如下:
class PersonTest{
public static void main(String[] args) {
//程序运行的内存布局如下图
Person p1 = new Person();
Person p2 =new Person();
p1.age = -30;
p1.shout();
p2.shout();
}
}