学会这些掌控雷电,面向对象的知识掌握之方法及方法重载

在学习下面的知识的时候,要注意把我的前一篇文章回顾一下哦学会这些掌控雷电,面向对象之类与对象

一、带参方法

带参方法无非就是在方法名之后加上了参数(形式参数:即参数的形式),注意里面写入的是参数类型与参数名称,举个例子:
pulic void zhaZhi(String fruit){
//编写内容
}
这里面的String fruit 即是带参方法的重点!
总体上:
1.定义带参数的方法:<访问修饰符>返回类型<方法名>(<形式参数列表>){
//方法的主体
}
2.调用带参数的方法
对象名.方法名(参数1,参数2…)重点:参数可以有多个!
pulic void zhaZhi(String fruit ,int num){
System.out.print(num+“杯”+fruit+“汁”);
}
在测试类的调用就如下:
对象名.zhaZhi(fruit,num);

二、带参方法使用注意事项

  1. 方法定义处的参数叫形式参数(形参),方法调用处传的值叫实际参数(实参)
  2. 带参方法,参数可以有多个,不同参数之间用逗号隔开
  3. 带参方法的参数名字可以随意取,符合变量命名规则
  4. 形参名字和实参名字可以不一样,但数据类型要一致,个数要一样,顺序要一样
  5. 方法有没有参数和方法有没有返回值,是两码事,毫无关系!

三、带参方法的应用

使用带参方法实现学员信息管理
增加学员姓名,并且指定区间查找,查找某个学生姓名并显示
!!!明确出属性与方法,一步步来。在方法里写逻辑
找到要定义的属性:学生姓名
找到要定义的方法:增加学生,显示姓名,查找学生
接下来先建立学员信息类:StudentMgr

//学生管理系统
public class StudentMgr {
    //属性:存放学生姓名的数组
    String[] names = new String[30];

    //方法1.增加学生姓名
    public void addName(String name) {
        for (int i = 0; i < names.length; i++) {
            if (names[i] == null) {
                names[i] = name;
                break;
            }
        }
    }

    //方法2.在固定区间内查找学生姓名
    //start:查找起始位置
    //end:查找结束位置
    //name:查找学生姓名
    public boolean searchName(int start, int end, String name) {
        boolean flag = false;
        for (int i = start - 1; i < end; i++) {
            if (name.equals(names[i])) {
                flag = true;
                break;
            }

        }
        return flag;
    }

    //方法3.显示学员信息
    public void showInfo(){
        System.out.println("本班学员列表:");
        for (int i = 0; i < names.length; i++) {
            if (names[i] != null){
                System.out.println(names[i]+"\t");
            }
        }
    }
}

接下来建立测试类:TestStudengMgr

import java.util.Scanner;

//信息管理系统测试类
public class TestStudentMgr {
    public static void main(String[] args) {
        //创建对象
        StudentMgr s = new StudentMgr();
        //调用属性和方法
        Scanner input = new Scanner(System.in);
        for (int i = 0; i <5 ; i++) {
            System.out.println("请输入第"+(i+1)+"个同学的姓名");
            String name =input.next();
            s.addName(name);
        }
        s.showInfo();
        //查找某个学生的信息
        System.out.println("请输入要查找的起始位置");
        int start =input.nextInt();
        System.out.println("请输入要查找的结束位置");
        int end =input.nextInt();
        System.out.println("请输入要查找的学生姓名");
        String findName = input.next();
        boolean flag = s.searchName(start,end,findName);
        if (flag ){
            System.out.println("恭喜您查找到了");
        }else {
            System.out.println("没在该范围内查找到");
        }
    }


}

运行结果如下:
在这里插入图片描述

四、方法传参

–基本&引用数据类型
当参数为基本数据类型时(int,double,boolean,float),传参时操作 传递的是变量的值, 改变一个变量的值并不会影响另一个变量的值。引用数据类型(类、数组和接口),赋值是把原对象的引用(可理解为内存地址)传递给另一个引用

—对象数组:传出的是一个数组
案例:使用学员对象数组作为参数,实现学员成绩修改。如果学员成绩小于60,将其成绩提高两分。

作答:首先我们先创造一个学生类给出学生的属性方法

public class Student {
    //属性:姓名,年龄,成绩
    String name;
    int age;
    double score;

    //方法:输出个人信息
    public void ShowInfo(){
        System.out.println(name+"的成绩是"+score);
    }
}

之后我们再建一个类,这个类用来操作学员的成绩,即题目的要求:低于60提高两分。

public class modifyStuScore {
    public void modifyStuScore(Student[] stus){
        for (int i = 0; i < stus.length; i++) {
            if (stus[i].score<60){
                stus[i].score+=2;
            }
        }
    }
    public void showStus(Student[] stus){
        for (Student stu : stus) {
            stu.ShowInfo();
        }
    }
}

最后建立测试类调用方法用来输出的学生及成绩

public class TestStudent {
    public static void main(String[] args) {
        modifyStuScore m =new modifyStuScore();
        Student s1=new Student();
        s1.name="张三";
        s1.score=43;
        Student s2=new Student();
        s2.name="李四";
        s2.score=67;
        Student s3=new Student();
        s3.name="王五";
        s3.score=100;
        Student[] stus =new Student[3];
        stus[0]=s1;
        stus[1]=s2;
        stus[2]=s3;
        m.showStus(stus);
        m.modifyStuScore(stus);
        System.out.println("**********改变后的成绩*************");
        m.showStus(stus);
    }
}

最后输入的话如下:

张三的成绩是43.0
李四的成绩是67.0
王五的成绩是100.0
**********改变后的成绩*************
张三的成绩是45.0
李四的成绩是67.0
王五的成绩是100.0

五、构造方法

1.无返回值类型
2.方法名与类名相同

目的:完成对象初始化
系统默认提供无参构造方法
可以指定参数
无参例如:public Student() {
}

那么带参构造方法是什么呢?
pulic Student(String n , int s){
name=n;//把n赋值给name
socre=s://把s赋值给socre
}

但是往往,我们会选择使用this即当前对象来赋值
例如:public Student(String name,int score){
this.name = name;
this.score = score;
}

那么,引申一下this关键字的用法
调用属性
this.health=100;
调用方法
this.print();
调用构造方法
this();
this(“小黑”,100);

使用带参构造方法,则系统不会自动提供无参构造方法

六、方法重载

构造方法重载:
方法名相同
参数项不同
与返回值、访问修饰符无关

方法重载:
同一个类中
方法名相同
参数个数或类型不同
与返回值、访问修饰符无关
实例:
实现简易计算器,分别实现两个整数、三个浮点数的加法运算

public class Calc {
    //加法:两个整数
    public void add(int num1,int num2){
        int sum =num1+num2;
        System.out.println(num1+"+"+num2+"="+sum);
    }
    //加法:两个浮点数
public void add(double num1 ,double num2){
        double sum =num1+num2;
    System.out.println(num1+"+"+num2+"="+sum);
}
    //加法:三个浮点数
    public void add(double num1,double num2,double num3){
        double sum =num1+num2+num3;
        System.out.println(num1+"+"+num2+"+"+num3+"="+sum);
    }

    public static void main(String[] args) {
        Calc c =new Calc();
        c.add(4,5);
        c.add(5.0,7.0);
        c.add(5.0,8.8,9.7);
    }
}

很明显的能看出同是使用了add方法,但是参数个数以及类型的不同导致了程序能够正常的运行,这就是方法重载。

七、成员变量和局部变量

变量声明的位置决定变量作用域
变量作用域确定可在程序中按变量名访问该变量的区域

在类中声明的变量为全局变量,在方法中声明的变量为局部变量成员变量的作用域为整个类,而局部变量的作用域是只有它的方法中。

初始值不同:
java会给成员变量一个初始值
java不会给局部变量赋予初始值,必须初始化赋值后才能使用

在不同的方法中,可以有同名的局部变量,互相独立。但是在同一个方法中,不可以有同名的局部变量

在同一个类中,局部变量和全局变量可以使用同名!

热门文章

暂无图片
编程学习 ·

搭建一个完整的微服务系统(四):微服务的公共依赖

任何一个系统中,都有一个或多个基础项目,可生成jar包给所有服务依赖。在本示例(工程basejar)中,我给大家找了一些常用的进行说明,这些内容和业务无关,大家可以直接使用。 幂等相关这部分包括:AutoIdempotent.java、AutoIdempotentInterceptor.java、TokenService.java三个…
暂无图片
编程学习 ·

半导体物理复习总结(五)——非平衡载流子

非平衡载流子 热平衡状态是指在一定温度下,半导体中的载流子浓度一定。载流子的产生与复合相等,载流子的浓度乘积一定。统一的费米能级是热平衡状态的标志。非平衡状态是指在外界因素的影响下,半导体平衡状态受到微扰,内部的载流子浓度产生涨落。 复合是电子和空穴被洇灭或…
暂无图片
编程学习 ·

mysql的语句执行原理详解

需求:select user,host from mysql.user; 以上面的一条命令为例,如何将数据返回的,下面进行详细的阐述:SQL层总结: 语法、语义(数据XX语言)、权限(grant)检查完毕后—> 根据解析器生成解析树—>优化器代价评估—>然后得出执行计划—>执行器执行—>在那…
暂无图片
编程学习 ·

最长重复子数组(java)

问题描述: 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 样例: 代码见下: package Leetcode; import java.util.Scanner; public class FindLength {public static int findLength(int[] A, int[] B) {//暴力破解int len1=A.length;int len2=B.…
暂无图片
编程学习 ·

面试必问之 == 与 equals

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖 equals() 方法。则通过 equals() 比…
暂无图片
编程学习 ·

什么是次世代游戏?科普次世代游戏角色制作过程

一、什么是次世代游戏 次世代这个名字源自日语,即下一个时代,未来的时代。既然说它来自最先进的时代,那么次世代游戏肯定相比传统游戏画质更高,品质更好呀。与传统游戏相比,次世代游戏能够以精简的面数表达出高精度模型效果,各种材质和纹理贴图效果也更写实,更注重质感的…
暂无图片
编程学习 ·

Android客户端调起地图定位不准,导航路线出现偏差,目的地坐标偏离

前言 APP调起地图导航出现偏差 是什么问题造成的呢 一:可能是模糊定位造成的 二:也有可能 改变了经纬度的数据 解决思路如下 先了解一下调起高德APP的各个参数是什么 百度地图 参数如下:参数名称 描述 是否必选 格式(示例)origin 起点名称或经纬度,或者可同时提供名称和经纬…
暂无图片
编程学习 ·

必应每日壁纸——7月

只分享,不科普 自行必应科普July1 Wednesday2 Thursday3 Friday4 Saturday5 Sunday6 Monday7 Tuesday8 Wednesday9 Thursday10 Friday11 Saturday12 Sunday July 1 Wednesday 班夫国家公园 莫兰湖德国卡塞尔威廉高地公园中的阿波罗神庙2 Thursday 3 Friday 4 Saturday 5 Sunda…
暂无图片
编程学习 ·

通过小项目学习23种设计模式(四)

通过读取文件导入数据库功能学习23种设计模式 第一次重构代码 目前代码写的很随性,导致以后业务增加时拓展起来繁杂,所以我们将已有逻辑进行第一重构: 抽取公共的行为生成接口 package com.xiaoma.fileimport.common;/*** 任务主执行类* 使用工厂模式,首先将任务共同行为抽象出…
暂无图片
编程学习 ·

opencv画3d骨架图

效果: import matplotlib.pyplot as plt import numpy as np# h36m骨架连接顺序,每个骨架三个维度,分别为:起始关节,终止关节,左右关节标识(1 left 0 right),用来区别颜色 human36m_connectivity_dict = [[0, 1, 0], [1, 2, 0], [2, 6, 0], [5, 4, 1], [4, 3, 1], [3, 6…
暂无图片
编程学习 ·

Go 结构体内存分配机制

结构体内存分配机制我们定义一个Person结构体(包括名字,年龄)我们看看下面一段代码,输出什么内容?var p1 Person p1.Name = "小明" var p2 Person = p1 fmt.Printin(p2.Age)p2.Name = "tom" fmt.Printf("p2.Name=%v p1.Name=%v",p2.Name,…
暂无图片
编程学习 ·

JavaScript从入门到精通复习资料大全(基础知识篇)

JavaScript从入门到精通复习一、JavaScript中的常量和变量1、常量:就是程序运行过程中,保持不变的数据。2、变量:是程序中一个已经命名的存储单元。3、 变量的赋值二:JavaScript中的运算符1、算术运算符2、比较运算符3、赋值运算符4、字符串运算符5、 逻辑运算符6、条件运…
暂无图片
编程学习 ·

CUDA学习(四):cudaMalloc、cudaMemcpy和cudaFree函数

文章目录一、cudaMalloc、cudaMemcpy和cudaFree 介绍二、第一个例子,实现GPU端的加法 可以像调用C函数那样将参数传递给核函数 当设备执行任何有用的操作时,都需要分配内存,例如将计算机返回给主机。 一、cudaMalloc、cudaMemcpy和cudaFree 介绍 内存空间开辟、内存复制和内…
暂无图片
编程学习 ·

HTML概述

HTML发展史HTML没有1.0,因为关于它的初版存在争议,1995年HTML 2.0面世,1997年由国际官方组织W3C推出了HTML 3.2以及HTML 4.0标准,后面W3C(万维网联盟)也渐渐变成Web技术领域的权威,经过漫长的演变,2014年,HTML 5标准最终面世。HTML 2.0——1995年11月,RFC 1866发布HTML…
暂无图片
编程学习 ·

HTTP Header (请求头&响应头)

1. 关于HTTP消息头HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行,HTTP消息体(请求或响应的内容)是其后传输。HTTP消息头,以明文的字符串格式传送,是以冒号分隔的键/值对,如:Accept-Charset: utf-8,每一个消息头最后以…
暂无图片
编程学习 ·

dva项目创建过程图解及目录模块详解

一.项目创建可以参考官方文档1.安装 dva-cli通过 npm 安装 dva-cli 并确保版本是 0.9.1 或以上。(“$符”代表你的文件路径,如:D:\Dvajs_workspace\)$ npm install dva-cli -g $ dva -v dva-cli version 0.9.12.创建新应用dva版本符合要求之后,进入想要创建项目的文件夹下…
暂无图片
编程学习 ·

java编程思想——抽象类和接口(java接口不能实例化原因)

文章目录java的接口为什么不能实例化呢?总结: java的接口为什么不能实例化呢? 首先,我们需要明白实例化的含义。实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student对象s,并且实例化一个Student对象,实则是在堆中开辟出一块…
暂无图片
编程学习 ·

Java-WrapperClass及其转化

java里的变量分为primitive type和reference type两种。primitive type是int, char, double啥的,reference type(Wrapper Class)就是Integer, String这些。 我一直对reference type互相转化有点记不住,看了几个视频学习了一下。发现是因为对reference type(Wrapper Class)原理…
暂无图片
编程学习 ·

网络安全学习篇11_WEB服务器和FTP服务器

上一篇博客:DNS部署与安全目录WEB服务器FTP服务器开始一、WEB服务器WEB服务器也称为网页服务器或HTTP服务器WEB服务器使用的协议是HTTP或HTTPSHTTP协议端口号:TCP 80 HTTPS协议端口号:TCP 443WEB服务器发布软件:微软:IIS (Internet Information Services的缩写,意为互联…