Java面向对象(上)

Java面向对象(上)

一、面向对象的思想

1、面向过程:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤逐一实现,使用的时候依次调用就可以了。

2、面向对象:

面向对象就是把构成问题的事物按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。

3、面向对象的特点:

(1) 封装性:封装性是面向对象的核心思想,有两层含义,一层含义是指吧对象的属性和行为看成是一个密不可分的整体,将这两者”封装”在一起(即封装在对象中);另一层含义是指”信息隐藏”,将不想让外界知道的信息隐藏起来。

(2) 继承性:继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行拓展。

(3) 多态性:多态性是指在一个类中定义的属性和方法被其他类继承后,他们可以具有 不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。

二、类与对象

在java中,类与对象是最基本、最重要的单元。类表示某类群体的一些抽象基本特征,对象表示一个个具体的事物。

例如:学生可以是个类,而具体的一名学生,就可以称为对象。这名具体的学生会有自己的姓名和年龄等信息,这些信息在面向对象的概念中称为属性;学生可以看书和打篮球,而看书和打篮球这些行为在类中就称为方法。

1、类的定义

类是java中一个重要的引用数据类型,所有的java程序都是基于类的。

类是对象的抽象,用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中,成员变量用于描述对象的特征,成员变量也被称为对象的属性;成员方法用于描述对象的行为,可简称为方法。

类的定义格式如下:

class 类名{
    成员变量;
    成员方法;
}

1.2、局部变量与成员变量的不同

在java中, 定义在类中的变量称为成员变量, 定义在方法中的变量称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时,在方法中通过变量名访问到的是局部变量而非成员变量。

2、对象的创建与使用

在java程序的类中,想要使用一个类则必须要有对象。在java程序中可以使用”new 关键字”创建对象,具体格式如下:

类名 对象名称 = null;
对象名称 = new 类名 ();

具体实现的图示如下:

Java面向对象(上)

(即0x0001是地址值,不存储在栈内存中,它指向堆内存中0x0001的地址)

当我们创建完对象后(即Student uu = new Student;)可以使用对象访问类中的某个属性或方法,对象属性和方法的访问通过”.”运算符实现,具体格式如下:

对象名称.属性名
对象名称.方法名

下面我举一个例子进行介绍:

package com.sdbi.hang;

class Student {
    String name;//声明姓名的属性

    void read() {
        System.out.println("大家好,我是" + name);
    }
}

public class example {
    public static void main(String[] args) {
        Student uu1 = new Student();//创建第一个Student对象
        Student uu2 = new Student();//创建第一个Student对象
        uu1.name = "小明";//为uu1对象的name属性赋值
        uu1.read();//调用对象的方法
        uu2.name = "小花";//与上文一样
        uu2.read();
    }
}

运行结果如图:

Java面向对象(上)

Java面向对象(上)

从上图可以看出,程序分别实例化了两个Student对象uu1和uu2,分别指向其各自的堆内存空间(内存地址)

3、对象的引用传递

类属于引用数据类型,引用数据类型就是指内存空间可以同时被多个栈内存引用。下面我用一个例子来说明对象的引用传递。

package com.sdbi.hang;

class Student {
    String name;//声明姓名的属性
    int age;//声明年龄属性

    void read() {
        System.out.println("大家好,我是" + name + "年龄" + age);
    }
}

public class example {
    public static void main(String[] args) {
        Student uu1 = new Student();//声明uu1对象并实例化
        Student uu2 = null;//声明uu2对象,但不对其进行实例化
        uu2 = uu1;//uu1给uu2分配空间使用权
        uu1.name = "小明";//为uu1对象的name属性赋值
        uu1.age = 20;//定义uu1年龄20岁
        uu2.age = 40;//定义uu2年龄40岁
        uu1.read();//调用对象的方法
        uu2.read();
    }
}

运行的结果如下图所示:

Java面向对象(上)

通过这张图片发现,两个对象输出的内容是一样的,这是因为uu2对象获得了uu1对象的堆内存空间使用权。其实就是对uu1的age属性赋值20之后,过对uu2的age属性赋值40,之后uu2的值把uu1的值覆盖掉,所以输出是40。

实际上所谓的引用传递,就是将一个堆内存空间的使用权给多个栈内存空间使用,每个栈内存空间都可以修改堆内存空间的内容,运行结果图的分析如下:

Java面向对象(上)

Java面向对象(上)

从以上的四幅图中可以发现堆内存、栈内存空间的变化,在程序的最后,uu2对象将age的值修改为50,因此最终结果uu1的age属性值是50。

4、访问控制

针对类、成员方法和属性,java提供了四种访问控制权限。这四个访问权限由小到大依次是:

Java面向对象(上)

下面具体介绍一下控制权限

  • private:属于私有访问权限。用于修饰类的属性和方法。类的成员如果用到了private,该成员就只能在本类中进行访问。
  • default:属于默认访问权限。即在类中的属性或方法没有任何的访问权限声明时就会默认为此访问权限,默认的访问权限可以被本包之下的其他类调用,但是不能跨包调用。
  • protected:属于受保护的访问权限。只能被本包及不同包的子类访问。
  • public:属于公共访问权限。即可以在全局范围都可以访问。

三、封装性

1、为何要封装

封装可以被认为是一个保护屏障,防止本类的代码和数据被外部程序随机访问。所以需要封装。

2、如何封装

类的封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法实现对内部信息的操作访问。

在定义一个类时,将类中的属性私有化,即使private关键字修饰类的属性,被私有化的属性只能在类中被访问。如果外界想要访问私有属性,则必须通过getter和setter方法设置和获取属性值。

四、构造方法

我们在java中实例化一个对象后,,如果要为这个对象的属性赋值,必须通过直接访问对象的属性或调用setter方法才可以实现,如果需要在实例化对象时为这个对象的属性赋值,可以通过构造方法来实现。(构造方法也称为构造器)

1、定义构造方法

构造方法是一个特殊的成员方法,在定义时需注意一下几点

  1. 构造方法的名称必须与类名一致、
  2. 构造方法名称前不能有任何返回值类型。
  3. 不能再构造方法中使用return返回一个值,但是可以单独写return语句作为方法的结束。

2·1、构造方法的重载

在一个类中可以定义多个构造方法,只要每个构造方法的参数类型不同或参数个数不同即可。在创建对象时,可以通过调用不同的构造方法为不同的属性赋值。

2·2、默认构造方法

在java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,方法体中没有任何代码。

通常构造方法使用public修饰。

五、this关键字

在一个类中,当成员变量与局部变量重名时,需要使用到this关键字分辨成员变量与局部变量,java中的this关键字语法比较灵活,主要作用有三点

  1. this关键字调用本类中的属性。
  2. this关键字调用成员方法。
  3. this关键字调用本类的构造方法。

六、代码块

简单来说代码块就是用{}括起来的一段代码。代码块具体可以分为四种,分别是:

  1. 普通代码块
  2. 构造块
  3. 静态代码块
  4. 同步代码块

七、static关键字

在定义一个类时,只是在描述某事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的势力对象时,柴夔开辟栈内存和堆内存,在堆内存中么个对象会有自己的属性。如果希望某些属性被所有对象共享,就必须将其声明为static属性。如果属性使用了static关键字进行修饰,则该属性可以直接使用类名称进行调用。

1、静态属性

如果在java程序中使用static修饰属性,则该属性称为静态属性(也称为全局属性),经验属性可以使用类名直接访问,访问格式如下:

类名。属性名

备注:

static挂年至只能修饰成员变量,不能修饰局部变量,否则编译器会报错。

2、静态方法

如果想要使用类中的成员方法,就需要先将这个类实例化,而在实际开发时,如果想不创建对象的情况下,通过类名就可以直接调用某个方法,要实现这样的效果,只需要在成员方法前加上static关键字,使用static关键字修饰的方法通常称为静态方法。

备注:

静态方法只能访问静态成员,因为非静态成员需要先创建对选哪个才能访问,即随着对象的创建,非静态成员才会被分配内存。而静态方法在被调用时可以不创建任何对象。

3、静态代码块

用static关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会之星,由于类只加载一次,因此静态代码块只执行一次。通常使用静态代码块对类的成团变量进行初始化。

Original: https://www.cnblogs.com/soosoo/p/16064836.html
Author: HeartCloud
Title: Java面向对象(上)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599123/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • jQuery基础

    作者导言: 引用偶像刘德华的一句话 “学到的就要教人,赚到的就要给人”! 以下是关联的web前端基础知识文章,通过这些文章,您既可以系统地学习和了解这些知识…

    数据库 2023年6月14日
    095
  • win7连接远程桌面提示身份验证错误函数不受支持

    win7连接远程桌面提示身份验证错误。要求的函数不受支持怎么办,下面的方法介绍了如何解决这个问题。 工具/原料 电脑 win7系统 方法/步骤 win+R 打开运行,输入&#822…

    数据库 2023年6月9日
    084
  • 5 float f = 3.4,是否正确

    不正确,赋值运算符 “=” 左右两边的精度类型不匹配。 Java中,有小数点的默认被存储为double类型,即双精度;而float类型的变量为单精度。 可以…

    数据库 2023年6月6日
    078
  • git 烂笔头

    触类旁通, 举一反&amp…

    数据库 2023年6月9日
    087
  • jsp规范

    jsp规范 一。jsp介绍:来自于javaee规范里面的一种jsp规范制定了如何开发jsp文件代替响应对象将处理结果写入到响应体的开发流…

    数据库 2023年6月11日
    087
  • IO流

    流的分类 按操作数据不同,分为字节流和字符流。 按数据流的流向分为输出流和输入流。 按流的角色分为节点流和包装流。 抽象基类 字节流 字符流 输入流 InputStreanm Re…

    数据库 2023年6月16日
    086
  • 如何把 MySQL 备份验证性能提升 10 倍

    JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档。最近有个客户在测试时反馈,备份验证的数据准备( xtrabackup –prepare)过程非常…

    数据库 2023年5月24日
    073
  • jdbc-处理查询结果集

    package com.cqust; import java.sql.Connection;import java.sql.DriverManager;import java.sq…

    数据库 2023年5月24日
    077
  • Java基础十—JavaIO

    CPU指令与内核态、用户态 在操作系统中,CPU负责执行指令,这些指令有些来自应用程序,有些是来自底层系统。有些指令是非常危险的,如清除内存,网络连接等等,如果错误调用的话有可能导…

    数据库 2023年6月6日
    0120
  • [springmvc]springmvc的实现流程原理,以及快速创建一个三层架构项目

    1.回顾mvc 模型 模型(dao,service):业务逻辑,保存数据的状态 视图 视图(jsp,html……):展示页面 控制器 控制(servlet)…

    数据库 2023年6月16日
    078
  • tiler–python实现的有趣的自定义马赛克图像拼接工具

    最近在github中发现了一个有趣的小工具,tiler github链接https://github.com/nuno-faria/tiler 具体介绍请直接去github,这里只…

    数据库 2023年6月11日
    090
  • 一文说透 MySQL JSON 数据类型(收藏)

    JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 相对字符类型,原生的 JS…

    数据库 2023年5月24日
    081
  • Mysql数据库语言学习的路线

    对于我们数据库的学习,不管是测试人员还是开发人员以及我们的DBA来说重点都是SQL;但是我们的SQL可以分多少类型,学习重点又是在哪里呢,本文仅仅针对测试人员来展开说明: SQL:…

    数据库 2023年5月24日
    074
  • MySQL的权限管理和Linux下的常用命令

    1.管理用户: root,具有最高权限,具有创建用户的权限,可以为其他用户授权 2.普通用户: 普通由root用户创建,权限由root分配 — mysql创建用户: create…

    数据库 2023年6月16日
    061
  • Java 考试系统项目源码 springboot mybaits vue.js 支持手机端考试

    新增功能:培训学习模块, PDF电子课程、视频课程、直播课程(自己搭建直播流服务器) 人脸识别(考试时验证,有开关)、补考开关 组建试卷:创建试卷,题目、类型、总分、及格分数、时长…

    数据库 2023年6月6日
    084
  • 数据库操作语句大全(sql)

    数据库操作语句大全(sql) 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbna…

    数据库 2023年6月9日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球