JAVA基础(4) 面向对象编程1

目录

一、面向对象编程概述

1.面向对象的程序设计思想

二、JAVA语言的基本元素:类和对象

1.类为何物?

2.对象为何物?

3.类的成员

4.如何完成面向对象?

三、类的成员——变量

1.如何声明变量

2.成员变量与局部变量

四、类的成员——方法

1.什么是方法?

2.格式

3.调用实例方法

4.方法的重载

五、对象数组

1.定义

2.注意

3.举例

六、类的成员——构造器

1.作用

2.格式

3.说明

4.代码

5.补充

总结


一、面向对象编程概述

1.面向对象的程序设计思想

  • 以类为组织单位。
  • 每种事物都具备自己的属性和行为/功能。
  • 特点:适合解决复杂问题。代码扩展性强、可维护性高。
  • 帮助我们从宏观上把握、从整体上分析整个系统。
  • 不要把面向过程和面向对象对立起来,他们是相辅相成的。

二、JAVA语言的基本元素:类和对象

1.类为何物?

类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。

2.对象为何物?

对象(实例):实际存在的该类事物的每个个体,是具体的。

类可以视为一个集合,对象可以视为其中的元素。

3.类的成员

类的成员包括:成员变量(属性),成员方法(函数)。

4.如何完成面向对象?

(1)类的定义:使用关键字:class。

[修饰符] class 类名{
    属性声明;
    方法声明;
}

public class Person{
//声明成员变量(属性)
String name;//声明成员方法(函数)
public void study(){
System.out.println("人学习");}}

(2)对象的创建

        ①创建对象,使用关键字:new

        ②语法:

//方式1:给创建的对象命名

//把创建的对象用一个引用数据类型的变量保存起来,这样就可以反复使用这个对象了

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

//方式2:

new 类名()//也称为匿名对象

public class PersonTest {public static void main(String[] args) {Person p1 = new Person();  }
}

(3)对象调用属性或方法

①对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。

②使用" 对象名.属性 " 或 " 对象名.方法 "的方式访问对象成员(包括属性和方法)

③举例:

public class PersonTest {public static void main(String[] args) {Person p1 = new Person();p1.name = "theodore_1022";p1.study();System.out.println(p1.name);}
}

④匿名对象

  • 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。 如:new Person().eat();
  • 使用情况如果一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
  • 我们经常将匿名对象作为实参传递给一个方法调用。

三、类的成员——变量

1.如何声明变量

[修饰符1] class 类名{

  [修饰符2] 数据类型 成员变量名 [= 初始化值];

}

说明:

  • 位置要求:必须在类中,方法外 。
  • 常用的权限修饰符有:private、缺省、protected、public。其他修饰符:static、final。
  • 数据类型 任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
  • 成员变量名属于标识符,符合命名规则和规范即可。
  • 初始化值根据情况,可以显式赋值;也可以不赋值,使用默认值。

举例:

public class Person{private int age;  //声明private变量 agepublic String name = “theodore”;  //声明public变量 name
}

2.成员变量与局部变量

  • 在方法体外,类体内声明的变量称为成员变量。
  • 在方法体内部等位置声明的变量称为局部变量。

(1)相同点

  • 变量声明的格式相同: 数据类型 变量名 = 初始化值
  • 变量必须先声明、后初始化、再使用。
  • 变量都有其对应的作用域。只在其作用域内是有效的

(2)不同点

  • 声明位置和方式 (1)实例变量:在类中方法外 (2)局部变量:在方法体{}中或方法的形参列表、代码块中
  • 在内存中存储的位置不同 (1)实例变量:堆 (2)局部变量:栈
  • 生命周期 (1)实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消 亡, 而且每一个对象的实例变量是独立的。 (2)局部变量:和方法调用的生命周期一样,每一次方法 被调用而在存在,随着方法执行的结束而消亡, 而且每一次方法调用都是独立。
  • 作用域 (1)实例变量:通过对象就可以使用,本类中直接调用,其他类中“对象.实例变量” (2)局部变量:出了作用域就不能使用
  • 修饰符 (1)实例变量:public,protected,private,final,volatile,transient等 (2)局部变 量:final 6、默认值 (1)实例变量:有默认值 (2)局部变量:没有,必须手动初始化。其中的形参比较特殊, 靠实参给它初始化。

(3)举例

public class Person{//声明成员变量(属性)String name;//声明成员方法(函数)public void study(){String name1 = "ttt";   //局部变量System.out.println("人学习");}
}

四、类的成员——方法

1.什么是方法?

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。(方法/函数/过程)
  • 将功能封装为方法的目的是,可以实现代码重用,减少冗余,简化代码。
  • Java里的方法不能独立存在 ,所有的方法必须定义在类里。

2.格式

[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]{        

                方法体的功能代码

}

3.调用实例方法

(1)格式

对象.方法名([实参列表])

  • 必须先声明后使用,且方法必须定义在类的内部。
  • 调用一次就执行一次,不调用不执行。
  • 方法中可以调用类中的方法或属性,不可以在方法内部定义方法。

(2)举例

public class Person{public static void main(String[] args) {Person p = new Person();p.name = "theodore";p.study();System.out.println(p.name);}//声明成员变量(属性)String name = "Theodore";//声明成员方法(函数)public void study(){String name1 = "ttt";   //局部变量System.out.println("人学习");}}

4.方法的重载

(1)概念及特点

  • 方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。 参数列表不同,意味着参数个数或参数类型的不同。
  • 重载的特点:与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参 数类型)。调用时,根据方法参数列表的不同来区别。
  • 重载方法调用:JVM通过方法的参数列表,调用匹配的方法。 先找个数、类型最匹配的 再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错

(2)形参与实参

  • 形参:在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。
  • 实参:在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。

(3)可变个数的形参

方法名(参数的类型名 ...参数名)

  • 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  • 可变个数形参的方法与同名的方法之间,彼此构成重载
  • 可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。
  • 方法的参数部分有可变形参,需要放在形参声明的最后
  • 在一个方法的形参中,最多只能声明一个可变个数的形参

五、对象数组

1.定义

        数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。

2.注意

        对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建, 数组的元素的默认值就是 null ,所以很容易出现 空指针异常NullPointerException 。

3.举例

public class Student {public String name;public int age;public int grade;
}public class Test01 {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new Student();students[0].name = "张三";students[0].age = 18;students[0].grade = 12;students[1] = new Student();students[1].name = "李四";students[1].age = 17;students[1].grade = 11;students[2] = new Student();students[2].name = "王五";students[2].age = 19;students[2].grade = 12;students[3] = new Student();students[3].name = "赵六";students[3].age = 18;students[3].grade = 10;students[4] = new Student();students[4].name = "小七";students[4].age = 16;students[4].grade = 9;// 输出每个学生的信息for (Student student : students) {System.out.println("姓名:" + student.name + ",年龄:" + student.age + ",年级:" + student.grade);}// 计算平均年龄int totalAge = 0;for (Student student : students) {totalAge += student.age;}double averageAge = (double) totalAge / students.length;System.out.println("平均年龄为:" + averageAge);}
}

六、类的成员——构造器

1.作用

  • new对象,并在new对象的时候为实例变量赋值。
  • eg.Person p = new Person(“Theodore”,22) ;

2.格式

[修饰符] class 类名{  

         [修饰符] 构造器名(){  

                // 实例初始化代码

          }  

[修饰符] 构造器名(参数列表){      

         // 实例初始化代码

  }

3.说明

  • 构造器名必须与它所在的类名必须相同。
  • 它没有返回值,所以不需要返回值类型,也不需要void。
  • 构造器的修饰符只能是权限修饰符,不能被其他任何修饰。比如,不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值。

4.代码

ublic class Student {private String name;private int age;// 无参构造public Student() {}// 有参构造public Student(String n,int a) {name = n;age = a;}public String getName() {return name;}public void setName(String n) {name = n;}public int getAge() {return age;}public void setAge(int a) {age = a;}public String getInfo(){return "姓名:" + name +",年龄:" + age;}
}
public class TestStudent {public static void main(String[] args) {//调用无参构造创建学生对象Student s1 = new Student();//调用有参构造创建学生对象Student s2 = new Student("Theodore",22);System.out.println(s1.getInfo());System.out.println(s2.getInfo());}
}

5.补充

  • 当我们没有显式的声明类中的构造器时,系统会默认提供一个无参的构造器并且该构造器的修饰 符默认与类的修饰符相同。
  • 当我们显式的定义类的构造器以后,系统就不再提供默认的无参的构造器了。
  • 在类中,至少会存在一个构造器。
  • 构造器是可以重载的。

总结

        本篇对JAVA的类以及三个成员进行了详细介绍,便于理解和复习。部分内容源自网络,如有侵权,请联系作者删除,谢谢!

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

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

相关文章

大模型时代的向量数据库

向量数据库专门用于存储和处理向量数据。它的能够高效地存储和检索向量数据,使开发者能够进行高级的相似性搜索和分析。 在大模型时代,文本、图像、音频和其他非结构化数据,通常被嵌入到一定维度的向量空间,使用向量数据库能够高效…

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023 前言 相关个性化生成论文推荐简介问题定义方法损失函数实验结果 前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手…

中间件模版引擎

文章目录 中间件1.自定义中间件1)全局2)局部中间件 2.内置中间件(静态资源目录) Art-template1.模板语法1)输出2)原文输出3)条件判断4)循环5)子模版6)模版继承7&#xff…

vue-Dialog 自定义title样式

展示结果 vue代码 <el-dialog :title"title" :visible.sync"classifyOpen" width"500px" :showClose"false" class"aboutDialog"> <el-form :model"classifyForm" :rules"classifyRules">…

【OJ】C++ | 二叉树进阶 · 合集(2)

摘要&#xff1a;根据二叉树创建字符串、二叉树的最近公共祖先、二叉树的层序遍历 前言&#xff1a;承接上文&#xff0c;本文继续提供二叉树进阶有关题目的解法。如有错误&#xff0c;烦请指正。 目录 1. 根据二叉树创建字符串 题解及代码 2. 二叉树的最近公共祖先 题解及…

Java | Leetcode Java题解之第121题买卖股票的最佳时机

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxProfit(int prices[]) {int minprice Integer.MAX_VALUE;int maxprofit 0;for (int i 0; i < prices.length; i) {if (prices[i] < minprice) {minprice prices[i];} else if (prices[i] -…

用幻灯片讲解C++中的C语言风格数组

用幻灯片讲解C中的C语言风格数组 1.栈内存中的C风格数组 糟糕的可用性&#xff0c;但你将在遗留代码中看到它们。相同类型的对象块。大小必须是常量表达式。第一个元素的索引为0&#xff0c;即数组索引从0开始。 注意一下数组的初始化&#xff0c;使用了C11标准之后的统一初始…

【2024年5月备考新增】】 考前篇(26)《必备资料(9) - 论文串讲-范围管理》

过程定义输入工具技术输出实际应用规划范 围管理编制范围管理计划: 书面描述将如何定 义、制定确认项目 范围的过程,其主 要作用是在整个项 目中对如何管理范 围提供指南和方向1、项目章程2、项目管理计划.质量管理计划 3、事业环境因素 .项目生命周期描4、组织过程资产 述.开…

react ant design Upload 多文件上传 beforeUpload 会调用很多次,怎么只获取一次

当使用Ant Design的Upload组件实现多文件上传时&#xff0c;beforeUploadHandler函数会被每个选中的文件调用一次。如果您只想获取一次选中的文件而不是每个文件都触发一次处理逻辑&#xff0c;可以采取以下方法&#xff1a; 使用 useRef 钩子保存文件列表&#xff1a;可以使用…

Nginx监控与告警:确保服务稳定运行

在今天的网络世界中&#xff0c;Nginx已经成为许多网站和应用程序的首选反向代理和Web服务器。然而&#xff0c;随着流量的增长和复杂性的增加&#xff0c;确保Nginx服务的稳定运行变得至关重要。本文将探讨如何有效地监控Nginx&#xff0c;并设置告警机制&#xff0c;以便在潜…

cefpython3打包windows应用

序 最近使用cefpython3开发程序&#xff0c;网上找了一圈打包工具都没有效果&#xff0c;最后在github中翻到使用cx_Freeze进行打包。 代码 from distutils.sysconfig import get_python_lib from os.path import join from glob import glob from cx_Freeze import setup, …

数学建模--特殊的图

目录 1.二部图 &#xff08;1&#xff09;简单认识 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;判定定理 &#xff08;4&#xff09;定理理解 2.匹配问题 &#xff08;1&#xff09;匹配 &#xff08;2&#xff09;完备&&完美匹配 &#xff08;3…

JTS库的讲解及使用

JTS&#xff08;Java Topology Suite&#xff09;是一套用于创建、操作和分析二维几何对象的Java库。JTS提供了丰富的几何操作和分析功能&#xff0c;是GIS&#xff08;地理信息系统&#xff09;应用中的重要工具。以下是JTS库的一些主要功能及其详细使用示例&#xff1a; 1. …

【Python】使用 Pandas 进行均值填充:处理缺失数据的实用指南

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在数据分析…

Python 入门教程详细版全集(两周速成)

一、初始Python 打开CMD&#xff08;命令提示符&#xff09;程序&#xff0c;输入Python并回车。然后&#xff0c;在里面输入代码回车即可立即执行。 Tip1:找不到“命令提示符”程序在哪里&#xff1f; 使用快捷键&#xff1a;win r;打开运行框&#xff0c;输入cmd后回车即可…

点点点还有没有做下去的必要

大家好&#xff0c;我是洋子&#xff0c;最近工作特别忙&#xff0c;好久没更文章了 因为组织架构调整&#xff0c;原先的组长调离我所在已经3年多的业务线&#xff0c;我就承担起组长的角色了&#xff0c;除了日常跟进需求测试&#xff0c;还跟RD、跨业务线负责人开会&#x…

chat2-Client发送数据给Server

本文档描述了Client发送消息给Server&#xff0c; Server端打印接收的消息 一、Client 1.1.客户端的类Client.java中添加如下的start()方法 (表示启动客户端功能的方法)&#xff0c;并调用 /**start方法&#xff0c;作为客户端开始工作的方法*/ public void start(){ …

fastadmin 放服务器上后出现大量的502 亲身经历

fastadmin 放服务器上后出现大量的502 今天发生了一个特别无语的事情,那就是服务器上出现大量的502报错 因为之前一直都运行的好好的,突然今天就开始不间断的报502的错误,最开始我没有怀疑到服务器上,浪费了一天的时间进行排查! 因为域名挂在cf上,然后我又在cf上做了各种…

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…

深入解析Java中List和Map的多层嵌套与拆分

深入解析Java中List和Map的多层嵌套与拆分 深入解析Java中List和Map的多层嵌套与拆分技巧 &#x1f4dd;摘要引言正文内容什么是嵌套数据结构&#xff1f;例子&#xff1a; 遍历嵌套List和Map遍历嵌套List遍历嵌套Map 拆分嵌套数据结构拆分嵌套List拆分嵌套Map &#x1f914; Q…