Java面向对象--类和对象
面向对象是相对于面向过程而言的,是软件开发方法。面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式。本篇博客介绍Java面向对象的类和对象
目录:
面向对象整体概述
**面向对象概述**
面向过程,强调的
是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
例子:
人把大象装进冰箱

面向对象三大特征
☃ 封装 (Encapsulation)
☄封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
☃ 继承 (Inheritance)
☄继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等
☃ 多态 (Polymorphism)
☄按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
面向对象分析问题的思路
☃ 根据问题需要,选择问题所针对的现实世界中的实体
☃ 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
☃ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序
语言,把类构造成计算机能够识别和处理的数据结构
☃ 将类实例化成计算机世界中的对象
类和对象
类(class)和对象(object)是面向对象的核心概念。
☃ 类是对一类事物的描述,是抽象的、概念上的定义
☃ 对象是实际存在的该类事物的个体,因而也称为实例(instance)
☀ 万事万物皆对象
Java类及类的成员
**常见的类的成员**
☃ 属性:对应类中的成员变量 称呼:属性=成员变量=field=域、字段
☃ 行为:对应类中的成员方法 称呼:方法=成员方法=函数=method
☀ 面向对象程序设计的重点是类的设计,设计类也就设计类的成员
例子:
package ObjectStudy;
public class Person{ //类
static String name; //属性,成员变量
int age; //属性,成员变量
boolean isMarried; //属性,成员变量
public static void run(){ //方法,函数
//执行代码.....
System.out.println("run方法");
}
public String doSomething(){ //方法,函数
//执行代码.....
name = "李四";
return name;
}
//代码块
{
name = "张三";
age = 18;
isMarried = false;
}
//内部类
static class Pet{
String petName;
int petAge;
}
//main方法,代码执行入口
public static void main(String[] args) {
int num; //局部变量
run(); //本类内定义为static的方法可以在main方法中直接调用,也可以new对象后调用
Person person = new Person(); //new一个对象后调用方法或者成员变量
person.age = 21;
Pet p = new Pet(); // new一个对象后调用方法
p.petName = "dfaf"; //调用内部类变量
Person.name = "王五";
Animal.getAnimalName(); //外部类通过类名.方法名()的方式调用static方法或new一个新对象后调用
Animal animal = new Animal();
animal.getAnimalName();
}
}
//外部类,不允许定义为public
class Animal{
static String animalName; //属性,变量
int animalAge;
public static String getAnimalName() { //方法,函数
animalName = "鸽子";
return animalName;
}
}
☀ 通常都是通过new对象的方式调用类中的成员,static在合适的情况下使用较好
☀ (static)静态变量/方法在整个类中使用的是同一块空间,该类的所有对象对静态变量/方法操作的都是同一块空间,操作后其他对象再调用的就是操作后的成员,static的具体使用之后再详细讲解
类的语法格式

创建类的步骤
☃ 定义类(考虑修饰符、类名)
☃ 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
☃ 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
对象的创建和使用
**对象的创建和使用**
☃ 创建对象语法:类名 对象名 = new 类名();
//例如上面的Person类
Person p1 = new Person(); //创建一个新对象
☃ 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
//调用name属性,和run()方法
p1.name = "张三";
p1.run();
☀ 一个类可以new出很多个对象,对象之间互不关联,对当前对象成员的处理不会影响到其他对象的成员,静态成员除外(static定义的成员)

类的访问机制
☃ 在一个类中的访问机制: 类中的方法可以直接访问类中的成员变量,main方法除外
例外:static 方法访问非 static,编译不通过
☃ 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员
例子:
public class Student {
String name;
int age;
static double meter;
public void run() {
System.out.println("跑了" + meter + "米");
}
public String personMessage() {
//在一个类中的访问机制: 类中的方法直接访问类中的成员变量,main方法除外
String message = "姓名:" + name + "年龄" +age;
return message;
}
public static void main(String[] args) {
Student student1 = new Student();
Student student2 = new Student();
student1.name = "张三";
student2.name = "李四";
student1.age = 18;
student2.age = 21;
// student1.age = 24; 错误非静态变量不能直接赋值
student1.meter = 800;
student2.meter = 1000;
meter = 1500;
// Student.meter = 1200; 静态变量可以直接调用不用new对象
student1.run();
student2.run();
System.out.println(student1.personMessage());
System.out.println(student2.personMessage());
}
}
结果:

内存解析

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

匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象
new Student().meter = 3000; //匿名函数调用类变量(静态变量)
new Student().run(); //匿名方法调用成员方法
使用情况
☃ 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
☃ 我们经常将匿名对象作为实参传递给一个方法调用
本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布
Java面向对象--类和对象的更多相关文章
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- Java面向对象——类,对象和方法
1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...
- Java面向对象类与对象整理
第一章 面向对象: 1.1 什么是面向过程: 遇到某件事的时候,思考 “我该怎么做”然后一步一步实现的过程 1.2 什么是面向对象: 遇到某件事的时 ...
- java 面向对象 — 类和对象
构造方法 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器 ...
- Java面向对象~类和对象&方法,类方法
面向对象 概念: 1.同一类事物的抽象描述,不是具体的 2.类和对象的关系: 类 是抽象的. 对象 是具体的. 3.对象的体征,称为"属性&q ...
- Java面向对象---类与对象的关系
类是对某一类事物的描述,是抽象的.概念上的意义.对象是实际存在的该类事物的每一个个体,也被称为实例. 创建对象:包括声明对象和实例化对象 Person person;//声明 person = new ...
- Java面向对象 类与对象与方法的储存情况
栈.堆.方法区 类(含方法)储存在方法区 main函数入栈 堆里面存储方法区中类与方法的地址 main函数调用方法,找堆里面方法的地址,再从方法区找到对应函数,函数入栈,用完出栈 总结: 1.类.方法 ...
- Java面向对象--类的对象之间的几种关系详解
转载: https://www.cnblogs.com/supren/p/7853377.html
- Java面向对象——类的成员
Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...
随机推荐
- 单源最短路 Bellman-Ford算法(有向图)
// 单源最短路问题 // Bellman-Ford算法 // 复杂度O(V*E) //! 可以判断负圈 #include <cstdio> #include <iostream&g ...
- opencv —— Sobel 一阶导数算子、Scharr 滤波器 一阶导数用于边缘检测
sobel 算子的基本概念 sobel 算子是一个主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度. 其基础来自于一个事实,即在边缘部分,像素值出现“跳跃”或 ...
- 自动驾驶定位算法-直方图滤波(Histogram Filter)定位
1.直方图滤波(Histogram Filter)的算法思想 直方图滤波的算法思想在于:它把整个状态空间dom(x(t))切分为互不相交的部分\(b_1.b_2....,b_{n-1}\),使得: 然 ...
- MySQL概述及入门(三)
MySql概述及入门(三) MySQL性能优化 主要优化安全和性能方面 安全方面 : 数据可持续性 性能方面 : 数据的高性能访问 性能优化——慢查询 在MySQL数据库中有一个慢查询日志功能,去获取 ...
- LCT[Link-Cut-Tree学习笔记]
部分摘抄于 FlashHu candy99 所以文章篇幅较长 请有足够的耐心(不是 其实不用学好splay再学LCT的-/kk (至少现在我平衡树靠fhq) 如果学splay的话- 也许我菜吧-LCT ...
- 报表生成(POI,jquery.table2excel.js,Echarts)
最近公司要弄个报表相关的功能,话不多说,先上图 前一种是POI 生成的,后一种是Echarts生成的.报表我想大家都不陌生,基本上在公司业务中都会使用到.先说说POI,jquery.table2exc ...
- Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学
于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...
- go 总结常用函数
golang截取字符串 对于字符串操作,截取字符串是一个常用的, 而当你需要截取字符串中的一部分时,可以使用像截取数组某部分那样来操作,示例代码如下: package main import &quo ...
- Vue与原生APP的相互交互
现在好多APP都采用了Hybrid的开发模式,这种模式特别适合那些内容变动更新较大的APP,从而使得开发和日常维护过程变得集中式.更简短.更经济高效,不需要纯原生频繁发布.但有利肯定有弊咯,性能方面能 ...
- MySQL 8 mysql system schema
在大的分类上:mysql schema包括存储数据库对象元数据的数据字典表和用于其他操作目的的系统表 数据字典表和系统表一般使用InnoDB存储引擎 与之前的版本不同,数据字典表和系统表存储在数据目录 ...