面向对象编程 上 (1)
创始人
2024-03-09 04:04:19
0

目录

学习面向对象内容的三条主线

面向过程与面向对象

面向过程(POP) 与 面向对象(OOP)

面向对象的三大特征

例子:人把大象装进冰箱

 面向对象的思想概述

类和对象

面向对象的思想概述

Java类及类的成员

 类的语法格式

 创建Java自定义类

对象的创建和使用

类的访问机制:

对象的产生

 对象的生命周期

内存解析 

 匿名对象

类的成员之一:属性  

语法格式:

成员变量与局部变量

成员变量(属性)和局部变量的区别?

 成员变量vs局部变量的内存位置

 对象属性的默认初始化赋值

 方 法(method)

什么是方法(method、函数):

方法的声明格式:

方法的分类:按照是否有形参及返回值

 方法调用的过程分析

总结


学习面向对象内容的三条主线

  • 1.Java类及类的成员
  • 2.面向对象的三大特征
  • 3.其它关键字

面向过程与面向对象

首先解释一下“思想”。 先问你个问题:你想做个怎样的人? 可能你会回答:我想做个好人,孝敬父母,尊重长辈,关爱亲朋…… 你看,这就是思想。这是你做人的思想,或者说,是你做人的原则。 做人有做人的原则,编程也有编程的原则。这些编程的原则呢,就是编程思想。

面向过程(POP) 与 面向对象(OOP)

二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的 是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等

面向对象的三大特征

  • 封装 (Encapsulation)
  • 继承 (Inheritance)
  • 多态 (Polymorphism)

例子:人把大象装进冰箱

 面向对象的思想概述

程序员从面向过程的执行者转化成了面向对象的指挥者
  • 面向对象分析方法分析问题的思路和步骤:
  • 根据问题需要,选择问题所针对的现实世界中的实体。
  • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
  • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
  • 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具

类和对象

类(Class)和对象(Object)是面向对象的核心概念。
  •  类是对一类事物的描述,是抽象的、概念上的定义
  •  对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
  •  “万事万物皆对象

面向对象的思想概述

可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人
  •  面向对象程序设计的重点是类的设计
  •  类的设计,其实就是类的成员的设计

Java类及类的成员

现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同理,Java代码世界是由诸多个不同功能的类构成的。  现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、… 那么, Java中用类class来描述事物也是如此。常见的类的成员有:
  • 属 性:对应类中的成员变量
  • 行 为:对应类中的成员方法

Field = 属性 = 成员变量,Method = (成员)方法 = 函数

 

 类的语法格式

修饰符 class 类名 { 属性声明; 方法声明; } 说明:修饰符public:类可以被任意访问 类的正文要用{ }括起来
public class Person{
private int age ; //声明私有变量 age
public void showAge(int i) { //声明方法showAge( )
age = i;
}
}

 创建Java自定义类

步骤:
  • 1. 定义类(考虑修饰符、类名)
  • 2. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
  • 3. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

对象的创建和使用

 

  • 创建对象语法: 类名 对象名 = new 类名();
  • 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
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();//访问方法
}
}public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
}
如果创建了一个类的多个对象,对于类中 定义的属性,每个对 象都拥有各自的一套副本,且互不干扰

类的访问机制:

在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static编译不通过。在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员

对象的产生

Person p1 = new Person();执行完后的内存状态。其中类定义如下:
class Person{
int age;
void shout(){
System.out.println(“oh,my god! I am ” + age);}
}

 对象的生命周期

你要没有引用就会被回收 

内存解析 

 

  • 堆(Heap),此内存区域的唯一目的 就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
  •  通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的 各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型, 它不等同于对象本身,是对象在堆内 存的首地址)。 方法执行完,自动释放。
  •  方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。对象的内存解析
Person p1 = new Person();
p1.name = "Tom";
p1.isMale = true;
Person p2 = new Person();
sysout(p2.name);//null
Person p3 = p1;
p3.age = 10;

 匿名对象

我们也可以不定义对象的句柄,而直接调用这个对象的方法。这 样的对象叫做匿名对象。

 

new Person().shout();
  • 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
  • 我们经常将匿名对象作为实参传递给一个方法调用

类的成员之一:属性  

语法格式:

语法格式: 修饰符 数据类型 属性名 = 初始化值 ; 说明1: 修饰符
  •  常用的权限修饰符有:private、缺省、protected、public
  •  其他修饰符:static、final (暂不考虑)
说明2:数据类型
  •  任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
说明3:属性名
  •  属于标识符,符合命名规则和规范即可。
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}

成员变量与局部变量

在方法体外,类体内声明的变量称为成员变量。 在方法体内部声明的变量称为局部变量。

 

注意:二者在初始化值方面的异同:
  • 同:都有生命周期
  • 异:局部变量除形参外,均需显式初始化

成员变量(属性)和局部变量的区别?

 成员变量vs局部变量的内存位置

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”);}
}

 对象属性的默认初始化赋值

当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了 基本数据类型之外的变量类型都是引用类型,如上面的Person及前面讲过的数组。

 方 法(method)

什么是方法(method、函数):

  •  方法是类或对象行为特征的抽象,用来完成某个功能操作在某些语言中也称为函数或过程。
  •  将功能封装为方法的目的是,可以实现代码重用,简化代码
  •  Java里的方法不能独立存在,所有的方法必须定义在类里。
public class Person{private int age;public int getAge() { //声明方法getAge()return age; }
public void setAge(int i) { //声明方法setAgeage = i; //将参数i的值赋给类的成员变量age}
}

方法的声明格式:

修饰符 返回值类型 方法名参数类型 形参1, 参数类型 形参2, ….){ 方法体程序代码 return 返回值;
其中: 修饰符:public,缺省,private, protected 返回值类型:
  • 没有返回值:void
  • 有返回值,声明出返回值的类型。与方法体中return 返回值”搭配使用
  • 方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”
  • 形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开
返回值:方法在执行完毕后返还给调用它的程序的数据

方法的分类:按照是否有形参及返回值

 方法调用的过程分析

方法通过方法名被调用,且只有被调用才会执行

 

  • 方法被调用一次,就会执行一次
  • 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可 以不必使用return语句。如果使用,仅用来结束方法。
  • 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
  • 方法中只能调用方法或属性,不可以在方法内部定义方法。

总结

/*
①
1.java类及类的成员,属性,方法,构造器,代码块 内部类
2.面向对象的三大特征:封装,继承 多态 抽象
3.其他关怀字 this. super. static  final .abstract .interface packge import②
“大象装进冰箱”面向过程:强调的是功能行为,以函数为最小单位 考虑怎么做
1.把冰箱打开 2.把大象放进去 3.关上冰箱面向对象:强调了具体的功能对象 以类、对象为最小单位
人{
打开(冰箱){}
抱起(大象){}
关闭(冰箱){}
}冰箱{打开(){}关闭(){}
}
大象{
进入(冰箱){}
}③ 面向对象的两个要素
类:对一个事物的描述,概念上的定义
对象:是实际存在该类事物的某个个体,因而也称为实例(instance)
面向对象程序设计重点是类的设计④ 设计类就是设计类的成员
属性=成员变量=field=域,字段
方法 =成员方法 函数 methods
创建类的对象=类的实例化=实例化类⑤ 类和对象的使用
创建类 设计类的成员
创建类的对象
同过 对象.属性 对象.方法 调用对象结构⑥ 如果 创建了一个类的多个对象 则每个对象都独立的拥有一套类的属性(非static)意味着 如果我们修改一个对象的属性a,则不会影响另一个对象的属性a⑦ 类中属性的使用属性 成员变量 vs 局部变量相同点定义变量的格式 数据类型 变量名=变量值先声明,后使用变量都尤其对应的作用域不同点1.声明位置的不同成员变量:直接定义在{}内局部变量: 声明在方法内 方法形参 代码块 构造器形参 构造器内部变量2.关于权限修饰符的不同成员变量:可以在生命属性时,指名其权限,使用权限修饰符常用的权限修饰符 private. public. protected 缺省局部变量不可以使用权限修饰符3.默认初始值的情况成员变量 类的属性根据其类型,都有默初始化值整型( byte short int long)0浮点型( float double) 0.0字符型(char) 0或("\u000")布尔型 Boolean false引用数据类型 (类 数组 接口) null局部变量没有默认初始值意味着在调用局部变量之前,一定要显式赋值特别的 形参在调用时我们赋值即可4.在内存中加载的位置成员变量 加载到堆空间(非static)局部变量 加载到栈空间⑧类中方法的声明和使用
方法:描述类应该具备哪些方法
如:Scanner类 获取键盘   Math类 数学类   Arrays 数组类方法的声明 权限修饰符 返回值类型 方法名(形参列表){方法集}注意: static final abstract 来修饰方法的说明权限修饰符java规定四种权限修饰符 private public 缺省 protected返回值类型 :有返回值 vs 无返回值如果方法有返回值在,则必须在方法声明时 指定返回的类型 同时方法中需要使用return关键字返回指定类型的变量或常量如果方法没有返回值 则方法声明时 使用void表示 通常没有返回值的方法中就不需要使用return 如果使用的话 只能“return”表示结束此方法方法名 属于标识符,遵循标识符规则和规范形参列表 方法可以声明 0个 1个 多个(格式 数据类型1 形参1)⑨ return关键字的使用使用范围 使用在方法体中作用:结束方法 针对有返回值的方法 使用return 数据的格式返回数据注意不要使用执行语句⑩ 方法的使用中 可以调用当前类的属性或方法(可以递归调用)方法中不可以在定义方法*/
//测试类
public class person {public static void main(String[] args){//初始化people类的对象people p1=new people();//调用对象的结构属性方法//调用属性 对象.属性p1.name="Tom";p1.isMale=true;System.out.println(p1.name);//调用方法对象.方法p1.eat();//-------------people p2=new people();System.out.println(p2.name);//-------------//将p1变量保存的对象地址赋值给p3 导致p1和 p3指向了同一个堆空间地址people p3=p1;p3.age=18;System.out.println(p1.age);}}
class people{//属性String name;int age=1;boolean isMale;//方法public void eat(){System.out.println("人可以吃饭");}public void sleep( int hour){System.out.println("休息了"+hour +"小时");}public void talk(String languge){System.out.println("人可以吃饭"+languge);}public String getName(){return name;}public String getNation(String nation){String info="我的国籍"+nation;return info}`1
}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...