面向对象编程 上 (1)

news2024/11/25 20:36:09

目录

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

面向过程与面向对象

面向过程(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,是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的 各种基本数据类型(booleanbyte、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、缺省、protectedpublic
  • 其他修饰符:staticfinal (暂不考虑)
说明 2 :数据类型
  • 任何基本数据类型(intBoolean) 或 任何引用数据类型。
说明 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) { //声明方法setAge
    age = 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
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022最新的护眼灯怎么选?护眼台灯到底有用吗

众所周知,人眼能看到各种事物,都是由于光线照射到物体身上,然后反射进入人眼成像,但是如果光线不合理或者不合适,那么进入人眼的光线就会对造成巨大的伤害。所以护眼灯到底有没有用,就在于其发出的光线能不…

【python与数据分析】实验十三 北京市空气质量

目录 一、实验内容 二、完成情况 三、数据分析 1.问题描述 2.编程思路 3.程序代码 4.程序运行结果 (1)2014年-2019年AQI时间序列折线图 (2)各年AQI折线图、AQI直方图、PM2.5与AQI散点图、空气质量整体情况的饼图 ​&am…

关于虚数与复数

关于虚数与复数1 数的分类1.1 实数域1.2 虚数与复数2 复数的性质及其运算2.1 复平面、大小及辐角2.2 复数四则运算2.3 共轭复数2.4 复数的极坐标表示3 欧拉公式3.1 欧拉公式证明3.2 利用欧拉公式表示极坐标3.3 欧拉公式推导三角函数加法定理4 复数的性质、乘法和除法运算和极坐…

catia基本操作

1.2CATIA的基本操作_哔哩哔哩_bilibili ctrl鼠标中键 视图放大缩小 alt鼠标中键 视图平移 Alt Enter 性质 4、中键可以平移图形 中键和左键(或右键)可以实现旋转 按下中键,再按右键,放开右键,拖动鼠标&#xff…

【阿里云】阿里云跨账号内网互通

阿里云VPC对等连接提供连通两个VPC的网络连接,您可以使用私有IP地址直接通信,两个VPC就像在同一个网络中一样。您可以与自己同地域或者跨地域其他VPC之间创建对等连接,也可以与其他账号的同地域或者跨地域VPC之间建立对等连接,同地…

PHP基于thinkphp的旅游见闻管理系统#毕业设计

随着旅游行业的不断发展,各家旅游行业之间的竞争日益激烈,旅游部门所需的信息量越来越大,业务操作中涉及的各种线路情况、用户情况以及旅游协作部门的情况越来越复杂多变。而除了一些个别地区已采用了的旅游网站,一般通常是以原始的手工方式处理/新闻资讯。但是工作人员若仅靠手…

JavaEE Spring MVC 常用注解

RequestMapping ⽤来注册接⼝的路由映射。当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。 Controller //类注解不能忘 RequestMapping("/webcontroller") public class WebController {RequestMapping("/say…

CSDNtop1全栈接口测试教程 jmeter接口测试,接口自动化测试【2】

延时等待(全局性) api 测试⽤例执⾏速度⾮常快,某些时候因为业务的特性想让它延迟⼏秒执⾏,那么这个时候就使⽤延时等待。 参数化 可以理解为:⼀个测试点需要多次操作,并且每次操作数据都是不⼀样但测试步…

机器学习4超参数问题

文章目录一、超参数问题11、超参数:2、如何寻找好的超参数?二、超参数问题2综上所述三、超参数问题3搜索明可夫斯基距离相应的p;更多关于距离的定义:欧拉距离曼哈顿距离进一步推广可以发现其中有一定一致性明可夫斯基距离:&#x…

全网最全(万字整理)_SpringBoot整合ThymeLeaf

文章目录SpringBoot整合Thymeleaf0x01_入门案例0x02_Thymeleaf视图解析简介0x03_Thymeleaf的表达式0x04_Thymeleaf的标签th:textth:eachth:objectth:hrefth:actionth:onclickth:ifth:value0x05_内置对象#dates#Strings#Numbers域对象0x0x_补充一些概念国际化Thymeleaf缓存区重定…

01-09-hive-入门基本概念-hive-mysql安装

01-hive-入门基本概念: 什么是hive hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xf…

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2271 完全立方数32. MT2272 质数率3. MT2273 元素共…

如何修复 Windows 11/10上的 0x8007023e Windows 更新错误

修复 0x8007023e 错误 运行 Windows Update 疑难解答重置 Windows Update 组件使用 DISM 工具修复 Windows Update 客户端从 Microsoft update Catalog 网站下载并安装更新运行 Microsoft 支持和恢复助手系统更新根据 Windows 质量更新服务节奏发布到 Windows 设备。如果当您尝…

zookeeper学习(一)zk特性与节点数据类型详解(2022)

Zookeeper是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题。从设计模式角度来理解其实zk是一个基于观察者模式设计的分布式服务管理框架。 CAP理论: cap理论指出对于一个分布式计算系统来说,不可能同时满足以下三…

COMSOL泰森多边形Voronoi图多孔骨架优化模型受力分析

Voronoi模型 在comsol内建立泰森多边形骨架支撑网格,模型采用一般的多边形泰森多边形孔隙以及样条曲边泰森多边形孔隙做对比研究,分析模型在承受压力荷载下的应力分布。通过comsol的固体力学计算可看出拟圆形Voronoi孔隙支撑结构的应力分布更为合理&…

【LIMU-Bert论文阅读】

LIMU-BERT: Unleashing the Potential of Unlabeled Data for IMU Sensing Applications 题目重点: 充分利用无标签数据适用于IMU传感器应用(并没有指出specfic task) 文章核心: 如何根据IMU数据的特征设计出LIMU-Bert&#xff0c…

基于模糊逼近系统不确项的滑模自适应控制

目录 前言 1.系统描述 2.控制器设计 3.模糊推理估计不确定f 3.1构造模糊系统 3.2模糊推理过程 3.3 自适应律设计 4.仿真分析 4.1仿真模型 4.2仿真结果 5.总结 前言 在一般的建模仿真中,我们假设模型都是可以用数学模型描述出来的是确定的,称…

1. 一些截图方法的比较;2. 将截图直接转换为PDF并拼接,与插入Word后再转换为PDF的对比

1. 一些截图方法的比较 1.1. 有时候当某个软件没有导出功能,或者导出功能受限,比如 tableau public,但又需要获取展示出的可视化信息时,就需要用到截图。如果这些截图还要用在正式文档中,就需要是高清的,至…

Python预测卡塔尔世界杯身价最高的英格兰要夺冠?!

文章目录🏳️‍🌈 1. 数据🏳️‍🌈 2. 绘图2.1 绘制表头2.2 绘制排名、球队以及国旗2.3 绘制身价柱状图2.4 绘制FIFA排名散点图2.5 设置背景2.6 设置标题🏳️‍🌈 3. 更多可视化项目源码数据:大…

关于 find 命令的15个超级有用的例子

find 命令用于在 Linux 命令行中搜索文件和目录。 find 是功能最强大、使用最频繁的命令之一,同时也是选项最多的命令之一,它有50多个选项,很容易让人弄混了,特别是当它与 exec 或 xargs 命令一起使用的时候。 作为系统管理员或…