JAVA学习笔记19(面向对象编程)

1.面向对象编程

1.1 类与对象

1.类与对象的概念

​ *对象[属性]/[行为]

​ *语法

class cat
{String name;int age;
}main()
{//cat1就是一个对象//创建一只猫Cat cat1 = new Cat();//给猫的属性赋值cat1.name = "123";cat1.age = 10;
}

​ *类是抽象的,概念的,代表一类事物,比如人类,猫类…即它是数据类型

​ *对象是具体的,实际的,代表一个具体事物,即是实例

​ *类是对象的模板,对象是类的一个个体

2.类与对象在内存中的存在形式

在这里插入图片描述

3.属性概念

​ *成员变量 = 属性 = field(字段)

​ *属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象,数组)

4.属性注意事项和细节

1.属性的定义语法同变量

eg:访问修饰符 属性类型 属性名;

​ *访问修饰符:控制属性的访问范围

​ public,protected,默认,private

2.属性的定义类型可以为任意类型,包含基本类型或引用类型

3.属性如果不赋值,有默认值,规则和数组一致

Person p1 = new Person();
//p1是对象名(对象引用)
//new Person() 创建的对象空间(数据)才是真正的对象

5.如何创建对象

1.先声明再创建

​ Cat cat; //声明对象cat

​ cat = new Cat(); //创建
2.直接创建

​ Cat cat = new Cat();

6.如何访问属性

​ *语法:

对象名.属性名;

eg:

cat.name;

cat.age;

7.类与对象的内存分配机制

在这里插入图片描述

​ *类与对象赋值直接赋值地址

8.Java内存的结构分析

1.栈:一般存放基本数据类型(局部变量)

2.堆:存放对象(Cat cat ,数组等)

3.方法区:常量池(常量,比如字符串),类加载信息

1.2 成员方法

​ *在某些情况下,我们需要定义成员方法(简称方法),比如人类,除了有一些属性外(年龄,姓名…),还有一些行为比如:说话,跑步…

class Person
{String name;int age;//添加speak成员方法//1.public 表示方法是公开//2.void 表示方法没有返回值//3.speak() speak是方法名,()形参列表//4.{}方法体,可以写我们要执行的代码public void speak(){System.out.println("我是一个好人");}//(int n)形参列表public void cal02(int n){int res =0;for(int i =1;i<=n;i++){res += i;}System.out.println("cal02计算结果为:" + res);}
}main()
{Person p1 = new Person();p1.speak();	//调用方法
}

1.方法的调用机制

在这里插入图片描述

2.成员方法的好处

​ *提高代码的复用性(可以不用重复写方法)

​ *可以将实现的细节封装起来,然后供其他用户来调用即可

3.成员方法的定义

​ *语法:

public(访问修饰符 ) 返回数据类型 方法名 (形参列表)
{方法语句;return 返回值;
}

1.形参列表:表示成员方法输入cal(int n),getSum(int num1, int num2)

2.返回数据类型:表示成员方法输出,如果为void,表示没有返回值

3.方法主体:表示为了实现某一功能代码块

4.return语句不是必须的

4.成员方法的注意事项和细节

*访问修饰符

(作用是控制 方法使用的范围)

​ 如果不写默认访问,[有四种:public, protected,默认, private]

*返回类型

1.一个方法最多有一个返回值(可以返回数组得到多个值)

class AA
{public int[] getSumAndSub(int n1, int n2){int[] resArr = new int[2];resArr[0] = n1 + n2;resArr[1] = n1 - n2;return resArr;}
}

2.返回类型可以为任意类型,包含基本类型和引用类型(数组,对象)

3.如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return 值,而且要求返回值类型必须和return的值类型一致或者兼容

4.如果返回值为void,则方法中可以没有return,或者只写return

*形参列表

1.一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开,比如getSum(int n1, int n2);

2.参数类型可以为任意类型,包含基本类型或引用类型,比如printArr(int[] map);

3.调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数

4.实参和形参的类型要一致或兼容、个数、顺序必须一致

*方法体

​ *里面写完成功能的具体语句,方法之中不能再定义方法

class AA
{public void f4(){//public void f5(){};	//错误写法}
}
*方法调用细节

1.同一个类中的方法调用:直接调用即可

class A{public void print(intn){System.out.println("方法调用 n="+ n);}public void sayOk(){//Sayok调用printprint(10);}
}

2.跨类中的方法A类调用B类方法:需要通过对象名调用,比如对象名.方法名(参数); //在A类中创建B类,再调用方法

class A{public void print(intn){System.out.println("方法调用 n="+ n);}public void sayOk(){//Sayok调用printprint(10);}public void m1(){//创建B对象B b = new B();b.hi();}
}class B{public void hi(){System.out.println("B类中的hi()被执行");}
}

3.跨类的方法调用和方法的访问修饰符相关

​ *方法传参的机制

1.基本数据类型,传递的是值拷贝,形参的任何改变不影响实参

2.引用数据类型的传参机制,适用于数组和自定义数据类型。

​ *引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参

class B{public void test100(int[] arr){arr[0] = 200;	//修改元素//遍历数组System.out.println("test100的数组arr");for(int i =0;i<arr.length;i++){System.out.print(arr[i]+"\t");}}public void test200(Person p){p.age = 10000;}
}class Person
{String name;int age;
}main()
{B b = new B();int[] arr = {1,2,3};b.test100(arr);//调用方法System.out.println("main的arr数组");//遍历数组for(int i =0;i<arr.length; i++){System.out.print(arr[i]+"\t");}System.out.println();Person p = new Person();p.name = "jack";p.age = 10;b.test200(p);	//传的是p的地址System.out.println(p.age);
}
class B{public void test200(Person p){p = null;	//只是把形参p的名字指向了null,不影响实参p,因此外面输出的还是10}
}class Person
{String name;int age;
}main()
{B b = new B();Person p = new Person();p.name = "jack";p.age = 10;b.test200(p);	//传的是p的地址System.out.println(p.age);
}

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

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

相关文章

前端使用正则表达式进行校验

一、定义 设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的。 在 JavaScript中&#xff0c;正则表达式也是对象&#xff0c;构建正则表达式有两种方式&#x…

【可用Claude Opus模型】Claude3国内镜像站,亲测完全超越GPT-4(可用Claude Opus,官网价值20刀)

#今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用Claude 3吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像站到处都是…

探索LLaMA模型:架构创新与Transformer模型的进化之路

引言 在人工智能和自然语言处理领域&#xff0c;预训练语言模型的发展一直在引领着前沿科技的进步。Meta AI&#xff08;前身为Facebook&#xff09;在2023年2月推出的LLaMA&#xff08;Large Language Model Meta AI&#xff09;模型引起了广泛关注。LLaMA模型以其独特的架构…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

2024年洗地机综合实力排行榜:谁才是真正的洗地神器?

近年来&#xff0c;洗地机在行业里&#xff0c;它集合了扫地和拖地以及自动清洁和除菌的功能&#xff0c;备受人们的喜爱&#xff0c;尤其是平时忙于工作并没有多少时间清洁家务的用户&#xff0c;但是对于第一次接触洗地机的用户来说&#xff0c;怎么选购洗地机也是个问题&…

初识React(一)从井字棋游戏开始

写在前面&#xff1a; 磨磨唧唧了好久终于下定决心开始学react&#xff0c;刚刚接触感觉有点无从下脚...新的语法新的格式跟vue就像两种物种...倒是很好奇路由和store是怎么实现的了~v~&#xff0c;一点一点来吧&#xff01;&#xff01;&#xff01; (一)创建项目 使用vite…

蓝桥杯算法 - DP

上一篇&#xff1a;[[蓝桥杯算法-排序、递归、全排列]] 动态规划&#xff08;dp&#xff09; dp即动态规划&#xff0c;常用于&#xff1a;数学&#xff0c;计算机科学&#xff0c;管理学&#xff0c;经济和生物信息学。 dp在生活中也很常见&#xff0c;如&#xff1a;你今天…

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…

1.4.2 练习

一、颠倒三角形 题目&#xff1a;修改顶点着色器让三角形上下颠倒 更改顶点着色器代码如下&#xff1a; #version 330 corelayout (location 0) in vec3 aPos; //位置变量的属性位置值为0 layout (location 1) in vec3 aColor; //颜色变量的属性位置值为1out vec3 ourColo…

项目配置之道:优化Scrapy参数提升爬虫效率

前言 在当今信息时代&#xff0c;数据是无处不在且无比重要的资源。为了获取有效数据&#xff0c;网络爬虫成为了一项至关重要的技术。Scrapy作为Python中最强大的网络爬虫框架之一&#xff0c;提供了丰富的功能和灵活的操作&#xff0c;让数据采集变得高效而简单。本文将以爬…

线程和进程有什么区别?

1、典型回答 进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中两个重要的概念&#xff0c;都是用来执行任务的&#xff0c;它们的定义如下&#xff1a; 进程是指计算机中正在运行的程序的实例。每个进程都有自己的地址空间、内存、文件…

生成词云...

import wordcloud import jieba import PIL import numpy as np import matplotlib.pyplot as plt import jieba.analyse image_background PIL.Image.open(/home/back/pythonclass/11.jpg) #遮罩 MASK np.array(image_background) txtopen("/home/back/pythoncla…

如何本地部署Imagewheel并实现无公网IP远程连接打造个人云图床

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Mysql数据库——数据备份与恢复

目录 一、数据备份的重要性 二、数据库备份的分类 1.从物理与逻辑的角度分类 2.从数据库的备份策略角度&#xff0c;备份可分为 2.1完全备份 2.2差异备份 2.3增量备份 2.4总结 三、常见的备份方法 四、Mysql数据库完全备份 1.完全备份定义 2.优缺点 3.数据库完全备…

2024南京人工智能展会:定于2024年11月份在南京国际博览中心举行

2024南京国际人工智能展览会&#xff0c;拟定于2024年11月份在南京国际博览中心隆重召开。这一盛大的科技盛宴&#xff0c;无疑将为全球人工智能领域注入新的活力&#xff0c;推动科技创新与社会进步。 此次展览会将以“智能未来&#xff0c;共创辉煌”为主题&#xff0c;汇聚全…

Hbase 王者荣耀数据表 HBase常用Shell命令

大数据课本&#xff1a; HBase常用Shell命令 在使用具体的Shell命令操作HBase数据之前&#xff0c;需要首先启动Hadoop&#xff0c;然后再启动HBase&#xff0c;并且启动HBase Shell&#xff0c;进入Shell命令提示符状态&#xff0c;具体命令如下&#xff1a; $ cd /usr/local…

解决论文中插入图片显示不完整

点击图片-开始&#xff0c;找到段落中右下角 将行距改为单倍行距

CDP7 下载安装 Flink Percel 包

下载链接&#xff1a;https://www.cloudera.com/downloads/cdf/csa-trial.html 点击后选择版本&#xff0c; 然后点击download now&#xff0c;会有一个协议&#xff0c;勾选即可&#xff0c;然后就有三个文件列表&#xff0c; 我这里是已经注册登录的状态&#xff0c;如果没…

链式二叉树经典OJ题目(一)

目录 结构体声明&#xff1a; 1.单值二叉树 题目描述&#xff1a; 思路分析&#xff1a; 源码&#xff1a; 2.二叉树最大深度 题目描述&#xff1a; 思路分析&#xff1a; 源码&#xff1a; 3.检查两棵树是否相同 题目描述&#xff1a; 思路分析&#xff1a; 源码…

YOLOv9改进策略:卷积魔改 | SCConv:空间和通道重建卷积,即插即用,助力检测 | CVPR2023

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; CVPR2023 SCConv 由两个单元组成&#xff1a;空间重建单元&#xff08;SRU&#xff09;和通道重建单元&#xff08;CRU&#xff09;。 SRU利用分离重建方法来抑制空间冗余&#xff0c;而CRU使用分割-变换-融…