当前位置: 首页 > news >正文

Java_成员方法

基本介绍

在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外( 年龄,姓名…),我们人类还有一些行为比如:可以说话、跑步…,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对 Person 类完善。


/*
1) 添加 speak 成员方法,输出 “我是一个好人”
2) 添加 cal01 成员方法,可以计算从 1+..+1000 的结果
3) 添加 cal02 成员方法,该方法可以接收一个数 n,计算从 1+..+n 的结果
4) 添加 getSum 成员方法,可以计算两个数的和
*/public class Method01{public static void main(String[] args){//方法使用//1. 方法写好后,如果不去调用(使用),不会输出//2. 先创建对象 ,然后调用方法即可Person p1 = new Person();p1.speak();p1.cal01();p1.cal02(5);p1.cal02(10);int returnRes = p1.getSum(10,20);System.out.println("getSum 方法返回值="+ returnRes);}
}class Person{String name;int age;//方法(成员方法)//添加 speak 成员方法,输出 “我是一个好人”//老韩解读//1. public 表示方法是公开//2. void : 表示方法没有返回值//3. speak() : speak 是方法名, () 形参列表//4. {} 方法体,可以写我们要执行的代码//5. System.out.println("我是一个好人"); 表示我们的方法就是输出一句话public void speak(){System.out.println("Hello,World!");}public void cal01(){int sum=0;for(int i = 0; i < 1001; i++){sum += i;}System.out.println("1到1000的和为:" + sum);}
//1. (int n) 形参列表, 表示当前有一个形参 n, 可以接收用户输入public void cal02(int rem){int sum = 0;for(int i = 0; i < rem+1; i++){sum += i;}System.out.println("1到"+rem+"的和为:" + sum);}
//1. public 表示方法是公开的
//2. int :表示方法执行后,返回一个 int 值
//3. getSum 方法名
//4. (int num1, int num2) 形参列表,2 个形参,可以接收用户传入的两个数
//5. return res; 表示把 res 的值, 返回public int getSum(int num1,int num2){int sum =0 ;sum = num1 + num2;return sum;}}

方法的调用机制原理

在这里插入图片描述

成员方法的好处

  1. 提高代码的复用性
  2. 可以将实现的细节封装起来,然后供其他用户来调用即可
public class Method02 {public static void main(String[] args) {int[][] map = {{0,1,0},{1,0,1},{1,1,1}};MyTools mytools = new MyTools();mytools.printArr(map);mytools.printArr(map);mytools.printArr(map);}
}class MyTools {public void printArr(int[][] map) {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();}}
}

成员方法的定义

在这里插入图片描述

  1. 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int num2)
  2. 返回数据类型:表示成员方法输出, void 表示没有返回值
  3. 方法主体:表示为了实现某一功能代码块
  4. return 语句不是必须的。
  5. 结合前面的题示意图, 来理解

注意事项和使用细节

  • 访问修饰符 (作用是控制 方法使用的范围)
    如果不写默认访问,[有四种: public, protected, 默认, private], 具体在后面说;

  • 返回数据类型

  1. 一个方法最多有一个返回值 [思考,如何返回多个结果 返回数组 ]
  2. 返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
  3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 “return 值”;
    而且要求返回值类型必须和 return 的值类型一致或兼容;
  4. 如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;
  • 方法名
    遵循驼峰命名法,最好见名知义,表达出该功能的意思即可, 比如 得到两个数的和 getSum, 开发中按照规范
    在这里插入图片描述
    在这里插入图片描述
public class MethodDetail02 {public static void main(String[] args) {A a = new A();// a.sayOK();a.m1();}
}class A {//同一个类中的方法调用:直接调用即可;public void print(int n) {System.out.println("print()方法被调用了 n="+ n);}public void sayOK() {  //sayOK调用 print(直接调用即可)print(10);System.out.println("继续执行sayOK()!");}// 跨类中的方法A类调用B类方法public void m1() {System.out.println("m1() 方法被执行");// 创建B对象,然后再调用方法即可;B b = new B();b.hi();System.out.println("m1() 继续被执行");}
}class B {public void hi() {System.out.println("B类中的 hi()被执行");}
}

java方法练习题

  1. 编写类 AA ,有一个方法:判断一个数是奇数 odd 还是偶数, 返回 boolean

  2. 根据行、列、字符打印 对应行数和列数的字符,比如:行:4,列:4,字符#,则打印相应的效果
    老师建议:一定要自己写一遍,不要嫌太简单,不写的话,永远不知道自己在哪会掉坑里~~~~

public class MethodExercise01 {public static void main(String[] args) {AA a = new AA();if(a.isOdd(1)){System.out.println("是一个奇数");} else {System.out.println("是一个偶数");}a.print(20,30,'@');}}class AA {/*1) 编写类 AA ,有一个方法:判断一个数是奇数 odd 还是偶数, 返回 boolean1.返回类型:boolean2.方法名称:isOdd3.形参:(int num)4.方法体:if判断 或 三元运算符*/public boolean isOdd(int num) {/*if (num % 2 != 0){return true;} else {return false;}*/// return num % 2 != 0 ? true ; false;return num % 2 !=0;}/*2) 根据行、列、字符打印 对应行数和列数的字符,比如:行:4,列:4,字符#,则打印相应的效果一定要自己写一遍,不要嫌太简单1.返回类型:void2.方法名:print3.形参:(int row,int col,char c)4.方法体:for循环*/public void print(int row,int col,char c) {for (int i = 0;i < row ;i++){for(int j = 0; j < col; j++){System.out.print(c);}System.out.println();}}}

成员方法传参机制

方法的传参机制对我们今后的编程非常重要,一定要搞的清清楚楚明明白白。我们通过案例来学习

1.传参机制1

public class MethodParameter01 {public static void main(String[] args) {int a = 10;int b = 20;AA obj = new AA();obj.swap(a,b);  //调用 swap;System.out.println("main方法中的 a b 值:"+ a + " " +b);// 10  20 因为形参不会影响主类中的数据类型;}
}class AA {public void swap(int a,int b) {System.out.println("交换前的a b值" + a + " " + b);// 10 20int tmp = a;a = b;b = tmp;System.out.println("交换后的a b值" + a + " " + b);// 20 10}
} 

在这里插入图片描述

示意图

在这里插入图片描述

结论:

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

2.传参机制2

  • B 类中编写一个方法 test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?会变化
public class MethodParameter02 {public static void main(String[] args) {/*B 类中编写一个方法 test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?会变化*/int[] arr = {1,2,3};B b = new B();b.test100(arr);for(int i = 0; i< arr.length;i++){System.out.print(arr[i]+"\t");}}
}class B {public void test100(int[] arr) {arr[0] = 1000;for(int i = 0; i< arr.length;i++){System.out.print(arr[i]+"\t");}System.out.println();}
}

在这里插入图片描述


  • B 类中编写一个方法 test200,可以接收一个 Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?会变化.
public class MethodParameter02 {public static void main(String[] args) {/*B 类中编写一个方法 test200,可以接收一个 Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?会变化.*/B b = new B();Person p = new Person();p.name = "jack";p.age = 20;b.test200(p);System.out.println("main 的 p.age = " + p.age);}
}
class Person{String name;int age;
}
class B {public void test200(Person p){p.age = 10000; //修改对象的属性;}
}

在这里插入图片描述

结论及示意图

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
在这里插入图片描述
在这里插入图片描述

请思考

在看一个案例,下面的方法会对原来的对象有影响吗?
p=null 和 p = new Person(); 对应示意图
最后输出的结果将是,p.age == 10;
在这里插入图片描述

在这里插入图片描述

克隆对象

  • 编写一个方法 copyPerson,可以复制一个 Person 对象,返回复制的对象。克隆对象, 注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
public class MethodExercise02 {public static void main(String[] args) {Person p = new Person();p.name = "milan";p.age = 100;//创建 toolsMyTools tools = new MyTools();Person p2 = tools.copyPerson(p);//到此 p 和 p2 是 Person 对象,但是是两个独立的对象,属性相同System.out.println("p 的属性 age=" + p.age + " 名字=" + p.name);System.out.println("p2 的属性 age=" + p2.age + " 名字=" + p2.name);//这里老师提示: 可以同 对象比较看看是否为同一个对象System.out.println(p == p2);//false}
}class Person {String name;int age;
}class MyTools {//编写一个方法 copyPerson,可以复制一个 Person       对象,返回复制的对象。克隆对象,//注意要求得到新对象和原来的对象是两个独立的对     象,只是他们的属性相同//// 编写方法的思路//1. 方法的返回类型 Person//2. 方法的名字 copyPerson//3. 方法的形参 (Person p)//4. 方法体, 创建一个新对象,并复制属性,返回即可public Person copyPerson(Person p) {//创建一个新的对象Person p2 = new Person();p2.name = p.name; //把原来对象的名字赋给 p2.namep2.age = p.age; //把原来对象的年龄赋给 p2.agereturn p2;}
}

在这里插入图片描述


http://www.mrgr.cn/news/59621.html

相关文章:

  • Chromium HTML5 新的 Input 类型number对应c++
  • 【rabbitmq】绑定死信队列示例
  • mariadb数据库中文乱码问题
  • 【代码随想录Day54】图论Part06
  • 【思维导图】C语言—分支与循环
  • 【音视频 | wav】WAV格式常见的几种压缩形式
  • D50【python 接口自动化学习】- python基础之类
  • CSS_定位_网页布局总结_元素的显示与隐藏
  • 浏览器无法访问非80端口网页
  • Java设计模式之单例模式
  • 计算机视觉专栏(1)【LeNet】论文详解
  • CISC(Complex Instruction Set Computer)和RISC(Reduced Instruction Set Computer)
  • 立足中国、辐射全国,2025郑州台球展会3月招商季盛大举办
  • [面试必备] 深度剖析 Vue3 生命周期
  • 华为OD机试 - 螺旋数字矩阵 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)
  • Python openpyxl库介绍
  • Spring框架---IOC核心技术和DI依赖注入
  • 【力扣专题栏】两数相加,如何实现存储在链表中的整数相加?
  • jsMind:炸裂项目,用JavaScript构建的思维导图库,GitHub上的热门开源项目
  • 学习qmake