3.1 JAVA方法:
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方法:的更多相关文章
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- JNI中C调用Java方法
背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- Android C代码回调java方法
本文将讲述下列三种C代码回调java方法 1.c代码回调java空方法 2.c代码回调java int类型参数方法 3.c代码回调javaString类型参数方法 方法都差不多,先看c代码回调java ...
- oracle调用java方法的例子(下面所有代码都是在sql/plus中写)
在Oracle中调用Java程序,注意:java方法必须是static类型的,如果想在JAVA中使用system.out/err输出log. 需要在oracle 中执行"call dbms_ ...
- Js调用Java方法并互相传参
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- wrong number of arguments,java方法反射时数组参数的坑
java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...
- JAVA 方法或者类的注释快捷键
JAVA 方法或者类的注释快捷键 /*** 登录验证* @param 传入的* @return* @throws Exception*/这种注释效果 方法: 1.先敲“/”在敲两个**,然后回车 方法 ...
随机推荐
- [Leetcode 701]二叉搜索树BST中插入元素
题目 BST二叉搜索树中插入元素 二叉搜索树:左边<root<右边 https://leetcode.com/problems/insert-into-a-binary-search-tr ...
- node express框架搭建
前面了解了一些node.js的服务建立及事件绑定和触发,要想一步一步自己来写所有响应,还是比较麻烦,看了express,很多东西都由框架自动完成,开发人员仅需关注自己想要实现的功能即可,真正实现了让开 ...
- 中兴radius属性列表new.xls
标准属性 自定义属性
- 四、用CSS制作图形以及简单动画
一.利用阴影画一个月亮 说明:画月亮,需要先画一个圆,然后利用box-shadow属性,生成阴影,再将圆的颜色变为透明即可. <html> <head></head> ...
- Hadoop服务启动失败
Hadoop服务启动失败今天启动Hadoop时,终端报了一个新的错误 ```bashStarting namenodes on [192.168.19.128]192.168.19.128: ssh: ...
- C语言中字符数组的赋值和复制
/*C中,字符串,即字符数组的赋值与字符变量.常量.变量的赋值是不同的.初学者总会犯错误. 常见错误如下: 1.定义的时候直接用字符串赋值 char a[10]; char a[10]="h ...
- C语言中~与!的区别
! 是逻辑非or否定 凡是a的值不为0的,!a 就等于0: 如果a的值为0,则 !a 的值为1 而~这个是 按位取反 比如 int a=2 ; 用二进制表示为00 00 00 10; 则 !a ...
- 继承和组合关系: is a & has a
继承:is-a 比如 营销人员类 和 开发人员类 都继承自 职工类,营销人员 is-a 职工.组合:has-a 比如 汽车类 包含一个 发动机类 的对象,汽车 has-a 发动机.
- 文件上传靶场 upload-labs Pass 5-10
Pass-5 .user.ini文件 根据我的观察,最新版的upload-labs第五关和旧版的不一样,这一关可以使用和Pass-10一样的方法通过,但是,其他所有的关卡都禁止了.ini文件的上传,就 ...
- ABAP 调用HTTP上传附件(二)之中文乱码
1.这篇文章的由来 之前已经发表了<ABAP 调用HTTP上传附件>的文章,详细介绍了如何通过HTTP请求传输附件,可点击链接参考原有文档 因为之前对传输文件的中文文件名处理上解释不够详细 ...