Java 全方位讲解面向对象特点与使用

目录
  • 面向过程和面向对象的区别
  • 类和对象的关系
  • 类和对象的创建
    • 类的创建
    • 对象的创建
    • 构造器
    • 构造器重载
    • this的使用
    • static修饰
    • 代码块
    • 包(import)

面向过程和面向对象的区别

面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体步骤和过程,注重的是过程中的具体行为,以函数为最小单位,考虑怎么做。

面向对象:注重找“参与者”,将功能封装进对象中,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

案例:小明从冰箱里拿东西

面向过程:

面向对象:

面向过程 —> 面向对象 , 其实就是由执行者 —> 指挥者的 一个过渡

类和对象的关系

万物皆对象

对象:具体的事物,具体的实体,具体的实例,模板下具体的产品

类:对对象向上抽取出像的部分,公布部分,形成类,类是抽象的,是一个模板,一般在写代码的时候先写类,然后再根据类创建对应的对象

类是对象的抽象,对象是类的实例化

类和对象的创建

类的创建

1.属性(field 成员变量)

属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。

属性定义格式:

[修饰符] 属性类型 属性名 = [默认值];

2.方法

方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

方法定义格式:

[修饰符] 方法返回类型 方法名(形参列表){

​ //Java语句

}

我们以上面王者荣耀英雄类创建为例:

//创建英雄类
public class Hero {
    //属性
    String Name;//英雄姓名
    int Survive;//生存能力
    int Attack;//攻击伤害
    int Skill;//技能效果
    int Difficulty;//上手难度

    //技能
    public void Kill(int number){
        //根据输入的数字释放几技能
        System.out.println(Name+"释放"+number+"技能!!!");
    }
    //输出该英雄的属性
    public void print(){
        System.out.println("英雄:"+Name);
        System.out.println("生存能力:"+Survive);
        System.out.println("攻击伤害:"+Attack);
        System.out.println("技能效果:"+Skill);
        System.out.println("上手难度:"+Difficulty);
    }

}

对象的创建

接下来我们对我们创建好的类来创建对象

public class TestCode01 {
    //main方法,程序的入口
    public static void main(String[] args) {
        //创建一个对象(英雄)-->马克波罗
        Hero make = new Hero();
        make.Name = "马克波罗";
        make.Survive = 4;
        make.Attack = 6;
        make.Skill = 6;
        make.Difficulty = 5;
        //再创建一个英雄-->澜
        Hero lan = new Hero();
        lan.Name = "澜";
        lan.Survive = 3;
        lan.Attack = 5;
        lan.Skill = 4;
        lan.Difficulty = 6;
        lan.Kill(1);
        //输出两个英雄的属性
        make.print();
        System.out.println("-------------");
        lan.print();
        //释放技能
        make.Kill(3);
        System.out.println("-------------");
        lan.Kill(2);
    }
}

结果: 每个英雄都有相同的属性,每个属性又有不同的值,通过类我们可以创建很多个对象,每个对象又有不同的属性值。

比如:王者里的一百多个英雄,每个都有不同的特点。

创建对象的过程:

(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。

(2)创建对象,在堆中开辟空间

(3)对对象进行初始化操作,属性赋值都是默认的初始值。

(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值

构造器

对象都是new出来的,new关键字实际上在调用一个方法,这个方法叫做构造方法(构造器)

调用构造器的时候,如果你的类中没有写构造器,那么系统会默认给你分配一个构造器(空构造器)

构造方法格式:

[修饰符] 构造器名字(){

}

构造器和方法的区别:

  • 没有方法的返回值
  • 方法体内部不能有return语句
  • 构造器的名字很特殊,必须跟类名一致

构造器的作用:不是为了创建对象,因为在调用构造器之前,这个对象就已经创建好了,并且属性有默认的初始化的值。

调用构造器的目的是给属性进行赋值操作的。

注意:我们一般不会在空构造器中进行初始化操作,因为那样的话每个对象的属性就一样了。

下面例子:

class Hero{
    //属性
    String Name;//英雄姓名
    int Survive;//生存能力
    int Attack;//攻击伤害
    int Skill;//技能效果
    int Difficulty;//上手难度

    public Hero(){
        Survive=4;
        Attack=5;
        Skill=6;
        Difficulty=7;
    }
    public void print(){
        System.out.println("英雄:"+Name);
        System.out.println("生存能力:"+Survive);
        System.out.println("攻击伤害:"+Attack);
        System.out.println("技能效果:"+Skill);
        System.out.println("上手难度:"+Difficulty);
    }
}
public class TestCode01 {
    public static void main(String[] args) {
        //创建两个英雄对象
        Hero make = new Hero();
        make.Name="马克";
        Hero lan=new Hero();
        lan.Name="澜";
        //输出两个属性
        make.print();
        lan.print();
    }
}

因为我们在构造器里面赋值了,所以我们创建对象的时候属性就一样了

实际上,我们只要保证空构造器的存在就可以了,里面的东西不用写,我们要用构造器赋值就要对构造器重载

构造器重载

一般保证空构造器的存在,空构造器中一般不会进行属性的赋值操作

一般我们会重载构造器,在重载的构造器中进行属性赋值操作

在重载构造器以后,假如空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错了。所以我们重载构造器时,一般要保留默认构造器

当形参名字和属性名字重名的时候,会出现就近原则:在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象

this的使用

this就是指当前的对象

this可以修饰属性

当属性名字和形参发生重名的时候,或者 属性名字 和局部变量重名的时候,都会发生就近原则,所以如果我要是直接使用变量名字的话就指的是离的近的那个形参或者局部变量,这时候如果我想要表示属性的话,在前面要加上:this.修饰(如果不发生重名问题的话,实际上你要是访问属性也可以省略this.)

this修饰方法

在同一个类中,方法可以互相调用,this.可以省略不写。

this可以修饰构造器

同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行

static修饰

static可以修饰:属性、方法、代码块、内部类

static修饰属性

在类加载的时候,会将静态内容也加载到方法区的静态域中,静态的内容先于对象存在,并且这个静态内容被所有该类的对象共享。

  • 在类加载的时候一起加载入方法区中的静态域中
  • 先于对象存在
  • 访问方式: 对象名.属性名 类名.属性名(推荐)

static修饰属性的应用场景:某些特定的数据想要在内存中共享,只有一块 -->这个情况下,就可以用static修饰的属性。

static修饰方法:

  • static和public都是修饰符,并列的没有先后顺序,先写谁后写谁都行
  • 在静态方法中不能使用this关键字
  • 在静态方法中不能访问非静态的方法
  • 在静态方法中不能访问非静态的属性
  • 静态的方法可以用 对象名.方法名去调用 也可以 用 类名.方法名 (推荐)
  • 在同一个类中可以直接调用静态方法

代码块

代码块的分类: 普通块、构造块、静态块、同步块(多线程)

代码块执行顺序: 最先执行静态块–>再执行构造块,(不常用)–>再执行构造器–>再执行方法中的普通块

public class Test {
    //属性
    int a;
    static int sa;
    //方法
    public void a(){
        System.out.println("-----a");
        {
            //普通块限制了局部变量的作用范围
            System.out.println("这是普通块");
            System.out.println("----000000");
            int num = 10;
            System.out.println(num);
        }

    }
    public static void b(){
        System.out.println("------b");
    }
    //构造块
    {
        System.out.println("------这是构造块");
    }
    //静态块
    static{
        System.out.println("-----这是静态块");
        //在静态块中只能方法:静态属性,静态方法
        System.out.println(sa);
        b();
    }
    //构造器
    public Test(){
        System.out.println("这是空构造器");
    }
    public Test(int a){
        this.a = a;
    }
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        Test t = new Test();
        t.a();
        Test t2 = new Test();
        t2.a();
    }
}

包(import)

包的作用: 为了解决重名的作用,解决权限问题

包名的定义:

  • 名字全部小写
  • 中间用.隔开
  • 一般都是公司域名倒着写:com.jd 、com.taobao
  • 加上模块名字 :com.taobao.login
  • 不能使用系统中的关键字:null
  • 包声明的位置一般都在非注释代码的第一行

导包:

(1)使用不同包下的类要需要导包, 例如:import java.util.Date;

(2)在导包以后,还想用其他包下同名的类,就必须要手动自己写所在的包。

(3)同一个包下的类想使用不需要导包,可以直接使用。

(4)在java.lang包下的类,可以直接使用无需导包

(5)可以直接导入*

静态导入:

//静态导入:
import static java.lang.Math.*;
//导入:java.lang下的Math类中的所有静态的内容

public class Test {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
        System.out.println(round(5.6));
    }
    //在静态导入后,同一个类中有相同的方法的时候,会优先走自己定义的方法。
    public static int round(double a){
        return 1000;
    }
}

到此这篇关于Java 全方位讲解面向对象特点与使用的文章就介绍到这了,更多相关Java 面向对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java面向对象继承与多态介绍

    目录 一.概述 二.继承 2.1 继承的概述 2.2 继承机制 2.3 类中属性,方法的继承与覆盖 2.4 super 关键字 三. 多态 总结 一.概述 面向对象程序设计的三大原则是封装性,继承性和多态性.继承性是子类自动共享父类的数据和方法的机制,它是由类的派生功能体现的.继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组件新的类,便于代码的重用.而多态是指不同类型的对象接收相同的消息时产生不同的行为,这里的消息主要是对类成员函数的调用,而不同的行为是指

  • Java十分钟精通包装类的使用与操作

    包装类 何为包装类? 基本类型包装类的概述: 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据 包装类是将基本数据类型的值包装为Java中的对象,Java语言为8种基本数据类型分别提供了包装类 首先看一下八大数据类型的包装类: 包装类型出现的原因: 因为Java是一个面向对象的语言,基本类型并不具有对象的性质,为了与其他对象"接轨"就出现了包装类型,它相当于将基本类型"包装起来",使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本

  • Java面向对象之类的继承介绍

    目录 继承的作用 如果没有继承机制是怎么样的? 使用继承机制后的示例? 类的继承是什么? 子类和父类的继承机制 Java单继承 Java继承的顶级父类:Object 对象的类型转换 对象向上转型 对象向下转型 总结 继承的作用 如果没有继承机制是怎么样的? 有以下两个类,分别是Student.Teacher,它们的实现类如下: /** * 老师类 封装了姓名.年龄 * * @author Administrator * */ public class Teacher { private Stri

  • Java 深入浅出解析面向对象之抽象类和接口

    目录 抽象类 声明抽象类 声明抽象方法 案例 使用规则 接口 声明接口 案例 接口特性 抽象类和接口的区别 抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类. java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法. 声明抽象类 声明抽象类很简单,加个abstract关节字就行. public abstract class AA { } 声明抽象方法 在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说

  • 理解Java面向对象编程设计

    目录 1 前言 2 结构化程序设计 3 面向对象编程设计 4 码农洞见 4.1 两种编程范式之间的区别 4.2 两种编程范式之间的联系 1 前言 计算机革命的起源来自机器.编程语言就像是那台机器.它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分.语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作.编程语言就是创建应用程序的思想结构. 面向对象编程(Object-Oriented Programming OOP)是一种编程思维方式和编码架构. 2 结构化程序设计 结

  • 学生视角看Java 面向对象的继承本质

    1.什么是继承? (1)用来提高代码的复用性 (2)将相同的功能模块封装到方法中需要使用时调用方法达到代码复用的目的 (3)通过继承将多个类中的相同的类容摘取出来,变成一个新类,让其他类和当前的新类产生关系,达到代码复用性的目的 注意:Java是单继承与c++有区别 ,c++可以多继承. 2.继承的格式 关键字extends 3.继承的特性 *子类拥有父类非 private 的属性.方法. *子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. *子类可以用自己的方式实现父类的方法. *Ja

  • Java十分钟理清面向对象与类的核心

    什么是对象? 一切客观存在的事物都是对象 对象的组成 属性.行为 类是什么? 类是对大量对象共性的抽象 类是客观事物在人脑中的主观反映 类是创建对象的模板 类的组成 属性.行为 简单的说,一个类就是把公有的特征写在一起,然后由这个类创建的对象,都会都这个属性. 例如人这个类 属性会吃饭,会说话.我们就是对象,我们属于人这个类,因此我们也会吃饭说话. Java中类的定义 语法: public class Student{ //在这里面写成员属性.成员方法 } //Student就是这个类的名字,这

  • Java 全方位讲解面向对象特点与使用

    目录 面向过程和面向对象的区别 类和对象的关系 类和对象的创建 类的创建 对象的创建 构造器 构造器重载 this的使用 static修饰 代码块 包(import) 面向过程和面向对象的区别 面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体步骤和过程,注重的是过程中的具体行为,以函数为最小单位,考虑怎么做. 面向对象:注重找“参与者”,将功能封装进对象中,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做. 案例:小明从冰箱里拿东西 面向过程: 面向对象: 面向过程 —>

  • Java窗口精细全方位讲解

    目录 一.新建简单窗口 二.编写窗口中的按键 三.简单的按键运行 1.流布局管理器: 2.静态文本框: 四.窗口画图 五.窗口鼠标响应 六.总结 好了,stop! 我们呢 咳咳咳 下面呢 也就直接进入正题!!! 一.新建简单窗口 在java中新建窗口将会用到"java.awt",大家可以参见API文档 import java.awt.*; //包含用于创建用户界面和绘制图形图像的所有类. 这是API文档的下载链接: API下载地址 我呢用的是Notpad++进行编写的,所以就用这个直接

  • Java由浅入深讲解继承上

    目录 1.什么是继承 2.继承的细节 2.1super关键字 2.2子类的构造方法 2.3super和this区别 继承同样是面向对象程序的特点 1.什么是继承 所谓继承就是抽取类的共性,进而实现代码的复用 继承的关键字是extends 现在定义一个类Tree,里面有树的名字.来源和科属,方法是打印树的形态特征,如下: class Tree { String name; String source; String genu; public void trait() { } } 上面的类除了方法t

  • Java全面分析面向对象之继承

    目录 继承 什么是继承呢? 子类访问父类的成员变量 子类访问父类非同名成员变量 子类访问父类同名成员变量 子类访问父类的成员方法 子类访问父类的非同名方法 子类访问父类的同名方法 super关键字 super访问父类成员变量 super访问父类成员方法 创建构造方法 super与this的区别 顺序 详解访问修饰限定符 继承方式与组合 继承方式 组合 继承 什么是继承呢? 继承(Inheritance)是一种联结类与类的层次模型.指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口

  • Java全面分析面向对象之封装

    目录 什么是封装呢 封装的好处意义 getter方法和setter方法 toString方法 面向对象封装之包 自定义包 什么是封装呢 封装就是一种将数据和操作数据的方法进行有机结合,一种函数抽象类的接口实现了对细节的封装和隐藏,使得我们只需要调用对外开放的公共接口去实现与对象的交互.我们可以把封装理解为一种保护的屏障,需要一些严格的接口进行控制,我们可以修改自己实现类的内部结构的代码,但是不可以修改那些公共接口.这就提供更好的安全性. 封装的好处意义 好的封装能够减少耦合度 能够对成员变量更精

  • Java全面讲解顺序表与链表的使用

    目录 线性表 顺序表 链表 小结 线性表 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见 的线性表:顺序表.链表.栈.队列.字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构(内存上)上并不一定是连续的,线性表在物理上存储时,通常以数组(在物理上是连续的)和链式结构(在物理上不连续)的形式存储. 顺序表 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下采

  • 详解Java基础篇--面向对象1(构造方法,static、this关键字)

    面向对象,面向过程的区别.拿下五子棋来说: 面向过程分析: 开始游戏 黑棋先走 绘制画面 判断输赢 轮到白棋 绘制画面 判断输赢 返回步骤2 输出结果 面向对象分析: 黑白双方,双方行为是一模一样的 棋盘系统,负责绘制画面 规则系统,判断犯规.输赢 传统的面向过程编程是思考问题的解决步骤,这种思维方式适用于问题规模较小时.可是当问题规模大,要求程序有更好的可扩展性,能更快速地查错时面向对象设计思想就能体现出其优势.面向对象更接近人类地自然思维方式,将现实世界中的事物抽象为对象和对象的方法. 面向

  • Java基础之面向对象机制(多态、继承)底层实现

    一.Java的前世 为什么会产生Java?Java的特点是什么? 从C语言开始讲,C语言是一种结构化语言,模块化编程,便于程序的调试,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件.其缺点就是封装性弱,程序的安全性上不是很好.C语言的异常处理一般使用setjmp()与longjmp(),在捕获到异常时进行跳转:或者使用abort()和exit()两个函数,强行终止程序的运

  • Java实例讲解文件上传与跨域问题

    目录 了解MultipartFile接口 文件上传业务代码 Controller类 Service类 修改nginx配置 如何绕过网关 1.在网关中配置白名单 2.在nginx做转发 解决上传文件出现跨域问题 写配置类CorsFilter 在nginx配置中配置请求实体大小 Java文件上传实例并解决跨域问题 目在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传功能的实现. 了解MultipartFile接口 我们实现文件的上传用到了Spring-

  • Java实例讲解反射机制是怎么一回事

    Java反射机制的概述 1.Java的反射(reflection) :机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法.这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制.反射被视为动态语言的关键,反射让Java成为一个准动态语言 .缺点增加不安全性. 2.动态语言(弱类型语言) 是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型..

随机推荐