Java学习笔记 --- 成员方法

2023-11-03

一、成员方法

基本介绍:

在某些情况下,我们需要定义成员方法(简称方法)比如人类:除了有一些属性外(年龄,姓名)

我们人类还有一些行为比如:可以说花,跑步,通过学习,还可以做算术题。这时就需要成员方法才能完成

案例演示:

public class Method01 {
	public static void main(String[] args) {
		//方法使用
        /*
        1、方法写好后,不去调用是没有效果的
        2、先创建对象,再调用方法即可
        */
		Person p1 = new Person();//创建对象
		p1.speak();//调用方法
		p1.cal01(); 
		p1.cal02(10);//调用cal02方法 同时给n赋值10
		p1.cal02(15);//可以多次调用方法
		//调用getSum,同时sum1=10 sum2=20
		//把方法getSum返回的值,赋给变量returnRes
		int returnRes = p1.getSum(10, 20);
		System.out.println("getSum返回的值=" + returnRes);
	}
}
class Person {
	String name;
	int age;
	//方法(成员方法)
    //public:表示方法公开
    //void:表示没有返回值
    //speak:表示方法名
    //():表示形参列表
    //{}:方法体,要执行的代码
    //System.out.println("这是一个人");:该方法输出的内容
    public void speak() {
        System.out.println("这是一个人");
    }
    //添加一个cal01 成员方法,可以计算从1+..+1000的结果
    public void cal01() {
    	//循环完成
    	int res = 0;
    	for(int i = 1; i <= 1000; i++) {
    		res += i;
    	}
    	System.out.println("1+..+1000的和=" + res);
    }
    public void cal02(int n) {
    	int res = 0;
    	for(int i = 1; i <= n; i++) {
    		res += i;
    	}
    	System.out.println("1+..+1000的和=" + res);
    }
    /*
    1.int 表示方法执行后,返回一个int值
    2.getSum 方法名
    3.(int num1, int num2)形参列表,2个形参,可以接收用户传入的两个数
    4.return res;表示把res的值,返回
    */
    public int getSum(int num1, int num2) {
    	int res = num1 + num2;
    	return res;
    }
}

二、方法调用机制

 三、方法的妙用

不使用方法遍历数组

public class Method02 {
	public static void main(String[] args) {
	   int[][] map = {{0, 0, 1}, {1, 1, 1}, {1, 1, 3}};
       for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }


        for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }


        for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
	}
}

代码冗余,可读性差,维护麻烦

使用方法遍历数组

public class Method02 {
	public static void main(String[] args) {
	   int[][] map = {{0, 0, 1}, {1, 1, 1}, {1, 1, 3}};
       MyTools tool = new MyTools();
       //多次调用方法即可
       tool.printArr(map);
       tool.printArr(map);
       tool.printArr(map);
	}
}
//把输出的功能,写到一个类方法中,然后调用该方法即可
class MyTools {
    //方法,接收一个二维数组
    public void printArr(int[][] map) {
        for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
    }
}

提高了代码的复用性

将实现的细节封装起来,供其他用户调用就行

四、方法的注意事项和使用细节

1、访问修饰符(控制方法使用范围)

当不写访问修饰符时使用默认修饰符,主要有四种(public,protected,默认,private)

2、返回数据类型

1、一个方法最多有一个返回值,当要返回多个结果,使用数组。

2、返回类型可以为任意类型,包括基本类型或引用类型(数组,对象)

案例演示:

public class MethodDetail {
    public static void main(String[] args) {
        AA a = new AA();
        int[] res = a.geta(1, 4);
        System.out.println("和=" + res[0]);
        System.out.println("差=" + res[1]);

    }
}
class AA {
    //一个方法最多有一个返回值,如何返回多个结果,使用数组
    public int[] geta(int n1, int n2) {
        int[] resArr = new int[2];
        resArr[0] = n1 + n2;
        resArr[1] = n1 - n2;
        return resArr;
    }
}

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

案例演示:

 public double a(){
        double a = 1.1;
        int n = 1;
        return a; //ok
        return 1.1;//ok
        return n;//ok 会自动进行类型转换
    }

4.如果方法是void,则方法体重可以没有return语句,或者只写return

案例演示:

public void aa(){
        return; //可以写return,但是不能返回数据类型
    }

3、方法名

遵循驼峰命名法,最好见名知意。

4、形参列表

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

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

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

4.方法定义时的参数称为形式参数,简称参数;方法调用时的参数称为实际参数,简称实参,实参和形参的类型要一致或兼容、个数、顺序必须一致!

5、方法体

完成功能的具体语句,可以是输入、输出、变量、运算、分支、循环、方法调用,但不允许方法里面再定义方法。即:方法不能嵌套定义。

案例演示:

public void a(){
        public void b(){ //编译就报错
            
        }
    }

6、方法细节调用说明

1、同一个类中的方法调用,直接调用就行。

案例演示:


public class MethodDetail {
    public static void main(String[] args) {
        A a = new A();
        a.say();

    }
}
class A {
    //同一个类中的方法调用,直接调用就行。
    public void print(int n) {
        System.out.println("print()方法被调用 n=" + n);
    }

    public void say() {//say调用 print 直接调用
        print(10);
        System.out.println("继续执行say");
    }
}

2、跨类中的方法A类调用B类的方法,需要通过对象名调用

案例演示:

public class Method4 {
    public static void main(String[] args) {
        B b = new B();
        b.b1();
 
    }
}
class A{
    public void m1(){
        System.out.println("m1方法被调用");
         //先创建B对象,再调用方法
        B b = new B();
        b.b1();
    }
}
class B{
    public void b1(){
       System.out.println("b1方法调用");
    }
}

五、成员方法练习

1.编写一个类,有一个方法判断一个数是奇数还是偶数,返回Boolean。

import java.util.Scanner;
public class MethodExercise01 {
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		AA a = new AA();
		System.out.println("请输入一个数");
		int arr = myScanner.nextInt();
		if(a.bb(arr)) {
			System.out.println("这个数是偶数");
		}else {
			System.out.println("这个数是奇数");
		}
	}
}
// 创建一个类
class AA {
	// 创建一个新方法
	public boolean bb(int n) {
		// if(n % 2 != 0) {
		// 	return true;
		// }else {
		// 	return false;
		// }  可以简化

		// return n % 2 != 0 ? true; false;  再简化
		return n % 2 == 0;
	}
}

2.根据行、列、字符打印对应行数和列数的字符。

import java.util.Scanner;
public class MethodExercise02 {
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		AA a = new AA();
		System.out.println("请输入行");
		int arr = myScanner.nextInt();
		System.out.println("请输入列");
		int brr = myScanner.nextInt();
		System.out.println("请输入需要打印的字符");
		char crr = myScanner.next().charAt(0);
		System.out.println("===开始打印===");
		a.bb(arr, brr, crr);
	}
}
// 创建一个类
class AA {
	// 创建一个新方法
	// 思路
	// 1.方法的返回类型 void
	// 2.方法的名字
	// 3.方法的形参
	// 4.方法体,循环
	public void bb(int n, int m, char c) {
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				System.out.print(c + " ");
			}
			System.out.println();//换行
		}
	}
}

六、成员方法传参机制

1.基本数据类型传参

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

案例演示:

public class MethodParameter01 {
	public static void main(String[] args) {
		int a = 1;
		int b = 2;
		// 创建AA的对象
		AA aa = new AA();
		aa.swap(a, b); 

		System.out.println("main方法中的值a=" + a + "\tb=" + b);
	}
}
// 创建一个类
class AA {
	public void swap(int a, int b) {
		System.out.println("\na和b交换前的值\na=" + a + "\tb=" + b);
		//完成了a和b的交换
		int tmp = a;
		a = b;
		b = tmp;
		System.out.println("\na和b交换后的值\na=" + a + "\tb=" + b);
	}
}

2.引用类型传参

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

案例演示:

public class MethodParameter02 {
	public static void main(String[] args) {
		//测试
		B b = new B();
		int[] arr = {1, 2, 3};
		b.test(b);

		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");//输出结果200 2 3
		}
		System.out.println();
	}
}
// 创建一个类
class B {
	public void test(int[] arr) {
		arr[0] = 200;//修改元素
		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");//输出结果200 2 3
		}
		System.out.println();
	}
}

案例演示2:

对象属性也会影响

public class Method {
    public static void main(String[] args) {
        Persons p = new Persons();
        p.name = "jcak";
        p.age = 10;

        B b = new B();
        b.test(p);
        System.out.println("main方法中的年龄为:" + persons.age);
    }
}
class Persons{
    String name;
    int age;
}
class B{
    public void test(Persons p){
        p.age = 100;//修改对象属性
    }
}

七、成员方法传参机制练习

1.编写类Mytools类,编写一个方法可以打印二维数组的数据

public class MethodExercise03 {
	public static void main(String[] args) {
		MyTools a = new MyTools();
		int[][] aa = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}; 
		a.bb(aa);
	}
}
// 创建一个类
class MyTools {
	// 创建一个新方法,接收二维数组
	public void bb(int[][] map) {
		for(int i = 0; i < map.length; i++) {
			for(int j = 0; j < map[i].length; j++) {
				System.out.print(map[i][j] + " ");
			}
			System.out.println();//换行
		}
	}
}

2.编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,

注意要求得到新的对象和原来的对象是两个独立的对象,只是他们属性相同

public class MethodExercise04 {
	public static void main(String[] args) {
		/*
		编写一个方copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象
		注意要求得到的新对象和原来的对象是两个独立的对象,只是他们的属性相同
		*/
		Person p = new Person();
		p.name = "jack";
		p.age = 10;
		//创建tools
		MyTools tools = new MyTools();
		Person p2 = toosl.copyPerson(p);

		//到此p和p2是Person的对象,但是是两个独立的对象,属性相同
		System.out.ptintln("P的属性 age=" + p.age + "名字=" + p.name);
		System.out.ptintln("P2的属性 age=" + p2.age + "名字=" + p2.name);
		//可以通过对象比较看看是否为同一个对象
		System.out.ptintln(p == p2);
	}
}
// 创建一个类
class Person {
	String name;
	int age;
}

class MyTools {
	// 编写思路
	// 1.方法的返回类型 Person
	// 2.方法的名字copyPerson
	// 3.方法的形参(Person p)
	// 4.方法体,创建一个新对象,并复制属性,返回即可
	public Person copyPerson(Person p) {
		Person p2 = new Person();
		p2.name = p.name;
		p2.age = p.age;
		return p2;
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习笔记 --- 成员方法 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • Vuex从了解到实际运用,彻底搞懂什么是Vuex(一)

    什么是Vuex全局状态管理 一句话来说 Vuex全局状态管理是任意组件之间的通信的解决方案 Vuex实现原理 借助于Vuex提供的单例 可供任意组件的调度 它里面提供了一些对应的状态和方法 比如 state getter mutation
  • php页面添加计数器

    index php 1 4 5 6 7 8 9 10 11
  • 一个好玩的网络空间测绘站(fofa)

    无意间发现了一个好玩的网络空间测绘站 https fofa info 可以轻松嗅探公网资源 而且官方还提供搜索语法说明 上手容易 适合信安学习 也适合相关从业人员 ps 禁止干违法的事情哟
  • 计算机科学和Python编程导论(一) 计算机相关理论

    基本概念 1 计算机基础知识 陈述性知识 关于事实的描述 如果满足y y x 那么x的平方根就是数值y 程序性知识 说明 如何做 描述的是信息演绎的过程 算法 是一个有穷指令序列 它在给定的输入集合中执行时 会按照一系列定义明确的状态进行
  • RedisUtil工具类

    package com test util import java util ArrayList import java util List import java util Map import java util Set import
  • 提升树算法

    这篇博文主要参考了李航 统计学习方法 与论文 GREEDY FUNCTION APPROXIMATION A GRADIENT BOOSTING MACHINE 这里简单记录下对提升树的简单理解 1 梯度提升算法 有关梯度提升算法的细节请参
  • 处理Mybatis返回的结果集为Map类型

    最有用到mybatis返回一个map结果集 然后就针对性的在网上找了一些相关大牛的总结 1 https www cnblogs com jwdd p 10046270 html2 https www codercto com a 33475
  • Xshell连接时显示“服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法

    一 问题描述 最近在大数据服务器上安装了openbsd6 7版本 安装完后通过xshell连接 弹出一个错误对话框 提示 服务器发送了一个意外的数据包 received 3 expected 20 的错误信息 检查sshd服务是正常开启的
  • OSI七层模型及对应的数据包格式

    我接触网络协议也比较久了 不过一直都只懂个皮毛 最近比较深入研究之后终于有点豁然开朗的感觉 也因为网络上各种协议的资料太多但是都比较分散杂乱 所以在这里做点总结 给大家提供一些资料也备自己以后查阅 鉴于有些朋友没有耐心完全看完整篇文章 所以
  • 如何快速将WPS表格或者excel数据将表格转化为json

    目录 简介 一 在表格数据的前后插入列 加上双引号 分号 逗号 二 利用表格的公式合并内容 1 在表格合并的项行后面选择或插入新的一列或一行 然后在第一个空格输入 号 2 然后用鼠标点击要合并的第一行的第一个内容格 即相对应等号的那一列 在
  • 程序员必须知道机器学习与数据挖掘十大经典算法:PageRank算法篇

    由于公司架构调整和业务方向的转变 我所在的项目组即将接手一个机器学习和数据挖掘的项目 为了后续更好地开展工作 也为了能提高自己的专业技能 我决定开始学习机器和数据挖掘方面的知识 那么 问题就来了 到底应该从哪里开始学起呢 最开始我也买了一些
  • 【基于hadoop+spark的短视频大数据分析平台-哔哩哔哩】 https://b23.tv/JoObZaH

    基于hadoop spark的短视频大数据分析平台 哔哩哔哩 https b23 tv JoObZaH https b23 tv JoObZaH
  • 心理学的166个现象---之九

    161 增减效应 人们最喜欢那些对自己的喜欢显得不断增加的人 最不喜欢那些对自己的喜欢显得不断减少的人 心理学家们将人际交往中的这种现象称为 增减效应 162 植物心理学和巴克斯特效应BACKSTER 我出生在新泽西州的LAFAYETTE市
  • 51单片机---DS18B20温度采集

    51单片机 DS18B20温度采集 实验目标 51单片机读取DS18B20温度显示在液晶显示屏上 实验步骤 在Proteus里画出原理图 在Keil里用C语言编写程序 在Proteus中导入HEX文件 启动仿真 DS18B20简介 DS18
  • pwnstack-攻防世界

    pwnstack 攻防世界 text 0000000000400762 giantbranch ubuntu Desktop file pwn2 pwn2 ELF 64 bit LSB executable x86 64 version 1
  • new String(value.getBytes (“iso8859-1“),“utf-8“)

    tomcat容器默认采用了iso 8859 1的编码方法 通过本为UTF 8编码却被tomcat用iso 8859 1解码的字进行恢复 其将解码后的字通过iso 8859 1反解码成二进制数组 再将该字节数组用UTF 8解码 最终被new
  • nodes are available: 1 node(s) had taints that the pod didn‘t tolerate

    记录最近玩k8s创建pod部署服务老是出现pending 并且查看详情describe的时候出现 nodes are available 1 node s had taints that the pod didn t tolerate 经过
  • Matlab 指针函数,MATLAB / Simulink - C MEX S函数:总线信号和涉及指针的传统C结构之间的转换...

    目前我正在MATLAB Simulink R2017b 中将遗留C代码实现为C MEX S函数 我已经在Entry at MathWorks MATLAB Answers上放了一个重复的条目 遗留函数作为一般规则指针指向涉及指向其他结构的指
  • vue3使用百度地图(详)

    前情提要 提示 该博客vue采用vue3 使用百度地图通过组件vue baidu map 3x 组件官网 https map heifahaizei com doc baidu map html 下面会从头开始介绍如何使用百度地图以及常用组
  • Java学习笔记 --- 成员方法

    一 成员方法 基本介绍 在某些情况下 我们需要定义成员方法 简称方法 比如人类 除了有一些属性外 年龄 姓名 我们人类还有一些行为比如 可以说花 跑步 通过学习 还可以做算术题 这时就需要成员方法才能完成 案例演示 public class