IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JAVA面向对象 -> 正文阅读

[数据结构与算法]JAVA面向对象

?面向过程(POP&)面向对象(OOP):

两者都是一种思想,面向对象是相对于面向过程而言的。

面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做

面向对象:将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做

面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法和原则,如:抽象、分类、继承、聚合、多态等。

  • 程序员从面向过程的执行者转化成了面向对象的指挥者

(一)面向对象分析问题的思路和步骤:

  • 根据问题需要,选择问题所针对的现实中的实体
  • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
  • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把构造成计算机能够识别和处理的数据结构
  • 类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具

(二)面向对象的两个要素

  1. 类 :是对一类事物的描述类的设计,其实就是类的成员的设计面向对象程序设计的重点是类的设计
  2. 对象:实际存在的该类事物的每个个体,因而也称为实例(instance)

一、JAVA类及类的成员

(一)JAVA类及类的成员

属性、方法、构造器;代码块、内部类

  1. 属性:对应类中的成员变量
  2. 行为:对应类中的成员方法

类和对象的使用(面向对象思想落地的实现):

? ? ? ? ? ? ? ? ?1.创建类,设计类的成员

? ? ? ? ? ? ? ? ?2.? ?JAVA类的实例化,即创建类的对象

? ? ? ? ? ? ? ? ? ? ? ?创建类的对象 = 类的实例化 = 实例化类

? ? ? ? ? ? ? ? ?3.通过“对象.方法”或“对象.属性”调用对象的结构

Field = 属性 = 成员变量? = 域、字段? ? ? ?Method = (成员)方法 = 函数

public class OOPTest {
	public static void main(String[] args) {
		//创建person类的对象
		Person p1 = new Person();
		//Scanner scanner = new Scanner(System.in)
		
		//调用对象的结构:属性、方法
		//调用属性:“对象.属性”
		p1.name = "Peter";
		p1.isMale = true;
		p1.age = 20;
		System.out.println(p1.name);
		System.out.println(p1.isMale);
		System.out.println(p1.age);
		//调用方法:“对象.方法”
		p1.eat();
		p1.sleep();
		p1.speak("Chinese");
		
	}
}
class Person{
	//属性
	String name;
	int age;
	boolean isMale;
	
	//方法(功能)
	public void eat() 
	{
		System.out.println("人可以吃");
	}
	public void sleep()
	{
		System.out.println("人可以睡觉");
	}
	public void speak(String language) 
	{
		//括号内定义参数
		System.out.println("人可以说话,使用的是:"+language);
	}
	
}

输出结果:

?


(二)对象的创建和使用

1.如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)

//意味着:如果我们修改一个对象的属性a,则不影响另一个对象属性a的值

Person p2 = new Person();
		System.out.println(p2.name);    //未赋值时,结果为null
		
		//将p1变量保存的地址值赋给p3,导致p1和P3指向了堆空间中的同一个对象实体。
		Person p3 = p1;
		System.out.println(p3.name);    //Peter

2.内存解析

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

?

?


(三)类中属性的使用

属性(成员变量)&局部变量

public void talk(String language) {//language是形参,也是局部变量
		System.out.println("我们使用的是"+language+"进行交流");
	}
	public void food(){
		String shiwu = "豆腐脑";//局部变量
		System.out.println("我喜欢吃"+shiwu);
	}

1.相同点:

1.1? 定义变量的格式:数据类型 变量名 = 变量值

1.2? 先声明后使用

1.3? 变量都有其对应的作用域

2.不同点:

2.1? 在类中声明的位置的不同

属性:直接定义在类中的{ }内
局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.2? 关于权限修饰符

属性:可以在声明属性时,指明其权限,使用权限修饰符

常用的权限修饰符:

private? ?public? ?缺省(定义时数据类型前无任何修饰符)? ? protected—>封装性

局部变量不可以使用权限修饰符

2.3? 默认初始化值的情况:
属性:类的属性,根据其类型,都有默认初始化值

整型——byte、short、int、long:0

浮点型——float、double:0.0

字符型——char:0(或'\u0000')

布尔型——boolean:false

引用数据类型(类、数组、接口):null

局部变量:没有初始化值

意味着:在调用局部变量之前,必须要显式赋值

特别地:形参在调用时,赋值即可

2.4? 在内存中加载的位置:

属性:加载到堆空间

局部变量:加载到栈空间


(四)类中方法的声明和使用

方法:描述类应该具有的功能

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

无返回值有返回值
无形参void方法名( ){}返回值的类型 方法名( ){}
有形参void方法名(形参列表){}返回值的类型 方法名(形参列表){}

2.方法的声明

权限修饰符? 返回值类型? 方法名(形参列表){

? ? ? ? ? ? ? ? ? ? ? ?方法体

}

3.说明

? ? ? ? ?3.1? 关于权限修饰符

? ? ? ? ? ? ? ? ?JAVA规定的四种权限修饰符:private? ?public? ?缺省? ?protected

? ? ? ? ?3.2? 返回值类型? ——? 有返回值 & 没有返回值

? ? ? ? ? ? ? ? ?3.2.1? 如果方法有返回值,则必须在方法声明时,指定返回值的类型.同时,方法中需要? ? ? ? ? ? ? ? ? ? ? ? ? ? ?使用return关键字来返回指定类型的变量或常量

? ? ? ? ? ? ? ? ?3.2.2??

二、面向对象的三种特征

(一)封装性

(二)继承性

(三)多态性

*(四)抽象性

三、其它关键字

this? super? static? final? abstract? interface? package? import等

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:27:04  更:2021-09-18 10:29:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:45:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码