JAVA方法:

何为方法

  • 方法是语句的集合,这个集合执行一个功能
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用
  • java全是值传递

方法的定义和调用

方法的定义:

修饰符 返回类型 方法名(参数类型 参数){
方法体
return 返回值;
}
  • 修饰符(可选):告诉编译器如何调用该方法
  • 返回值类型:方法可能会返回值;无返回值的方法用void
  • 方法名:开头小写,后面首字母大写
  • 参数类型(可选):一个方法被调用时,传递值给参数,这个值成为实参或变量;参数是可选的,方法可以不包含任何参数,如void方法不包含任何参数
    • 形参:定义方法时,用于接收外界输入的数据
    • 实参:调用方法时,向方法传递的数据
  • 方法体:具体语句,实现的功能
  • 返回值:除了void方法外,其余都可以返回;一般把return写在方法的最外层 ;void用 return; 终止方法、其他类型retrun 0 用于终止方法

方法的调用:

对象名.方法名(实参);
void();
  • 当方法返回一个值的时候,方法调用通常会被当做一个值如:int a=max(30,40);
  • 当方法是void时,方法调用一定是一条语句

方法的小细节:

返回值的细节:

  • 一个方法最多有一个返回值。当返回多个结果的时候,我们可以把方法定义成数组类型,把结果存入数组,最后返回一个数组
  • 返回类型可以为任何类型
  • 如果方法要求有返回数据类型,则方法体中最后执行的语句必须为return 值,且返回类型必须和return的值类型保持一致或兼容(如方法是double类型,返回int是可以的;反之则不行,会丢失精度)
  • 如果方法是void,则方法体中可以没有return语句,或者只写return ;

形参列表的细节:

  • 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开
  • 参数类型可以为任意类型
  • 调用带参数的方法时,一定要对应着参数列表传入相同类型或兼容类型的参数!
  • 形参和实参的类型要一致或兼容、个数、顺序必须一致!

方法体的细节:

  • 一个方法里不能定义另一个方法

方法调用的细节:

  • 同一个类中的方法调用:直接调用即可,格式 方法名(参数列表) ;

  • 跨类中的方法调用:需要通过new一个对象调用, 格式如下:

  • 跨类的方法调用还和修饰符相关


静态方法与非静态方法

静态方法:

当定义方法时加修饰符static,此时的方法就是静态方法。其他的类(自己这个类也是)可以直接调用这个方法,通过类名 . 方法名(); 就直接调用

非静态方法:

当定义方法时不加修饰符static,此时的方法就是非静态方法,其他的类(自己这个类也是)调用这个方法的时候必须先实例化方法所在的类。

通过 对象类型 对象名 =new 对象值(); 最后再通过对象名 . 方法()来调用这个非静态方法



重点:一个静态方法不能调用一个非静态方法

以下代码会报错!!!

值传递和引用传递

方法的值传递就是传递基本数据类型的实参,传递的参数的值并不会发生改变,原因:若参数是基本数据类型,调用方法时会在栈中开辟一个方法栈,在这个方法栈里面执行完的方法体后,方法栈弹出

//值传递
public class Demo02 {
public static void main(String[] args) {
int a=1;
System.out.println(a); //结果是1
change(a);
System.out.println(a); //结果还是1
}
public static void change(int a){
a=10;
}
}

方法的引用传递就是传递引用类型的实参,传递的参数发生改变

原因:若参数是引用类型,实际上是传递了地址,方法体的形参指向了堆中的内容。调用方法体时在栈中开辟了一个方法栈,在这个方法栈里面执行完的方法体后,虽然方法栈弹出,但是引用类型是存在于堆中的,方法执行完后,堆并不会消失,所以传递的参数就会发生改变

//引用传递:传递的是对象的地址,本质还是值传递
public class Demo03 {
public static void main(String[] args) {
//实例化一个person对象
Person person=new Person();
System.out.println(person.name); //结果是NULL change(person); //向方法传递了一个对象
System.out.println(person.name); //结果是aaaaa
}
public static void change(Person person){
//person是一个对象
person.name="aaaaa";
} }
//定义了一个Person类,有一个属性:name
class Person{
String name;
}

方法的重载

重载就是在一个类中,有相同的函数名,但形参不同的函数

方法重载的规则:

  • 方法名必须相同
  • 参数列表的必须不同,与形参的名字无关
  • 返回类型无要求

方法的重载可以使得调用相同的方法名的时候,根据参数列表的不同(如个数、类型)和接收结果的变量类型不同,从而选择对应的方法

命令行传参

通过命令行对一个类进行传参

  • 打开cmd 进入类的存储路径
  • javac 类名.java 生成类名.class
  • java 包名.类名 参数

可变参数

定义一个方法时候,参数列表里的参数个数不确定,可以通过可变参数来解决。可变参数可以减少方法的重载(方法的重载必须是相同类型的情况下);可以这么认为,可变参数就是一个长度自定义的数组

规则:

  • 在方法的声明中,在指定参数类型后面加三个点 ... 即方法名(数据类型... 形参);
  • 一个方法只能有一个可变参数,它必须是方法的最后一个参数
  • 调用的方法里含有可变参数时,实参的类型必须和形成的类型保持一致

可变参数的细节:

  • 可变参数的实参可以是0个或者任意多个
  • 可变参数的实参可以为数组
  • 可变参数的本质就是数组
  • 一个方法只能有一个可变参数,它必须是方法的最后一个参数

使用可变参数时,可以当作数组来使用

public class Demo02 {
public static void main(String[] args) {
printMax(1,34,45,12,4); //1会传递给a,34,45,12,4会传递给numbers,就如同进了一个数组
printMax(1,new double[]{1,2,3,4,5}); //也可以传递一个数组
}
public static void printMax(int a,double... numbers){//numbers可以当作数组
if(numbers.length==0){
return;
}
double result=numbers[0];
for (int i = 1; i <numbers.length ; i++) {
if(numbers[i]>result){
result=numbers[i];
}
}
System.out.println("The max value is:"+result);
}
}

递归

递归就是方法调用自己

递归结果包括两个部分:

  • 递归头:什么时候不用调用自身方法。如果没有头,会死循环 也就是递归的尽头
  • 递归体:什么时候需要调用自身方法

递归的规则:

  • 执行一个方法时,就创建一个新的受保护的独立空间
  • 方法的局部变量是独立的,不会相互影响,比如n变量
  • 如果方法中使用的是引用类型,就会共享该引用类型的数据
  • 递归必须向退出递归的条件逼近,否则就会无限递归,出现栈满StackOverflowError

大计算一般不用递归,因为java用的是栈机制

public class Demo03 {
public static void main(String[] args) {
System.out.println(f(10));
}
//5! 5*4*3*2*1
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
} }

作用域

java中作用域分为全局变量和局部变量

全局变量:也就是属性,作用域为整个类体,全局变量可以不赋值,直接使用,因为有默认值

局部变量:除了属性之外的其他变量,作用域为定义它的代码块中,局部变量必须赋值后才能使用,因为没有默认值

作用域的细节:

  • 属性和局部变量是可以重名的,访问时遵循就近原则
  • 同一个作用域中,两个局部变量不能重名
  • 属性的生命周期伴随对象的创建而创建,伴随对象的死亡而死亡;局部编辑则是和代码块一起的,即在一次方法调用的过程中
  • 全局变量/属性:可以被本类使用或其他类使用(通过对象调用);局部变量:只能在本类中对应的方法中使用
  • 全局变量/属性可以加修饰符;局部变量不能加修饰符

3.1 JAVA方法:的更多相关文章

  1. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  2. JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

  3. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  4. C#调用Java方法(详细实例)

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

  5. Android C代码回调java方法

    本文将讲述下列三种C代码回调java方法 1.c代码回调java空方法 2.c代码回调java int类型参数方法 3.c代码回调javaString类型参数方法 方法都差不多,先看c代码回调java ...

  6. oracle调用java方法的例子(下面所有代码都是在sql/plus中写)

    在Oracle中调用Java程序,注意:java方法必须是static类型的,如果想在JAVA中使用system.out/err输出log. 需要在oracle 中执行"call dbms_ ...

  7. Js调用Java方法并互相传参

    Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...

  8. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  9. wrong number of arguments,java方法反射时数组参数的坑

    java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...

  10. JAVA 方法或者类的注释快捷键

    JAVA 方法或者类的注释快捷键 /*** 登录验证* @param 传入的* @return* @throws Exception*/这种注释效果 方法: 1.先敲“/”在敲两个**,然后回车 方法 ...

随机推荐

  1. clickhouse 安装部署(linux)

    1.安装部署 1.1下载文件 可以按照官网步骤安装 https://clickhouse.tech/docs/zh/getting-started/install/. 这个库目前大小有2G,网络不允许 ...

  2. data location nextcloud

    /var/snap/nextcloud/common/nextcloud/data/ Adding files to Nextcloud using the command line https:// ...

  3. DFS专题1

    例题一 39.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 , ...

  4. SQL SERVER 2014 双机热备操作流程-数据库双向同步 (第二篇:订阅)

    1.登录从服务器数据库,从数据库左侧菜单栏找到->复制->本地订阅->右击新建订阅->选择查找SQL Server 发布服务器,数据库服务器名称要是主服务器计算机名称,输入登录 ...

  5. 几种C#实现播放声音的方法 DirectX、SoundPlayer等

    第一种是利用DirectX  1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSou ...

  6. 记录小程序字符串模板渲染WxParse

    1.先去https://github.com/icindy/wxParse上downLoad代码,然后直接复制到项目里,跟pages目录同级 2.在要用的js页面声明 var WxParse = re ...

  7. win10安装node-red遇到的问题及解决方法

    1.安装失败 原因:没有管理员权限,需要用powershell(管理员)来安装 2.安装完成后运行失败 出现下面的情况 PS C:\WINDOWS\system32> node-rednode- ...

  8. k8s探针

    探针是由kubelet对容器执行的定期诊断.要执行诊断,kubelet调用由容器实现的Handler.有三类处理程序: ExecAction:在容器内执行指定命令.如果命令退出时返回码为0认为诊断成功 ...

  9. QOE 驱动下的分布式实时网络构建:Agora SD-RTN 的演进

    编者按:近日,全球软件案例研究峰会在北京召开.全球软件案例研究峰会(简称"TOP100Summit")是科技界一年一度的案例研究榜单,每年甄选年度最值得借鉴的100个好案例,旨在揭 ...

  10. CSS必知必会

    CSS概念 css的使用是让网页具有统一美观的页面,css层叠样式表,简称样式表,文件后缀名.css css的规则由两部分构成:选择器以及一条或者多条声明 选择器:通常是需要改变的HTML元素 声明: ...