【javaSE】类和对象

news2024/11/26 2:25:57

希望各位老铁三连支持!

文章目录

  • # 关于面向对象
  • # 类的定义和使用
  • # 构造方法的创建和初始化
  • # 封装
  • ## 封装的概念
  • ## 访问限定符
  • ## 封装包的各种用法
  • # 关键字static
  • # 代码块

一、关于面向对象

1.1面向对象的定义

  • 简单来说,面向对象就是一种编程的思想,是用来解决问题的一种思想,主要靠对象之间的交互完成的一件事情。
  • 面向对象的编程思想就是把事物看作一个整体,从事物的特征(属性)和行为(方法)两个方面进行描述。
  • 面向对象的过程就是找对象、建立对象、使用对象、维护对象的关系的过程。构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

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

区别面向过程面向对象
设计思路自顶向下、层次化、分解自底向上、对象化、综合
单元函数模块对象
设计方法程序=算法+数据结构程序=对象=特征+行为
优点相互独立,代码共享,性能相对较高,比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发接近人的思维方式、易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统
缺点修改、维护、扩展困难性能比面向过程低

举例:

面向对象:具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可。

面向过程:放入衣服 -> 打开洗衣机 -> 洗衣服 -> 关闭洗衣机

  • 面向对象是基于面向过程的
  • 面向对象能让复杂的问题简单化,程序员不需要了解具体的实现过程,只需要指挥对象去实现功能。
  • 面向对象的程序是由对象组成的, 每个对象包含对用户公开的特定功能部分和隐藏的实
    现部分。程序中的很多对象来自标准库,还有一些是自定义的。究竟是自己构造对象, 还是从外界购买对象完全取决于开发项目的预算和时间。但是, 从根本上说, 只要对象能够满足要求, 就不必关心其功能的具体实现过程。在 OOP 中, 不必关心对象的具体实现, 只要能够满足用户的需求即可。
  • 注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

二、类的定义和使用

1.类的定义

  • 类( class) 是构造对象的模板或蓝图。 我们可以将类想象成制作小甜饼的切割机,将对象想象为小甜饼。 由类构造 (construct) 对象的过程称为创建类的实例 (instance ) 。
  • 类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。
比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色...
功能:洗衣,烘干、定时....

2.类的定义格式

代码如下(示例):

// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法

举例:定义一个学生类

public class Student{
public String name;
public String gender;
public short age;
public double score;

public void DoClass(){}

public void DoHomework(){}

public void Exam(){}

}

注意事项:
1. 一般一个文件当中只定义一个类
2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
3. public修饰的类必须要和文件名相同

三、构造方法的创建和初始化

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

举例:

public class Animal {
    String name;
    int age;
    //构造方法
    public Animal(){
        name = "小狗";
        age = 2;

    }
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {
        //创建对象
        Animal a1 = new Animal();
        System.out.println(a1.name+","+a1.age);

        Animal a2 = new Animal("兔子",2);
        System.out.println(a2.name+","+a2.age);
    }
}

注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间
1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

public class Date {
public int year;
public int month;
public int day;

public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}

public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}

上述代码中如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
注意:一旦用户定义,编译器则不再生成。

四、封装

4.1封装的概念

面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

  • 封装的目的在于保护信息,保证数据的安全性
  • 封装包括两个方面:属性的封装和方法的封装

4.2访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

public:可以理解为一个人的外貌特征,谁都可以看得到
default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
private:只有自己知道,其他人都不知

4.3封装包的各种用法

包的概念:在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。

 

 注意:包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

包的导入:

Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类

public class Test {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date();
// 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

上面这种写法比较麻烦一些,也会造成代码冗余,所以不建议使用。

我们经常用的用法是使用import语句去导入包

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = new Date();
// 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

注意事项: import 和 C++ 的 #include 差别很大. C++ 必须 #include 来引入其他文件内容, 但是 Java 不需要. import 只是为了写代码的时候更方便. import 更类似于 C++ 的 namespace 和 using

常见的包:

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect:java 反射编程包;
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包

五、关键字static

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

【静态成员变量特性】
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

public class Student{
public String name;
public String gender;
public int age;
public double score;
public static String classRoom = "Bit111";
// ...
public static void main(String[] args) {
// 静态成员变量可以直接通过类名访问
System.out.println(Student.classRoom);
Student s1 = new Student("Li leilei", "男", 18, 3.8);
Student s2 = new Student("Han MeiMei", "女", 19, 4.0);
Student s3 = new Student("Jim", "男", 18, 2.6);
// 也可以通过对象访问:但是classRoom是三个对象共享的
System.out.println(s1.classRoom);
System.out.println(s2.classRoom);
System.out.println(s3.classRoom);
}
}

 Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

public class Student{
// ...
private static String classRoom = "Bit306";
// ...
public static String getClassRoom(){
return classRoom;
}
}
public class TestStudent {
public static void main(String[] args) {
System.out.println(Student.getClassRoom());
}
}

【静态方法特性】
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量

注意:静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用。

public static String getClassRoom(){
doClass();
return classRoom;
} /
/ 编译报错:Error:(35, 9) java: 无法从静态上下文中引用非静态 方法 doClass()

六、代码块

6.1代码块的概念及分类

使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:

  1. 普通代码块:定义在方法中的代码块
  2. 构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量
  3. 静态块:使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
  4. 同步代码块:
public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom;
//实例代码块
{
this.name = "bit";
this.age = 12;
his.gender = "man";
System.out.println("I am instance init()!");
} /
/ 静态代码块
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}
public Student(){
System.out.println("I am Student init()!");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}

注意事项:

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  • 实例代码块只有在创建对象时才会执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Compose 为什么可以跨平台?

这是我在 2022 Kotlin 中文开发者大会 中带来的一个分享,会后有网友反馈希望将 PPT 内容整理成文字方便阅读,所以就有了本篇文章。大家如果要了解本次大会更多精彩内容,也可以去 JetBrains 官方视频号查看大会的直播回放。 前言 Compose 不止…

Bean的生命周期流程-上

Bean的生命周期流程-上引言getBeangetSingletoncreateBean后置处理器类型区分doCreateBeancreateBeanInstance 是如何创建bean的实例的引言 Spring拥有一套完善的Bean生命周期体系,而使得这套生命周期体系具有高扩展性的关键在于Bean生命周期回调接口,通过这些接口…

层次分析法(AHP)

主要来解决评价类问题 什么是评价类问题:选择哪种方案最好,哪位运动员表现的更优秀。 评价类问题可以用打分解决 同一颜色的单元格权重之和为1 解决评价类问题,大家首先要想到以下三个问题: 1.我们评价的目标是什么&#xff1…

FineReport数据可视化图表-配置MySQL8外接数据库(1)

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 - 11.0.3 1)首次配置外接数据库时,支持自行选择是否「迁移数据至要启用的数据库」 2)迁移外接数据库的过程提示细化,方便用户了解迁移进度 1.2 功能简介 报表系统配置外接数…

USB TYPE C为什么能实现正反插

USB TYPE C接口在手机,电脑等移动终端中使用的非常多,它可以分为插头和插座,放在PCB板上一般是插座。 USB TYPE C的插座和插头引脚信号定义大家可以看下。引脚分为两排,上面一排是A,下面一排是B。标准的USB TYPE C总共…

YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统

本文紧接前文: 《基于yolov5s实践国际象棋目标检测模型开发》 《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》 首先来看下最终效果: 在我棋类检测系统开发之——五子棋检测那篇博文写完之后就萌生了想做一下基于目标…

WebDAV之葫芦儿·派盘+BubbleUPnP

BubbleUPnP 支持WebDAV方式连接葫芦儿派盘。 推荐一款投屏神器,它将手机内容分享到电视大屏上与家人好友一起共享,软件还提供了丰富的音乐及影视资源,喜欢的内容在线搜索就能播放。支持连接葫芦儿派盘WebDAV服务站,可以直接播放派盘内的影视资源。 BubbleUPnP是一款支持U…

水文监测系统-水文监测站构成 设备 功能 特点介绍以及案例分享

平升电子水文监测系统实现对江河流域水位、降水量、流量、流速、水质、闸门开启度、墒情等数据的实时采集、报送和处理。为防汛抗旱减灾提供科学依据和有效信息共享,保障人民群众生命财产安全,满足水利和经济社会发展对水文服务的需求。 2022年1月&#…

web前端-javascript-百炼成仙(第1节掌握JavaScript基础1.1-1.21)

文章目录1.1 第一章 初入宗门1.2 第二章 直接量1.3 第三章 数据类型1.4 第四章 数据类型扩展内容:1.5 第五章 基础考核1.6 第六章 何老1.7 第七章 对象数据类型1.8 第八章 对象的取值1.9 第九章 循环遍历的奥妙小结:For 循环1.10 第十章 对象内容的遍历1.11 第十一章…

Linux软件包管理之rpm与yum

Linux软件包管理之rpm与yum1.Linux rpm 命令2.rpm包的管理3.yum包管理(强推)1.Linux rpm 命令 Linux rpm 命令用于管理套件。 rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux…

高端运动耳机哪个品牌最好、最好的运动耳机品牌排行

蓝牙耳机近几年受到市场的欢迎,种类越来越多,各类功能也日益五花八门,消费者很难准确的进行分辨,一不小心可能买到华而不实的产品。现在了解一下值得入手的蓝牙耳机,从多个角度对蓝牙耳机进行评估后,得出以…

android 权限常见错误,onRequestPermissionsResult回调不执行问题

今天在调试一个fragment时,申请到权限,然后在权限回调里面做相应的dialog提示用户,但是发现一直无弹窗。 话不多说,直接上问题代码 private void testRxPermissions() {ActivityCompat.requestPermissions(this.getActivity(), ne…

ajax学习

1.什么是ajax(局部刷新) 2.原生ajax WebServlet("/ajaxServlet") public class AjaxServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException…

基于uniapp的药品商城外卖小程序

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

利用OpenCV的函数warpPerspective()作图像的透视变换

图像的透视变换是指按照物体的成像投影规律进行变换。通过透视变换可以将图像投影到新的成像平面上。 图像的透视变换通常用来解决相机的视线与物体所在平面不垂直的问题。 比如,下面这幅图中,如果相机的视线与正方形是垂直的,那么应该是下面…

改bug神器,ChatGPT分分钟扫描,真香!

最近ChatGPT大火,各大论坛中都会出现它的关键词。 机器和人对话本不是什么新鲜事,而ChatGPT上线仅5天,用户数量就超百万,之所以能在短时间吸引到这么多用户尝鲜,是因为它比“人工智障”的AI前辈们聪明多了~ 玩了一会…

T900------900MHz跳频电台核心模块(兼容P900,远距离)

(咨询申请 - 上海皕科电子有限公司--专注物联网注册后,可以获取详细数据手册和评估工具) 目录 1 概述 2 性能特点 3 硬件说明 4 整机介绍 1 概述 T900 模块使用点对点(PP)、点对多点(PMP&#xff0…

浅析几种常见的诊断数据库——ARXML

分别回忆了常见诊断数据库CDD、ODX文件格式,今天主要介绍另外一种常用的数据库文件格式——ARXML(主要应用于AUTOSAR流程数据交互) AUTOSAR诊断提取模板——ARXML AUTOSAR是汽车开放系统架构,该架构有利于车辆电子系统软件的交互与更新,并为高效管理复杂的车辆电子和软件…

Linux 管理联网 配置静态解析 域名解析

问题引入 # 我们平时在网址栏访问网址的时候, 比如 : 访问 百度 的时候,是怎样访问的 ? >>> 那是不是就是在 地址栏 我们输入 www.baidu.com 随后就跳转到 百度的页面去了~! 但实际是 : >&g…

MySQL-事务

文章目录事务(Transaction)为什么会出现事务ACID四大属性事务提交的方式事务基本操作:事务隔离级别(MVCC)隔离级别:如何理解隔离性?为何要存在隔离级别?一致性读读并发写写并发读写并…