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调用print
        print(10);
    }
}

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

class A{
    public void print(intn)
    {
		System.out.println("方法调用 n="+ n);
    }
    
    public void sayOk()
    {
        //Sayok调用print
        print(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);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯真题:幸运数字

这道题可以用 integer.string&#xff08;&#xff09;求每个进制的数&#xff0c;但这里要每一位数相加&#xff0c;所以用这个方法会比较麻烦&#xff0c;如下 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scan new Sc…

电脑不能读取移动硬盘,但是可以读取U盘解决方法

找到此电脑 右键设备管理器&#xff0c;找到其中的通用串行总线控制器。 注意&#xff0c;凡是插入到电脑当中不能读取的U盘或者移动硬盘&#xff0c;都会在通用串行总线控制器当中显示为USB大容量存储设备 鼠标选中“USB大容量存储设备”&#xff0c;右键卸载它。此时&#x…

软件应用,宠物医院兽医开的处方单管理系统软件教程,宠物店营业软件教程

软件应用&#xff0c;宠物医院兽医开的处方单管理系统软件教程&#xff0c;宠物店营业软件教程 一、前言 以下软件操作教程以 佳易王宠物医院兽医处方软件V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 在开处方单的时候&#xff0c;可以打…

【Flink】WaterMark 实战

WaterMark 实战 1.WaterMark 触发详解2.实际案例 1.WaterMark 触发详解 例如&#xff0c;现在我们有了一个 [12:00:00-12:00:10) 的时间窗口&#xff0c;现在事件如下图所示顺序 A、B、C、D、E、F … 到达。 在未设置 WaterMark 的情况下&#xff0c;当元素 C 到达的时候&…

[AIGC] Redis基础命令集详细介绍

Redis是一个强大的开源的键-值存储系统&#xff0c;被广泛应用于各种应用程序中。在使用Redis时&#xff0c;我们需要掌握一些基本的Redis命令来操作存储在其上的数据。这篇文章将向你介绍一些基本的Redis命令&#xff0c;让你能够更好地使用和理解Redis。 文章目录 启动Redis…

Camera入门基础知识

一、camera介绍 1.1 camera硬件组成 camera一般由Lens、VCM音圈马达、底座支架、Sensor、Driver IC、output interface组成。如下图: 这里面要注意的是有些摄像头模组有VCM,有些则没有,有些output interface输出的是CSI信号,有的输出的是串行信号,需要接解串器。…

可变参数 --java学习笔记

可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;格式是:数据类型..参数名称 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它好处:常常用来灵活的接收数据 可变参数的注意事项: 可…

js教程(8)

一、事件流 1.概述 在JavaScript中&#xff0c;事件流描述的是事件在DOM结构中传播和被处理的顺序。事件流分为冒泡阶段和捕获阶段。 冒泡阶段&#xff08;Bubbling Phase&#xff09;&#xff1a;事件首先从最内层的元素开始向父级元素传播&#xff0c;一直传播到最外层的元素…

树型结构、二叉树、二叉树的创建销毁、二叉树的四种遍历、二叉树层序遍历与队列结合

我要成为嵌入式高手之3月23日数据结构第六天&#xff01;&#xff01; ———————————————————————————— 树形结构 特性&#xff1a; 一对多 概念&#xff1a; 由n个结点组成的有限集 有一个根结点&#xff1b;其他结点只有一个前驱结点&#xff…

图论基础|841.钥匙和房间、463. 岛屿的周长

目录 841.钥匙和房间 思路&#xff1a;本题是一个有向图搜索全路径的问题。 只能用深搜&#xff08;DFS&#xff09;或者广搜&#xff08;BFS&#xff09;来搜。 463. 岛屿的周长 841.钥匙和房间 力扣题目链接 (opens new window) 有 N 个房间&#xff0c;开始时你位于 0…

Windows Server 2016 配置NTP客户端

目录 1. 前提条件1.1 进入服务管理界面1.2 开启Windows Time服务 2. 情况1&#xff1a;可以直接设置NTP时钟2.1 Internet时间设置 3. 情况2&#xff1a;有的版本服务器上没有“Internet时间”3.1 运行gpedit.msc 打开本地策略组3.2 Windows 时间服务3.3 配置Windows NTP客户端3…

2023年天府杯全国大学生数学建模竞赛A题震源属性识别模型构建与震级预测解题全过程文档及程序

2023年天府杯全国大学生数学建模竞赛 A题 震源属性识别模型构建与震级预测 原题再现&#xff1a; 地震是一种较为复杂的地壳运动现象&#xff0c;全世界每年发生的地震灾害事故不计其数。旨在减少地震灾害的地震预警预报技术需要在日常地震监测中有效识别出天然地震事件&…

go面向对象

继承 封装 多态 定义结构体 //定义老师的结构体 type Teacher struct {Name stringAge intSchool string }func main() {var t1 Teacherfmt.Println(t1)t1.Name "tom"t1.Age 20t1.School "school"fmt.Println(t1) } 结构体实例的创建 package ma…

springboot项目中,子模块中无法引入父模块中类

问题&#xff1a; 当前模块kangning_admin中想引入 com.google.code.kaptcha.Producer类&#xff0c;但是当前模块中没有该类 解决办法 1、在pom.xml文件上右键---Maven---Reload project 重新加载pom文件中的依赖 2、 在Idea的右边Maven窗口&#xff0c;在根目录上执行cle…

基于SpringBoot的会员制医疗预约服务管理信息系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统展示 系统功能模块 会员制医疗预约服务管…

02课程发布模块之部署Nginx

部署Nginx 部署网关 通过Nginx访问后台网关&#xff0c;然后由网关再将请求转发到具体的微服务,网关会把请求转发到具体的服务 upstream gatewayserver{server 127.0.0.1:63010 weight10; } # 网站首页对应的虚拟机 server {listen 80;server_name www.51xuecheng.cn…

Java 沉淀-2

一维数组 初始化&#xff1a; 动态初始化&#xff1a;数组声明且为数组元素分配空间与赋值操作分开进行 静态初始化&#xff1a;在定义数组的同时就为数组元素分配空间并赋值 数组元素类型 二维数组 数组中的数组 初始化 注意特殊学法情况&#xff1a;int[]x,y[]: x是一维数…

数据库范式拆分实战

函数依赖 如果给定一个X&#xff0c;能唯一确定一个Y&#xff0c;就称X确定Y&#xff0c;或者说Y依赖于X&#xff0c;例如Y X*X函数。 X -> Y&#xff08;X确定Y&#xff0c;Y依赖于X&#xff09; 部分函数依赖 A可确定C&#xff0c;&#xff08;A&#xff0c;B&#xff09…

[金三银四] 操作系统上下文切换系列

图源&#xff1a; https://zhuanlan.zhihu.com/p/540717796 文章目录 2.11 cpu 的上下文切换2.12 协程的上下文切换2.13 线程的上下文切换2.14 进程的上下文切换2.15 中断上下文切换2.16 什么时候会发生进程的上下文切换2.17 什么时候会发生线程的上下文切换2.18 什么时候会发生…

程序汪保姆教程在linux上部署运行一套SpringBoot内容管理系统

❝ 程序汪已经分享了很多开源项目了&#xff0c;发现一个痛点很多人拿到开源项目了不会部署运行&#xff0c;光看代码很多人看不下去的&#xff08;程序汪也是这样&#xff09;&#xff0c;程序汪建议拿到开源项目了&#xff0c;一定要想办法把项目运行起来跑跑&#xff0c;然后…