JavaSE面向对象

面向对象:

所谓面向对象它是针对于面向过程来说的,面向过程是在意执行的流程。而面向对象在意的功能。将一系列的过程封装到一个容器中,我们通过操作这个容器即以对象的方式来进行操作就是面向对象。

类:

类是一类事物的总称,它是看不见摸不着的。如:空气、人。它们都看不见,也摸不着,但是又真实存在。

对象:

对象是看得见摸得着的,它是类的一个具体的实例。一个类可以创建多个实例对象。

1、类

1.1 类的创建

类的创建一般分为以下三步:

  1. 类的名称

  2. 类的属性(类的特征)

  3. 类的行为(动作,也叫方法)

示例:我们定义一个人的类,它有身高、体重、性别、年龄等;同时它也具有吃、跑、走等行为。

public class Person {float height; // 身高float weight; // 体重String gender; // 性别int age; // 年龄public void speak() {System.out.println("身高: " + height + ", 体重:" + weight + ", 性别: " + gender + ", 年龄:" + age);//return null; // 报错return;}public int getAge() {return age;}// 带有参数的方法,如果参数有多个,则使用逗号进行分隔public void say(String str) {System.out.println(str);}
}

1.2 类的使用

使用语法:

类名称 引用名称 = new 类名称();
public class PersonDemo {public static void main(String[] args) {// 1. 创建对象Person person = new Person();// 2. 给对象中的属性赋值person.height = 185.1f;person.weight = 125.5f;person.gender = "男";person.age = 18;person.speak();}
}

问:在类中定义的属性与变量有什么区别?

答:

  1. 定义的位置不同:属性是定义在类中,而变量是定义在方法中的。

  2. 在内存中的位置不同:属性是在堆中的,而变量是在栈中。

  3. 声明的周期不同:属性是在对象创建是放到堆中的且会随着对象的消失而消失,而变量是在栈中且方法执行后就消失。

  4. 初始化不同:属性是在对象创建时初始化,而变量是在定义时就初始化。

1.3 封装

在 Java 中封装是面向对象三大特征之一。它的作用就是让程序的安全性得以提高。

所谓封装就是将对象的属性隐藏起来,不让外界直接访问,而是通过指定的方法来访问对象的属性,就叫封装。即在定义类的时候将属性私有化,通过 get方法和 set方法来访问类中的私有属性。

使用场景:写实体类时,但凡有属性都需要进行封装。从而来提高安全性

3、

1.4 构造函数

在一个类中,如果方法名和类名相同,并且这个方法没有返回值类型,则该方法就叫构造方法(也叫构造函数,还叫构造器)

构造器作用:给对象中的属性进行初始化

class Human {String name;private int age;// 构造器public Human(){}public Human(String n, int a) {name = n;age = a;}// 普通方法public void human() {}}

1.5 static 关键字

static 可使类中的方法能够通过 类名.方法名()或类名.属性名 的方式来进行访问

static 关键字必须放在方法返回值类型之前,访问修饰符之后(高版本中不成立)

    static String name;private static int age;public static int  getAge() {return age;}

注意:

  1. static关键字可以修改方法,也可以修改属性,但是不能修改变量
  2. static关键字修改的方法可以通过 类名.方法名() 来访问,修饰的属性可以通过 类名.属性名 来访问
  3. 被static修改的方法叫类方法,被statis修饰的属性叫类属性,因此可以通过 类名.的方式来使用

  4. 在 static 修饰的方法中不能使用非静态的变量。

不能使用的原因:因为被 static 修饰的方法和属性它们的生命周期与类的生命周期相同。而非静态的方法和属性的生命周期是在创建这个对象时才有的。换句话说:被 static 修饰的成员的生命周期要比非静态的成员的生命周期长。

1.5.1 static 运用——单例设计模式

static 的一个经典运用场景就是单例设计模式。而单例设计模式分为懒汉式和饿汉式。

单例模式的特点:

  • 构造方法私有化

  • 提供私有的静态成员

  • 提供公有的访问方法

单例设计模式所创建的对象不管有多少个,在内存中只有一份。

1)饿汉式
/*** 饿汉单例设计模式*/
class Singleton1 {// 2. 提供私有静态成员private static Singleton1 instance = new Singleton1();// 1. 构造方法私有化private Singleton1() {}// 3. 提供静态公共方法public static Singleton1 getInstance() {return instance;}
}
public class SingletonTest1 {public static void main(String[] args) {Singleton1 s1 = Singleton1.getInstance();Singleton1 s2 = Singleton1.getInstance();System.out.println(s1 == s2); // true}
}
2)懒汉式
/*** 懒汉式*/
class Singleton2 {private static Singleton2 instance;private Singleton2(){}public static Singleton2 getInstance(){if(instance == null){synchronized (Singleton2.class) {if (instance == null){instance = new Singleton2();}}}return instance;}
}
public class SingletonTest2 {public static void main(String[] args) {Singleton2 s1 = Singleton2.getInstance();Singleton2 s2 = Singleton2.getInstance();System.out.println(s1 == s2);}
}

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

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

相关文章

个人微信api

简要描述: 退出群聊 请求URL: http://域名地址/quitChatRoom 请求方式: POST 请求头Headers: Content-Type:application/json Authorization:login接口返回 参数: 参数名 必选 类型 …

中国当代最具影响力的人物颜廷利:死神(死亡)并不可怕,可怕的是…

中国当代最具影响力的人物颜廷利:死神(死亡)并不可怕,可怕的是… 在中国优秀传统文化之中,汉语‘巳’字与‘四’同音,在阿拉伯数字里面,通常用‘4’来表示; 作为汉语‘九’字&#x…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档:https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

Python面试题【python基础部分1-50】

Python面试题【python基础部分1-50】 Python面试题【python基础部分1-50】 Python面试题【python基础部分1-50】 问题:如何在Python中交换两个变量的值? 答案: a, b b, a问题:Python中的列表和元组有什么区别? 答案&…

KAN 笔记

1 Title KAN: Kolmogorov–Arnold Networks(Ziming Liu, Yixuan Wang, Sachin Vaidya, Fabian Ruehle, James Halverson, Marin Soljačić, Thomas Y. Hou, Max Tegmark)【2024】 2 Conclusion Inspired by the Kolmogorov-Arnold representat…

5.10.3 使用 Transformer 进行端到端对象检测(DETR)

框架的主要成分称为 DEtection TRansformer 或 DETR,是基于集合的全局损失,它通过二分匹配强制进行独特的预测,以及 Transformer 编码器-解码器架构。 DETR 会推理对象与全局图像上下文的关系,以直接并行输出最终的预测集。 1. …

【Linux】-Linux的实用操作:快捷键与软件安装操作、构建软连接、日期时区的设置[4]

目录 一、各类小技巧(快捷键) 1、ctrl c 强制停止 2、ctrl d 退出或登出 3、历史命令搜索 4、光标移动快捷键 5、清屏 二、软件安装 1、yum命令 2、apt命令 - 扩展(ubuntu) 三、systemctl命令 四、软连接 1、ln命令…

【字符函数与字符串函数】

文章目录 一、strlen函数1.strlen函数的使用2.strlen函数的模拟实现(1)计算器办法(2)不创建临时变量计数器(3)指针 二、strcpy函数1、strcpy函数的使用2、strcpy函数的模拟实现 三、strcat函数1、strcat函数的使用2、strcat模拟实现3、字符串自己给自己追加? 四、st…

MySQL报错:You can‘t specify target table ‘user‘ for update in FROM clause

一、问题 执行delete语句时,报错“You can’t specify target table ‘user’ for update in FROM clause” 翻译为“不能先select出同一表中的某些值,再update这个表(在同一语句中)”,即delete的目标表不能在其直接子查询中存在&#xff0…

leetcode876-Middle of the Linked List

题目 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 …

QML进阶(十六) 元素的布局和定位

文章目录 定位器Row定位Column定位Grid定位Flow定位定位器嵌套布局管理器RowyLayoutColumnLayoutGridLayoutQML有三种布局定位的方式分别为定位器(Item Positioner)、布局管理器(Item Layout)、锚定位(anchor)。锚定位在之前的内容中已经介绍过了,主要用于元素之间相对位置的锚…

Electron Forge | 跨平台实战详解

简介 上篇 介绍了 Electron 和 Electron Builder 的基本用法,本篇将介绍更常用也更方便的打包工具,Electron Forge 。 Electron Forge 是一个为 Electron 应用的开发、打包和分发而设计的全功能工具集。它整合了多个底层 Electron 工具到一个统一的命令…

01-单片机商业项目编程,从零搭建低功耗系统设计

一、引言 这是关于《单片机商业编程之从零搭建低功耗系统》的第一篇章,个人善忘,平常项目设计当中的一些思路,以前年轻的时候习惯性的录制成视频,也算是当作是自己的笔记,无奈现在喉咙实在扛不住,因此先尝试…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第一周) - 自然语言处理介绍和线性分类

自然语言处理介绍和线性分类 1. 自然语言处理介绍2. 线性二分类3. 情感分析和基础特征提取 3.1. 情感分析3.2. 特征提取3.3. 文本预处理 4. 学习的基础-梯度下降算法5. 感知机6. 逻辑回归7. 情感分析8. 感知机和逻辑回归 1. 自然语言处理介绍 自然语言处理的目标是什么 能够解…

(2024,KAN,MLP,可训练激活函数,样条函数,分层函数)Kolmogorov–Arnold 网络

KAN: Kolmogorov–Arnold Networks 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. KAN 2.1 KA 表示定理 2.2 KAN 架构 2.3 KAN 的逼近能力和缩放定律 2.4 对于…

国产操作系统下使用dpkg命令管理软件包 _ 统信 _ 麒麟 _ 中科方德

往期好文:国产操作系统下Chrome的命令行使用 | 统信 | 麒麟 Hello,大家好啊!在Linux系统中,dpkg是Debian包管理系统的基础命令工具,它允许用户安装、卸载、查询和管理软件包。在国产操作系统如统信UOS和麒麟KOS、中科方…

字节码基础

基本概念 java中的字节码,英文bytecode。是java代码编译后的中间代码格式。JVM需要读取并解析字节码才能执行相应的任务。java字节码是JVM的指令集。JVM加载字节码格式的class文件。校验之后通过JIT编译器转换成本机机器代码执行。 java字节码简介 1、java byteco…

阿里云部署ChatGLM-6B及ptuning微调教程

一、模型部署 1.进入阿里云人工智能平台PAI。 2.申请免费试用。 3.打开交互式建模 PAI-DSW。 4.新建实例。 5.填写配置。 6.实例准备完成后点击打开。 7.打开实例后点击Teminal。 8.在Teminal中依次输入以下命令并执行。 apt-get update apt-get install git-lfs git lfs ins…

SQLite利用事务实现批量插入(提升效率)

在尝试过SQLite批量插入一百万条记录,执行时长高达20多分钟后,就在想一个问题,这样的性能是不可能被广泛应用的,更不可能出现在真实的生产环境中,那么对此应该如何优化一下呢? 首先分析一下批量插入的逻辑 …

React Router DOM BrowserRouter

是 React Router DOM 库中的一个核心组件,它用于在 React 应用程序中设置路由,并允许你使用 HTML5 的 history API 来管理 URL。BrowserRouter 使用浏览器提供的 history API 来跟踪和管理 URL 的变化,这使得你可以在不刷新整个页面的情况下改…