Java :类和对象(一)

Java :类和对象(一)

📚 目录

前言:
Java是一门纯面向对象的语言在面向对象的世界里,⼀切皆为对象。面向对象是解决问题的⼀种思想,主要依靠对象之间的交互完成⼀件事情。
学习Java这么久还是对类和对象的理解都不是特别深刻的,今天带你走进这个抽象的概念,加强对类和对象这个概念的理解和印象。

1. 什么是类和对象?

在这里插入图片描述

我们传统过程中洗衣服的时候,注重的是洗衣服的过程,而我们现代洗衣机我们只需要将衣服洗衣液倒入洗衣机过段时间我们就能够得到我们的洗干净的衣服。‘

在这里插入图片描述


而我们的Java就像我们的洗衣机,只注重得到洗干净的衣服,不必关心洗衣服的过程,通过对象的交互来进行完成操作。
注意:面向对象和面向过程不是一门语言,是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
就拿我们C语言来举例,C语言比较注重细节的过程,而我们的Java不需要只要知道怎么用就行了。

🔙 返回目录

1.1简单认识类

类是一个抽象的概念。
类:对一个实体(对象)来进行描述的。,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来做什么),描述完成后计算机就可以识别了。
例如:
品牌的洗衣机就相当于类的名字。
属性:型号、尺寸、颜色等。
功能:烘干、定时。

🔙 返回目录


1.2简单认识对象

对象:简单来说就是我们看到的事物,就相当于我们想要制作一个月饼,我们就能够将类看作一个模具,我们只需要将面团往上面一扣,我们就能够得到一个月饼的形状。

也就相当于我们洗衣机(模具)洗完的衣服,得到的就是我们的对象。

在这里插入图片描述

🔙 返回目录


2. 类的定义和使用

🔙 返回目录

2.1类的定义

类的定义格式:我们定义类的时候需要使用Class关键字(采用大驼峰)。

classClassName{ field;//字段或者是成员变量  method;//成员方法 }

例如:

classDog{publicint age;publicString name;publicString color;publicvoid walk (){//动作}publicvoidhabit(){//习惯}// ......}

采用Java语言将狗的类在计算机中定义完成,经过javac编译后生成 .class文件,在JVM的基础上就能够采用计算机识别了。

🔙 返回目录


2.2类的实例化

实例化:定义了一个类,相当于在计算机中定义了一种新的类型(就相当于用模具变成对象)
例如:我们想要在计算机中创建一个女朋友。

publicclassMyGrilFrind{publicString name;publicint age;publicint big;publicdouble kg;//...publicvoidarr(int day){//....}publicvoidarr1(){//...}//....}

用我们定义的对象进行变现:

MyGrilFrind mygirlfrienf =newMyGrilFrind();//没有女朋友就在计算机中new一个。

访问当中的成员用点号来操作 ( . )

例如:

publicclassTest{publicstaticvoidmain(String[] args){MyGrilFrind mygirlfrienf =newMyGrilFrind(); mygirlfrienf.name ="翠花";System.out.println(mygirlfrienf.name);}}
在这里插入图片描述


注意:
new关键字用于创建对象的实例化(分配内存)
点号可以访问和操作成员变量。
同时可以创建多个实列。

🔙 返回目录


3. 对象的构造和初始化

3.1this关键字

为什么要用this这个关键字?
示例:

publicclassDate{int year;int month;int day;//打印年份publicvoidswap(int year,int month,int day){ year = year; month = month; day = day;}}

实例化:

publicclassTest{publicstaticvoidmain(String[] args){Date date =newDate(); date.swap(2006,3,15);System.out.println(date.year +"/"+ date.month +"/"+ date.day);}}
在这里插入图片描述


为什么全都是默认初始值呢?为什么没有交换?
原因:局部变量优先,就相当于自己给自己赋值,而不是给Data这个类中的year,month,day赋值。

加上this效果:

publicclassDate{int year;int month;int day;//打印年份publicvoidswap(int year,int month,int day){this.year = year;this.month = month;this.day = day;}}
在这里插入图片描述


this这个关键字就告诉我们这个year是我们用类创建的对象中的year,而不是局部变量的。

this特性:
对应类类型引用,即哪个对象调⽤就是哪个对象的引用类型。
在"成员方法"中,this只能引用当前对象,不能再引用其他对象。
this是“成员方法”第⼀个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。

🔙 返回目录


3.2初始化

初始化又分默认初始化和就地初始化和构造初始化。
我们创建完类的时候没有进行初始化,编译器会自动帮我们进行初始化。
各个类型初始化值:

在这里插入图片描述


就地初始化:

publicclassMyGrilFrind{publicString name ="小美";publicint age =18;publicdouble kg =48;publicvoidarr(int day){//....}publicvoidarr1(){//...}//....}

在进行写类的时候就初始化完了。
构造初始化:

什么是构造初始化?
构造方法:构造方法是一种特殊成员方法(构造器)
注意事项:
名字必须与类名字相同。
没有返回值。
创建对象时候自动调用并且只调用一次。

publicclassTest{publicstaticvoidmain(String[] args){Apple apple =newApple();}}
publicclassApple{String name;publicApple(){System.out.println("构造方法被调用");}}
在这里插入图片描述


构造方法支持重载。

publicclassApple{String name ="apple";publicApple(){System.out.println("构造方法被调用");}publicApple(String name){System.out.println(this.name);}}

当我们写了构造方法的时候并有参数的情况下:

publicclassApple{String name;publicApple(String name){this.name = name;}}
在这里插入图片描述


这时候就会出现报错,为什么???

publicclassApple{String name;//编译器会默认生成一份没有参数的构造类型。}

为什么这种情况下不会报错?
原因:用户没有定义构造方法的时候编译器会默认给你生成一份构造方法(隐形我们看不见)默认生成的构造方法是没有参数的。
快速构建构造方法的快捷键:鼠标右键(或者:Ctrl+insert)+Generate+Constructor

在这里插入图片描述
publicclassDog{String name;int age;String color;publicDog(){}publicDog(String name,int age,String color){this.name = name;this.age = age;this.color = color;}publicDog(int age){this.age = age;}publicDog(String name){this.name = name;}}
publicclassTest{publicstaticvoidmain(String[] args){Dog dog =newDog("旺财",8,"yellow");}}

当我们想要使用各种初始化的时候可以自己写也可以用快捷键来进行编写。

🔙 返回目录


Read more

从0到1搞懂Linux动静态库制作与底层原理|开发者必备指南

从0到1搞懂Linux动静态库制作与底层原理|开发者必备指南

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一、先搞懂:Linux下的库是什么?二进制的“代码积木” 1.1 库的本质 1.2 库的分类与系统位置 1.3 预备工作:自定义库源码 二. 静态库:编译时链接,独立运行 2.1 整体图示:理清思路 2.2 静态库制作流程(Makefile 自动化 ,更简便) 2.3 静态库使用场景与命令

By Ne0inhk
OpenHarmony Flutter 三方库 flusmic 的适配鸿蒙调研 - 玩转跨平台 CMS 内容管理、实现动态数据流式获取与 UI 高速同步

OpenHarmony Flutter 三方库 flusmic 的适配鸿蒙调研 - 玩转跨平台 CMS 内容管理、实现动态数据流式获取与 UI 高速同步

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net OpenHarmony Flutter 三方库 flusmic 的适配鸿蒙调研 - 玩转跨平台 CMS 内容管理、实现动态数据流式获取与 UI 高速同步 前言 在现代化的 App 开发中,“内容与展现分离”已成为主流趋势。开发者不希望为了修改一段文案或更新一张活动图而被迫发版本审核。Headless CMS(无头内容管理系统)如 Prismic 正是为了解决这一痛点。 flusmic 是 Flutter 生态中对接 Prismic CMS 的优秀客户端。它以轻量、类型安全且支持丰富查询语法而著称。 伴随着鸿蒙系统(OpenHarmony)在全场景终端的爆发式增长,如何在鸿蒙手机、平板甚至折叠屏上,实现 CMS 数据的秒级同步和完美呈现?本文将带你从零开始,在鸿蒙环境下玩转 flusmic,

By Ne0inhk
Ubuntu24安装ClaudeCode

Ubuntu24安装ClaudeCode

报错 app-unavailable-in-region 这个错误说明 Claude Code 在你所在的地区不可用。返回的 HTML 页面是"App unavailable in region"(应用在该地区不可用)的提示页面,而不是安装脚本。 问题原因 Anthropic 目前对 Claude Code 的可用性有地区限制,你的 IP 地址所在地区可能不在支持范围内。 解决方案 1. 确认官方安装方式 先查看 Claude Code 的官方文档确认最新安装方法: 根据搜索结果,你的问题很明确:Claude Code 在你所在的地区不可用 。返回的 HTML 是"App unavailable in region"页面,而不是安装脚本。

By Ne0inhk
Flutter 组件 test_reflective_loader 适配鸿蒙 HarmonyOS 实战:反射装载矩阵,构建规模化测试的自动化分发中枢

Flutter 组件 test_reflective_loader 适配鸿蒙 HarmonyOS 实战:反射装载矩阵,构建规模化测试的自动化分发中枢

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 test_reflective_loader 适配鸿蒙 HarmonyOS 实战:反射装载矩阵,构建规模化测试的自动化分发中枢 前言 在鸿蒙(OpenHarmony)生态迈向大规模企业级应用、涉及深度组件解耦与多维功能验证的背景下,如何通过标准化的框架降低测试样板代码(Boilerplate)的维护成本,已成为决定项目迭代质效的“深水区工程”。在鸿蒙设备这类强调 AOT 编译性能与严苛环境隔离的移动终端上,如果依然依赖传统的手工挂载单元测试用例,由于由于随着业务规模膨胀而呈几何级增长的维护量,极易由于由于人为疏漏导致核心路径的测试脱节。 我们需要一种能够在开发期利用反射特性自动探测用例、支持面向对象继承复用且具备高度声明式语义的测试装载方案。 test_reflective_loader 为 Flutter 开发者引入了基于反射的测试组织范式。它允许通过定义标准的测试类(Test Classes),并在运行时自动识别带有特定前缀的测试

By Ne0inhk