【方法】

方法基本内容

√访问修饰符

​ (作用是控制方法使用的范围)

​ 可选,[有四种:public\protected\默认\private],具体在后面说

√返回类型

​ 1.一个方法最多有一个返回值[思考,如何返回多个结果?]

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

​ 3.如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值;

​ 而且要求返回值类型必须和return的值类型一致或兼容

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

√方法名

​ 遵循驼峰命名法

√形参列表

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

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

​ 3.调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数!【getSum】

​ 4.方法定义时的参数称为形式参数,简称形参;

​ 方法调用时的参数称为实际参数,简称实参。实参和形参的类型要一致或兼容、个数、顺序必须一致!

√方法体

​ 里面写完成功能的具体的语句,可以为输入、输出、变量、运算、分支、循环、方法调用,

​ 里面不能再定义方法!

​ 即:方法不能嵌套定义。

例子1

public class MethodDetail{
public static void main(String[] agrs){ AA a = new AA();
int[] res = a.getsumAndSub(1,3);
System.out.println("和="+res[0]);
System.out.println("差="+res[1]); //细节:调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数
byte b1 = 1;
byte b2 = 2;
a.getSumAndSub(b1,b2);//byte -> int低精度给高精度类型是可以兼容的 }
} class AA{
//1.一个方法最多有一个返回值[思考,如何返回多个结果?返回数组]
//返回类型为int[]
public int[] getsumAndSub(int n1, int n2) {
int[] resArr = new int[2];//创建一个数组
resArr[0] = n1 + n2;
resArr[1] = n1 - n2;
return resArr;
}
} //如果方法是void,则方法体中可以没有return语句,或者只写return ;
public void f2(){
System.out.print1n("hello1");
System.out.print1n("hello1");
System.out.print1n("hello1");
int n = 10;
//return ;
}

例子2

public class MethodDetail02{
public static void main(String[] agrs){
/*
√方法细节调用说明
1.同一个类中的方法调用:直接调用即可。比如print(参数);
案例演示:A类sayOk调用print()
2.跨类中的方法A类调用B类方法:需要通过对象名调用。
比如对象名.方法名(参数);
案例演示:B类sayHello调用print()
3.特别说明一下:跨类的方法调用和方法的访问修饰符相关,先暂时这么提一下,
后面我们讲到访问修饰符时,还要再细说。
*/
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);
} //跨类中的方法A类调用B类方法:需要通过对象名调用
public void m1() {
//创建B对象,然后在调用方法即可
System.out.println("m1()方法被调用");
B b = new B();
b.hi();
} } class B {
public void hi() {
System.out.println("B类中的hi()被执行");
}
}

练习

习题一

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

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

public class MethodExercise01{
public static void main(String[] agrs){
AA a = new AA();
if(a.isOdd(2)){
System.out.println("t");
}else{
System.out.println("f");
} a.print(10,10,"草");
}
} //1.编写类AA新方法:判断一个数是奇数odd还是偶数,返回boolean
class AA{
//思路
//1.方法的返回类型boolean
//2.方法的名字isodd
//3.方法的形参1(int num)
//4.方法体,判断
public boolean isOdd(int num){
//朴素思路
// if(num % 2 == 0){
// return false;
// }else{
// return true;
// } //还可以这么想
// return num % 2 ! = 0 ? true; false; return num % 2 ! = 0;//最后可以简化成这个 } //根据行、列、字符打印对应行数和列数的字符,
//比如:行:4,列:4,字符#,则打印相应的效果
/*
####
####
####
####
*/ //思路
//1.方法的返回类型void
//2.方法的名字print
//3.方法的形参(int row,int col, char c)
//4. 方法体,循环
public void print(int row, int col, String c){
for(int i = 0; i<row; i++){
for(int j = 0; j<col; j++){
System.out.print(c);
}
System.out.println();
} } }

习题二 方法克隆对象

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

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

public class MethodExercise02{
public static void main(String[] agrs){
Person p = new Person();
p.name = "m";
p.age = 100; MyTools tool = new MyTools();
Person p2 = tool.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{
//思路
//1.方法的返回类型Person
//2.方法的名字copyPerson
//3.方法的形参(Person p)
//4.方法体,创建一个新对象并复制属性,返回
public Person copyPerson(Person p){
//这里的形参传入一个对象名,还没有真的开辟新空间
//创建一个新对象p2,开辟新的内存空间
Person p2 = new Person();
p2.name = p.name;
p2.age = p.age; return p2; }
}

习题三

public class MethodParameter01{
public static void main(String[] agrs){
int a = 10;
int b = 20;
AA obj = new AA();
obj.swap(a,b); /*
main方法中的a、b与AA方法中的a、b存在于栈中不同的位置,因此使用时的值会不同
*/
System.out.println("main方法 a="+a+" "+"b="+b);//a 10 b 20
}
} 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); }
}

注意点:

不同方法中的变量位于不同的栈空间中,因此使用时是相互独立的

习题四 方法传入对象

B类中编写一个方法test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?

答:会变化,该操作只是将数组地址传给方法,指向同一个数据内存空间

B类中编写一个方法test200,可以接收一个Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?

答:会变化,该操作只是将实例化后的对象的地址传给方法,也是指向同一个数据内存空间

public class MethodParameter02{
public static void main(String[] agrs){
//测试
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的地址传给test200 //若test200执行的是p = null, 下面的输出是什么? 10
//原因:p = null只是把方法里的p置空,即指向一个空地址,
//不影响main中为p开辟的地址中的值(下面代码的p是main的) //若test200执行的是p = new Person();, 下面的输出是什么? 10
//原因:栈中,main实例化了一个p,其在堆中产生一个对象
//此时main实例化的b调用了test200,因为其传入的参数是p,故此时该p与main中p指向堆中的同一处(age 10)
//随后在test200中又实例化了一个p,那么test200中的p会指向一个新的堆空间(age 99)
//因为打印语句的p在main中调用,所以打的是age等于10的那个堆的数据
//然后堆空间(age 99)会被当成垃圾回收
System.out. println("main的p.age=" + p.age);//100000
}
} class Person{
String name;
int age;
} class B{ public void test200(Person p){
// p.age = 100000;
//思考
// p = null;
//思考
p = new Person();
p.name = "tom";
p.age = 99;
}
//B类中编写一个方法test100,
//可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化 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");
}
System.out.println();
}
}

【Java复健指南02】方法的注意事项的更多相关文章

  1. 【Java复健指南09】项目练习全解--房屋出租系统

    一个基于文本界面的综合练习,主要用于串联和回忆知识点,比较简单 各个界面的设计样式 主菜单 =============房屋出租系统菜单============ 1 新 增 房 源 2 查 找 房 屋 ...

  2. 【Java复健指南15】链表LinkedList及其说明

    链表LinkedList by Java 之前有写过一些记录(引用),但是忘了乱了,现在重新梳理一遍 链表是Java中List接口的一种实现 定义(引用) 链表(linked list)是一种物理存储 ...

  3. java字符流操作flush()方法及其注意事项

    java字符流操作flush()方法及其注意事项   flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...

  4. java Vamei快速教程02 方法和数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

  5. java安全编码指南之:方法编写指南

    目录 简介 不要在构造函数中调用可以被重写的方法 不要在clone()方法中调用可重写的方法 重写equals()方法 hashCode和equals compareTo方法的实现 简介 java程序 ...

  6. Java基础|02.方法的传递机制

    Java基础|02.方法传参机制 0x00 前言 Parameter:参数 java中只有传值,因为地址值也是值 0x01 基础数据类型的传参机制 基本数据类型的值传递,不改变原值.因为调用后会弹栈, ...

  7. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  8. Java工程师学习指南 中级篇

    Java工程师学习指南 中级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站 ...

  9. Java工程师学习指南 初级篇

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  10. Java工程师学习指南 入门篇

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

随机推荐

  1. Bash 脚本发送消息到企业微信的办法

    1. Study From https://www.cnblogs.com/elvi/p/11444388.html 2. 申请或者使用已经有的企业微信. 首先是获取一下企业id 方法如图: 3. 创 ...

  2. PG13 离线安装的简单办法

    1. 发现上班时间公司的网络几乎不可用 还是得找时间下载好离线包才可以. 找了一个最简单的办法 地址 https://yum.postgresql.org/ 选择版本 这次我选择最新的 继续之后继续选 ...

  3. SQLSERVER2008R2 本地客户端无法连接的问题

    sqlserver 数据库无法连接问题. 1. 问题现象与简单分析 今天同事找我说一个 SQLSERVER2008R2的测试环境无法连接了. 提示信息为: 当时猜测是 数据库的 配置出问题了. 去查看 ...

  4. Flutter开发桌面应用的一些探索

    引言 在移动应用开发领域,Flutter已经赢得了广泛的认可和采用,成为了跨平台移动应用开发的瑞士军刀.然而,Flutter的魅力并不仅限于移动平台,它还可以用于开发桌面应用程序,为开发人员提供了一种 ...

  5. Fabric网络升级(总)

    原文地址在这里. 在fabric网络中,升级nodes和通道至最新版本需要四步: 备份账本和MSPs. 以滚动的方式将orderer升级到最新版. 以滚动的方式将peers升级到最新版. 将order ...

  6. Gorm 应用开发时区问题与unique唯一索引字段数据冲突问题

    目录 一.定义表模型时区问题 1.1 time.Time 与int64 1.2 优势 二.unique唯一索引字段数据冲突问题 一.定义表模型时区问题 1.1 time.Time 与int64 一般情 ...

  7. c#时间格式转换汉字大写

    把时间转换为汉字大写 public class DateTimeConvert { public static string ConvertToChineseCapital(DateTime date ...

  8. C/C++ 原生套接字抓取FTP数据包

    网络通信在今天的信息时代中扮演着至关重要的角色,而对网络数据包进行捕获与分析则是网络管理.网络安全等领域中不可或缺的一项技术.本文将深入介绍基于原始套接字的网络数据包捕获与分析工具,通过实时监控网络流 ...

  9. Docker从认识到实践再到底层原理(一)|技术架构

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  10. 【C语言深度解剖】复数运算问题--【好题系列】学会这题,结构体没问题

    复数问题 今天博主给大家带来一道博主自己在学校做到的一个题目.这个题目可以很好的加深我们对C语言结构体的理解,在这里分享给大家.学懂这题,我们的C语言结构体,没问题了! 本篇建议收藏后食用!以免退出找 ...