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.rhkb.cn/news/285002.html

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

相关文章

【旅游景点项目日记 | 第二篇】基于Selenium爬取携程网景点详细数据

文章目录 3.基于Selenium爬取携程网景点详细数据3.1前提环境3.2思路3.3代码详讲3.3.1查询指定城市的所有景点3.3.2获取详细景点的访问路径3.3.3获取景点的详细信息 3.4数据库设计3.5全部代码3.6效果图 3.基于Selenium爬取携程网景点详细数据 3.1前提环境 确保安装python3.x环…

React高阶组件(HOC)

高阶组件的基本概念 高阶组件&#xff08;HOC&#xff0c;Higher-Order Components&#xff09;不是组件&#xff0c;而是一个函数&#xff0c;它会接收一个组件作为参数并返回一个经过改造的新组件&#xff1a; const EnhancedComponent higherOrderComponent(WrappedCompo…

腾讯云GPU云服务器_GPU云计算_异构计算_弹性计算

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

HarmonyOS实战开发-如何使用首选项能力实现一个简单示例。

介绍 本篇Codelab是基于HarmonyOS的首选项能力实现的一个简单示例。实现如下功能&#xff1a; 创建首选项数据文件。将用户输入的水果名称和数量&#xff0c;写入到首选项数据库。读取首选项数据库中的数据。删除首选项数据文件。 最终效果图如下&#xff1a; 相关概念 首选…

学习vue3第十节(插槽v-slot)

本节主要介绍一下 v-slot 插槽指令&#xff0c;以及插槽相关内容 1、定义&#xff1a; 子组件给父组件提供使用的一个位置&#xff0c;使用<slot></slot>表示&#xff0c;父组件可以在这个位置填充任何代码&#xff1b; 2、默认插槽 匿名插槽&#xff1a;会自定…

简单使用Swagger

文章目录 1、介绍2、 使用步骤3、 常用注解 1、介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接口的文…

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

微信小程序实现多张照片上传

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;code袁 &#x1f4a5; 所属专栏&…

第一篇:概述、 目录、适用范围及术语 --- IAB/MRC《增强现实(AR)广告(效果)测量指南1.0 》

第一篇&#xff1a;概述、目录、适用范围及术语 - IAB与MRC及《增强现实广告效果测量指南1.0》 --- 我为什么要翻译美国IAB科技公司系列标准 ​​​​​​​​​​​​​​ 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效…

6.3 BP神经网络

在多层感知器被引入的同时&#xff0c;也引入了一个新的问题&#xff1a;由于隐藏层的预期输出并没有在训练样例中给出&#xff0c;隐藏层结点的误差无法像单层感知器那样直接计算得到。 为了解决这个问题&#xff0c;反向传播&#xff08;BP&#xff09;算法被引入&#xff0…

推荐一种Bean注入方式——开发经验

我们都知道三种Bean注入的方式分别是属性注入&#xff0c;setter方法注入&#xff0c;构造器注入。这三种Bean注入的方式各有优缺点&#xff0c;但是相对来说更推荐使用构造器注入的方式。 1、构造器注入的优缺点 优点&#xff1a; 1、可以注入不可变对象 因为构造方法注入是…

Redis技术学习|实战项目记录|商户缓存

学习资料声明 黑马程序员的Redis学习视频&#xff1a;黑马程序员Redis入门到实战教程 需要用到的知识&#xff1a;linux&#xff08;推荐韩顺平老师的教程&#xff0c;学到p30&#xff0c;创建好虚拟机和简单的几个命令就好。&#xff09;SSM。SpringBoot。 还用到了MybatisPl…

mac 解决随机出现的蓝色框

macbookair为什么打字的时候按空格键会出现蓝色框? - 知乎

c#矩阵求逆

目录 一、矩阵求逆的数学方法 1、伴随矩阵法 2、初等变换法 3、分块矩阵法 4、定义法 二、矩阵求逆C#代码 1、伴随矩阵法求指定3*3阶数矩阵的逆矩阵 &#xff08;1&#xff09;伴随矩阵数学方法 &#xff08;2&#xff09;代码 &#xff08;3&#xff09;计算 2、对…

橘子疾病检测4种YOLOV8

橘子检测YOLOV8&#xff0c;检测4种疾病&#xff0c;采用YOLOV8-NANO&#xff0c;训练得到PT模型转换成ONNX&#xff0c;最后OPENCV调用&#xff0c;支持C/PYTHON/ANDROID 橘子检测YOLOV8&#xff0c;检测4种疾病

阿里云4核16G服务器优惠价格26元1个月、149元半年

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年。2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也…

Ubuntu18.04桌面版设置静态IP地址

引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置&#xff0c;可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框&#xff0c;点击“设置”按…

206.反转链表

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理

简介 RK3588是瑞芯微&#xff08;Rockchip&#xff09;公司推出的一款高性能、低功耗的集成电路芯片。它采用了先进的28纳米工艺技术&#xff0c;并配备了八核心的ARM Cortex-A76和Cortex-A55处理器&#xff0c;以及ARM Mali-G76 GPU。该芯片支持多种接口和功能&#xff0c;适…

Python Flask 将数据传递给前端

from flask import Flask, render_templateapp Flask(__name__)app.route("/index") def index():data {name: "张三","age": 18,}return render_template("index2.html", datadata)if __name__ __main__:app.run()<!DOCTYPE ht…