关于类和对象超级初级小白知识

下面的内容只是一小部分,在整个面向对象的知识中并不完整,用于记忆和梳理

目录

前言:类和对象是什么?

一、定义类

 1.如何定义类

2.类的注意事项

二.类的实例化

1.创建对象的基础知识

2.如何创建对象

3.实例化举例

4.访问对象

5.实例化对象的一些注意事项

三、this引用

1.this引用的三大作用

2.具体使用

​编辑

四、初始化方式

1.默认初始化

2.就地初始化

3.构造方法

总结

1.类和对象

2.this引用

3.初始化成员变量

4.构造方法


前言:类和对象是什么?

(1)类是什么?

1.类是用来对一个实体(对象)来进行描述的。比如这个实体(对象)的大小、长度和质量等等。

2.类是Java语言中一种结构

3.类的一般组成:成员变量、成员方法和构造方法

(2)对象是什么?

1.对象是一个实体。如果说类是一个形容词,那么对象就是被形容词修饰的名称。

2.类是用来描述对象的。在Java语言中,对象是由类创造出来的。

3.类相当于是一个类型,通过类型来创建变量

(3)类、对象分别长什么样?


上面就是类和对象大概长什么样,接下来一起更加深入的去了解如何定义类跟对象吧

一、定义类

 1.如何定义类

(1)类的定义格式

class是定义类的一个关键字,是必须要有的。在class前面可以有一个修饰符,一般是public

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

(2)定义一个狗类

这个类的名字为:PetDog;其中,花括号中的代码是狗的一些属性 ,用户可自行添加。

(1)像前面两行代码,称为类的成员方法

(2)后面两个方法,称为类的属性

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}

(3)类出现的两种形式

第一种:class+类名的方式创造

第二种:通过创造文件的形式

(4)类的改名操作

类不能直接在代码页面改名,需要通过以下的操作来

第一步:找到类的位置

第二步:

改名后:

在大概知道一个类是怎么定义之后,就应该了解在定义类时的一些注意事项,包括易错点和潜规则

2.类的注意事项

(1)一般一个java文件中定义一个类(推荐)

最好就是一个java文件中出现一个class就好

(2)类的命名采用大驼峰定义(推荐)

1.只有一个单词时,需要首字母大写

2.多个单词时,每个单词的首字母大写

(3)public修饰的类必须要和文件名相同(必须要求)

这种类 一般都是在创建类的时候自带的一个public(属于类的第二种创造方法)

(4)一般main方法所在的类使用public修饰(推荐)


了解了类的一些注意事项,就应该去了解对象是怎么来的,对象是什么了

二.类的实例化

用类类型创建对象的过程,称为类的实例化

1.创建对象的基础知识

1.使用new关键字和类名来创建对象

2.一般会有一个指向对象的引用(变量)

2.如何创建对象

第一种:有一个引用指向对象

第二种:匿名对象(当前用来理解对象是什么?)

这种直接是new+类名+(),这个整体就是一个对象

new Chichen6666();

3.实例化举例

这是一个定义好的狗类:

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}

在主函数内使用类定义对象

public class Main{public static void main(String[] args) {PetDog dogh = new PetDog();     //通过new实例化对象}
}

实例化大致包含两步:(1)为对象分配内存空间(2)调用合适的构造方法进行初始化

4.访问对象

每实例化一个对象,该对象就会拥有类中全部属性,可以说这些属性是属于对象的,接下来就可以通过对象的引用去访问这些属性了

访问的格式:指向对象的引用(变量)+.  来访问对象中的属性和方法

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}
public class Main{public static void main(String[] args) {PetDog dogh = new PetDog();     //通过new实例化对象dogh.name = "阿黄";//给对象中的name进行赋值dogh.barks();//访问成员方法}
}

5.实例化对象的一些注意事项

1.new 关键字用于创建一个对象的实例。

2.同一个类可以创建对个实例。

3.使用 . 来访问对象中的属性和方法。

三、this引用

1.this引用的三大作用

(1)this可以指向当前对象

(2)this可以调用成员方法

(3)this可以调用构造方法

2.具体使用

(1)指向当前对象

 当形参名字和成员变量名字一样时,是优先执行局部变量的,编译器就会认为两个变量都是局部变量,所以不能成功给成员变量赋值。

public class Data {public int year;public int month;public int day;public Data(int year,int month,int day) {year = year;month = month;day = day;}public void print() {//打印的方法System.out.println(this.year+"/"+this.month+"/"+this.day);}public static void main(String[] args) {Data data = new Data();//对象1Data data1 = new Data(1999,9,9);//对象2data1.print();//调用打印函数}
}

针对上面的情况,要使用this表明该变量属于对象的,是成员变量

public class Data {public int year;public int month;public int day;public Data(int year,int month,int day) {this.year = year;this.month = month;this.day = day;}public void print() {//打印的方法System.out.println(year+"/"+month+"/"+day);}public static void main(String[] args) {Data data = new Data();//对象1Data data1 = new Data(1999,9,9);//对象2data1.print();}
}

只要是成员变量,我们都可以在前面加上this引用。谁调用的这个变量,this就表明这个成员变量是这个对象的,就会给这个对象中的成员变量进行赋值

(2)调用成员方法

代码示例: 

class Student {public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}public void study() {this.eat();//在一个方法中调用其他的方法System.out.println(this.name+"正在学习");}public void eat() {System.out.println(this.name+"正在干饭");}}public class Test {public static void main(String[] args) {Student student1 = new Student("张三",18);student1.study();}
}

结果分析示例:

(3)调用构造方法

常用于在一个构造方法中去调用其他的构造方法

代码示例:

class Student {public String name;public int age;public Student(String name, int age) {this();//必须放在第一行this.name = name;this.age = age;}public Student() {System.out.println("无参构造方法被this调用了");}
}public class Test {public static void main(String[] args) {Student student1 = new Student("张三",18);}
}

注意事项:

this()调用构造方法时,必须放在第一行

四、初始化方式

我们定义类的时候,一般都会有成员变量和成员方法;而在定义成员变量的时候可以选择赋一个初值或者不赋(初始化),也可以在后续的操作中赋值,下面一一介绍

1.默认初始化

其实默认初始化就是不初始化,变量会有一个默认的初值

class PetDog {public String name;//默认初始化public String color;//默认初始化
}

2.就地初始化

就地初始化就是在定义成员变量的时候,直接赋值,这样定义的类的使用范围就会变得很狭窄,实例化的对象都是一样的属性

class PetDog {public String name = "旺财";//就地初始化public String color = "黄色";//就地初始化
}

所以为了能应对更多的情况,不同的对象属性不同,使用构造方法去初始化成员变量

3.构造方法

(1)什么是构造方法

1.构造方法又称为构造器,是一种特殊的成员方法。

2.在构造方法中,可以初始化成员变量。

(2)构造方法的特点

1.构造方法的名字必须与类名相同。

2.在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

3.无论用户有没有写构造方法,总是会被调用。

4.构造方法没有返回值这一说法,设置为void也不行。

5.构造方法可以重载。

 

(3)使用构造方法

第一种:编译器默认(隐式)提供

下面的类是没有构造方法的,当用户没有提供时,编译器会默认提供一个无参的构造方法

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}
}

将编译器默认的构造方法显示出来

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}public PetDog() {//默认的无参构造方法}
}

这个默认的无参构造方法即使我们不写出来,编译器也会默认提供(这里为了认识特意写出来)

第二种:自己写构造方法

class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~");}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~");}public PetDog() {//默认的无参构造方法}//自己写的构造方法public PetDog(String name,String color) {this.name = name;this.name = color;}
}

第三种:由编译器自己生成

由编译器生成的前提是:类中有成员变量,不然没有必要由编译时生成(默认会由有)

根据下面提升的操作:

第一步:这一步的快捷键为:Alt+Ins

第二步:

第三步:选择需要成员变量

结果展示:


上述就是构造方法的创造方法,下面介绍两种构造方法的区别,和当自己定义了构造方法之后,创建对象时的区别。

(4)构造方法的区别和初始化

下面介绍无参构造方法和有参构造方法在在实例化对象时候的区别

第一种区别:默认无参构造方法与有参构造方法的区别

无参构造方法在实例化对象的时候:

public class PetDog {public String name;//名字public String color;//颜色public PetDog() {}
}
class Test {public static void main(String[] args) {PetDog dog1 = new PetDog();}
}

 这种情况下的对象,就是为默认初始化的

有参的构造方法在实例化对象的时候:

总结

1.类和对象

(1)类是一个类型,用来创造对象

(2)类中有成员变量和成员方法

(3)对象的引用可以通过.号访问对象中的成员方法和成员变量

2.this引用

(1)this引用成员变量

(2)this调用成员方法

(3)this调用构造方法(存在一个构造方法中,必须在代码的第一行)

(4)this只能在成员方法中使用

(5)this调用构造方法时,不能形成闭环

3.初始化成员变量

(1)默认初始化

(2)就地初始化

(3)使用成员方法(在实例化对象时)

4.构造方法

(1)系统隐式默认提供

(2)手动显示提供

(3)通过编译器自己生成

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

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

相关文章

【Python】python实现决策树算法和贝叶斯算法(附源代码)

使用一种你熟悉的程序设计语言,实现(1)贝叶斯算法和(2)决策树算法 目录 1、贝叶斯算法2、决策树算法3、两种算法比较 1、贝叶斯算法 import pandas as pd import numpy as np from sklearn.model_selection import t…

算法-DFS/BFS-XMUOJ提瓦特细胞探秘

题目 思路 这道题目描述了一个矩阵中由数字1至9组成的细胞,这些细胞按照特定规则相互连接。具体规则是,只有当细胞上下左右紧邻的数字同样属于1至9时,它们才会被视为同一细胞的一部分。 解决这个问题的关键在于如何遍历整个矩阵&#xff0c…

灵雀云开源ALB ,为云原生 Kubernetes 网关领域再添新星

ALB (Another Load Balancer)是一款由灵雀云倾力打造的云原生 Kubernetes 网关,近日,正式宣布将其在Github上开源。ALB 的诞生,旨在满足日益增长的云原生应用需求,为开发者提供更为强大和灵活的网关解决方案。 ALB 支持在一个集群…

Oracle PL/SQL Programming 第9章:Numbers 读书笔记

总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版 本章谈3点: 可使用的数字数据类型如何在数字和文本间转换PL/SQL 内置数值函数 Numeric Datatypes NUMBER:平台无关的实现,适合处理货币金额PLS_INTEGER 和 BINA…

前端面试题汇总

基础面试题 1.new 操作符做了那些事 function Fun(name){this.name name } Fun.prototype.sayHi funtion(){console.log(this.name) }function mockCreate(fn, ...args){let obj Object.create({}) // 创建一个空对象Object.setPrototypeOf(obj, fn.prototype) // 空对象…

day02vue学习

day02 一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 (演示) 渲染 / 删除 / 修…

速卖通批量注册买家号安全吗?怎么弄?

在速卖通等跨境电商平台上,买家号的注册与养号过程繁琐而复杂。传统的手动注册方式效率低下,难以满足大规模的需求。而跨境智星系统凭借其全自动化的功能,能够轻松实现买家号的批量注册与养号,大大提高了效率。 使用跨境智星系统进…

200W年薪的大佬 随手丢给我“Spring速成宝典”看完这些知识点直接定级P7

面试官:答的很好,最后一个问题:如果没有Spring,你打算怎么开展工作? 这个思考了几分钟后,程序员小建是这么回答的:Spring的核心源码,比如:IOC、AOP、Spring事务、MVC原理…

Explain详解与索引优化最佳实践

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在select语句之前增加explain关键字,MySQL会在查询前设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL 注意: 如果from中包含子查询,仍会执行该子查询,将结果…

DAY by DAY 史上最全的Linux常用命令汇总----man

man是按照手册的章节号的顺序进行搜索的。 man设置了如下的功能键: 功能键 功能 空格键 显示手册页的下一屏 Enter键 一次滚动手册页的一行 b 回滚一屏 f 前滚一屏 q 退出man命令 h 列出所有功能键 /word 搜索word字符串 注意&#xff1a…

【文献阅读】A Fourier-based Framework for Domain Generalization(基于傅立叶的领域泛化框架)

原文地址:https://arxiv.org/abs/2105.11120 摘要 现代深度神经网络在测试数据和训练数据的不同分布下进行评估时,存在性能下降的问题。领域泛化旨在通过从多个源领域学习可转移的知识,从而泛化到未知的目标领域,从而解决这一问…

03-自媒体文章发布-黑马头条

自媒体文章发布 1)自媒体前后端搭建 1.1)后台搭建 ①:资料中找到heima-leadnews-wemedia.zip解压 拷贝到heima-leadnews-service工程下,并指定子模块 执行leadnews-wemedia.sql脚本 添加对应的nacos配置 spring:datasource:driver-class-name: com…

图解Diffusion扩散模型+代码

0、项目视频详解 视频教程见B站https://www.bilibili.com/video/BV1e8411a7mz 1、diffusion模型理论(推导出损失函数) 1.1、背景 随着人工智能在图像生成,文本生成以及多模态生成等领域的技术不断累积,如:生成对抗网…

SD-WAN技术如何保障网络的持续连接和稳定性

在当今数字化时代,企业对于网络的稳定性和持续连接性需求日益增加。SD-WAN作为一种新兴的网络解决方案,为企业提供了有效的方式来实现网络的持续连接和稳定性。本文将探讨SD-WAN技术如何保障网络的持续连接和稳定性。 1、多路径冗余技术 SD-WAN采用了多…

初识Python语言-课堂练习【pyhton123题库】

初识Python语言-课堂练习【pyhton123题库】 一、单项选择题 1、Guido van Rossum正式对外发布Python版本的年份是: A 2008B 1998C 1991D 2002 【答案】C 【解析】暂无解析2、下面不是Python语言特点的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪…

移动端App、小程序、公众号该怎么选择,你真得知道吗?

当下移动App,小程序泛滥,如何选择,你真的知道吗? 今天我们就聊聊App、小程序、公众号、微应用具体是什么?怎么样开发?适合在什么情况下使用? 1.App、小程序、公众号、微应用之初识 App App本质来说就是手…

机试:蛇形矩阵

问题描述: 代码示例: //蛇形矩阵 #include <bits/stdc.h> using namespace std;int main(){int n;cout << "输入样例" << endl; cin >> n;int k 1; for(int i 0; i < n; i){if( i %2 0){//单数行for(int j 0; j < n; j){ cout &…

安装包逆向1

1.找到程序的入口点 在IDA中我们看到函数非常多&#xff0c;但是一般都是有主要的入口的&#xff0c;所以找一下有没有主函数 可以直接 CtrF直接查找 CNsInstaller::CNsInstaller 这里搞半天在获取文件路径 CNsInstaller::StartInstall CNsInstaller::InstallFunc char…

springboot268码头船只货柜管理系统

码头船只出行和货柜管理系统的设计与实现 摘要 针对于码头船只货柜信息管理方面的不规范&#xff0c;容错率低&#xff0c;管理人员处理数据费工费时&#xff0c;采用新开发的码头船只货柜管理系统可以从根源上规范整个数据处理流程。 码头船只货柜管理系统能够实现货柜管理…

Spring 面试题及答案整理,最新面试题

Spring框架中的Bean生命周期是什么&#xff1f; Spring框架中的Bean生命周期包含以下关键步骤&#xff1a; 1、实例化Bean&#xff1a; 首先创建Bean的实例。 2、设置属性值&#xff1a; Spring框架通过反射机制注入属性。 3、调用BeanNameAware的setBeanName()&#xff1a…