Java面向对象之类和对象
一、面向对象概述
Java是完全的面向对象编程(Object Oriented Programming),简称OOP
。
面向对象编程的思维方式更加符合大家的日常生活,因为我们的现实世界都是由各种各样的对象组成,大到飞机、火车、楼房,小到一只狗、笔记本电脑、一本书都是实实在在的对象。然而每个对象都有自己的状态和行为,我们可以通过对象来完成一定的任务。
例如:我们乘坐飞机从深圳飞到湘西去旅游,我们可以直接使用飞机的飞行能力,而不用管飞机这个对象是如何制造的。直接使用即可。
使用面向对象的方式来描述由对象组成的世界,更加符合人类的思维方式;
因为软件出现的目的就是为了:
- 用计算机的语言描述现实世界
- 用计算机解决现实世界的问题
Java是目前最为流行的面向对象的编程语言(Python可能不服),拥有面向对象的四大特征:
- 封装:隐藏内部实现细节,对外提供可访问的方法
- 继承:子类自动继承父类中所有的非私有属性和方法
- 多态:同一事物,多种不同的表示形态,例如:重载、重写
- 抽象:可以不用管具体的实现,定义统一的抽象规则
面向对象编程是Java的核心思想,但是对于初学者来说,学习起来还是比较抽象。所以建议初学者可以配合书籍一起学习,反复观看,从而掌握其中精华。
二、类
2.1 类的概述
类是Java应用程序中,必不可少的单位;创建类的关键字是:class
; 其实我们在之前的学习过程中已经接触过类,只是没有专门单独的拿出来讲。
例如:
- 以下创建了一个名称叫
Test01
的类 - 在类中定义了一个
main()
方法,也是程序的入口
public class Test01{
public static void main(String args[]){
//创建并且赋值
int score2[] = {100,90,88,85,66};
for(int i = 0;i<score2.length;i++) {
System.out.print(score2[i]+"\t");
}
}
}
所以创建类,也没有那么复杂。掌握其基本语法,然后根据自己的需求进行创建即可。
Java作为一门高级语言,我们除了可以创建自己定义的类以外,还内置了许多预定义好的类。
例如:
- Scanner
- Math
- String
2.2 预定义类
所谓预定义类,就是Java语言根据实际业务场景,帮我们预定义好的类。我们只需要掌握如何使用,不需要再去额外创建。
常用的预定义类:
例如:
- Scanner :键盘输入
- Math :数学相关类
- String :字符串类
- Date :时间日期相关类
- List :集合类
Java提供的预定义类有点多,好在提供了帮助文档,我们可以根据帮助文档查看:https://www.matools.com/api/java8
后面有章节专门来研究常用的预定义类。
2.3 发现类的过程
1、宠物—现实生活中的对象
如何在计算机中描述它?
世界上具体宠物对象,特别多。那么我们如何用计算机语言来描述这么多宠物对象,如果一个个描述我们肯定是做不到的;所以我们需要掌握其中的规律来对其进行划分。
从现实中抽象出类分为三步走:
- 第一步:找出它们的种类
- 第二步:找出它们的属性
- 第三步:找出它们的行为
2、第一步:找出他们的种类
根据以上信息,找出狗的种类;
Java使用的是class
关键字来描述类;
//创建一个名为Dog的类
class Dog{
}
3、第二步:发现类的特征
我们可以根据每个对象,抽取出他们相同的特征(属性);但是任何一个对象都会有多个特征
例如:Dog狗类的特征有
虽然特征很多,但是实际我们只存放我们所需要的特征(属性):
class Dog {
String name = "旺财"; // 昵称
int health = 100; // 健康值
int love = 0; // 亲密度
String strain = "拉布拉多犬"; // 品种
}
4、第三步:发现类的方法
类的方法也可以称为行为
,是动态的。每个方法都可以看出是一个独立的功能
和属性一样,我们存放的也是我们所关心的行为
class Dog {
String name = "旺财"; // 昵称
int health = 100; // 健康值
int love = 0; // 亲密度
String strain = "拉布拉多犬"; // 品种
/* 输出狗的信息 */
public void print() {
// 输出狗信息的代码
}
}
经过以上三个步骤,我们就可以创建一个完整的类。以及指定了类中包含的属性和方法。
2.4 类的组成
通过以上发现类的过程,我们可以看到类的基本组成:
//语法格式:
[< 修饰符>] class < 类名>
{
[<属性声明>]
[<构造器声明>]
[<方法声明>]
[{代码块}]
}
1、属性
定义属性:语法
//语法
[修饰符] 数据类型 属性名称 = [初始值]; //例如
public String name = "来福"; //创建了一个属性,并且给初始值
修饰符:
-
public
: 表示公共的,访问权限最大的,整个项目中都可以访问 -
private
: 表示私有的,访问权限最小的,再能在当前类中访问
数据类型:
- 数据类型可以是8种基本数据类型,也可以是引用数据类型
- 属性的初始值取决数据类型。
int默认值是0
、String默认值是null
属性名称:
- 属性也称为全局变量
- 只需要符合基本的命名规则和规范即可
2、方法
也称为行为,正常一个方法表示一个具体的功能。例如:跑、吃、睡觉
//语法:
[修饰符] 返回值类型 方法的名称([参数列表]){
//方法体。就是该方法的具体功能
} //案例
public void show(String name){
System.out.println("我的名字是:"+name);
}
方法组成的四要素:
- 返回值
- 方法名称
- 参数列表
- 方法体
组成方法的四要素,缺一不可。
2.1 返回值
该方法执行完毕之后,把值返回给方法的调用者
- 必须定义返回值的具体的类型,如果没有返回值使用void修饰
- 如果有具体的返回值,必须在语句块中使用return语句
//没有返回值
//1.使用void修饰
//2.不用使用return
//3.方法的调用者不能使用变量接收内容
public void add(int num1,int num2) {
int sum = num1+num2;
}
//有返回值的情况
//1.固定返回值类型
//2.方法体后面必须使用return关键字返回具体的数字
//3.方法执行之后的结果,可以使用变量保存起来
public int desc(int num1,int num2) {
int d = num1-num2;
return d;
}
2.2 方法名称
只是一个标识符,符合命名规则和规
规范:
- 驼峰命名规则; 首个单词首字母小写,之后每隔单词首字母大写 getUserByName();
- 见名知意
2.3 参数列表
定义方法的时候,参数是可选的。
- 形参列表:(形式参数),只是负责定义参数,以及参数的类型和名称。但是该参数每页实际的值
- 实参列表:方法的调用时候
//定义方法
// num1,num2表示连个形参
//语法:数据类型 参数名,多个参数之间使用逗号隔开
public int desc(int num1,int num2) {
int d = num1-num2;
return d;
}
//方法调用
//abc:变量,接收方法的返回值
//50,20:具体的实参,实参数据类型,个数,顺序必须和形参要一致
int acb = p1.desc(50,20);
2.4 方法体
{}表示方法体,也是方法具体的业务实现
public int desc(int num1,int num2) {
//具体的业务 根据场景不同。具体 也不同
int d = num1-num2;
return d;
}
3、构造方法
3.1 构造方法特征
它具有与类相同的名称;
它不含返回值,也不需要使用void
关键字修饰
一个类中可以拥有多个构造方法
public class Person{
public Person(){
//默认无参构造
}
public Person(String name){
//定义有参构造
}
}
3.2 构造方法作用
按照指定的规则来创建对象,完成对象的初始化工资;(给所有的属性赋值)
//注意: 构造方法不能使用void修饰,否则就是普通方法。丧失了构造方法的作用
//构造方法通过new 关键字 调用。不能通过对象调用 :
new Person(); //调用Person无参构造
new User("zhangsan", "深圳华美居", "110"); //调用有参数构造
3.3 构造方法注意
- Java语言中,每个类都至少有一个构造方法;
- 如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默认的构造方法:
- Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;
- 构造器的主要作用:利用构造器参数初始化对象的属性。
public Person(String name,int age){
this.name = name;
this.age = age;
}
2.5 类图
描述整个类的信息;
- 用于分析和设计“类”
- 直观、容易理解
三、对象
1、简介
- 万物皆对象,所有的东西都是一个对象
- 对象是类的具体实现,一个类可以创建任意多个对象
- 每个对象其实都是一个副本,对象与对象之间互不干涉
- 关键字:
new
- 使用:
- 对象名.属性名 -->student.username
- 对象名.方法名() --->student.eat();
2、创建对象的语法
new + 构造方法() : 例如: new Dog(); new Person();
特殊的方法:
a.不需要返回值 b.方法名和类名一致;
3、类的访问机制
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
4、匿名对象
-
我们也可以不定义对象的引用,而直接调用这个对象的方法。这样的对象叫做匿名对象, 如:
new Person().shout();
如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
我们经常将匿名对象作为实参传递给一个函数调用
Java核心基础第5篇-Java面向对象_类和对象的更多相关文章
-
Java核心基础第2篇-Java基本语法
Java基本语法 本章一起来探讨下Java的基本语法.主要从以下几个方面展开: Java关键字 Java标识符 Java变量 Java数据类型 Java运算符 学完本章内容之后,我们对Java会有更深 ...
-
Java核心基础第3篇-Java流程控制
Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...
-
Java核心基础第4篇-Java数组的常规操作
Java数组 一.数组简介 数组是多个相同类型数据的组合,实现对这些数据的统一管理 数组属引用类型,数组型数据是对象(Object) 数组中的元素可以是任何数据类型,包括基本类型和引用类型 数组类型是 ...
-
python基础-第七篇-7.1初识类和对象
创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...
-
Java核心基础第1篇-走进Java世界
一.Java简介 1.1 Java概述 Java从一开始就以友好的语法.面向对象.内存管理和最棒的跨平台可移植性来吸引程序员. 写一次就可以在所有地方执行( write-once/run-anywhe ...
-
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
-
Java编程基础阶段笔记 day01 Java语言概述
目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir : 列出当 ...
-
Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
-
oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...
随机推荐
-
excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法
在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...
-
4.4、Libgdx用法查询执行环境相关性
(原版的:http://www.libgdx.cn/topic/46/4-4-libgdx%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E6%9F%A5%E8%AF%A2% ...
-
DM二维码识别库DMDECODER的使用--MFC例程
DM码和QR码是当今比较主流的二维码,其中QR码容量大,容量密度为16kb,DM码容量要小一点,可在仅仅25mm²的面积上编码30个数字,但是DM码的容错率更高,所以实际的工业生产中经常使用DM码作为 ...
-
jquery 中时间的运用
运用Moment插件比较方面,有兴趣可以仔细阅读 http://momentjs.cn/
-
Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
-
FFMpeg首次使用
FFMpeg在Windows上的使用.去FFMpeg官网上去下载文件. 把下载好的文件放如下图所示的位置. cmd,调出系统的命令行工具.首先进入d盘. 进入到ffmpeg所在的文件夹. 运行 ffm ...
-
基于am3358的lcd输出
/*#include<stdio.h> */ #include <unistd.h> #include <stdio.h> #include <stdlib. ...
-
Redis 学习笔记4: Redis 3.2.1 集群搭建
在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...
-
iView -- TimePicker 自定义修改时间选择器选择时间面板样式
iView官方组件展示效果: 期望的最终效果: 为什么要修改期望效果? 项目需要只选择小时,分钟跟秒的不需要,而官方并没有直接相关的小时组件或者是设置显示成小时或分钟或秒的时间选择器,因为自己直接修改 ...
-
Leetcode 993. 二叉树的堂兄弟节点
993. 二叉树的堂兄弟节点 显示英文描述 我的提交返回竞赛 用户通过次数195 用户尝试次数229 通过次数195 提交次数462 题目难度Easy 在二叉树中,根节点位于深度 0 处,每个深 ...