栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础之Java方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础之Java方法

Java 方法

文章目录
    • Java 方法
      • 设计原则
      • 命名规则
      • 方法的定义
        • 主函数
        • 方法头
        • 方法体
      • 方法调用
        • 递归
      • void关键字
      • 通过值传递参数
      • 方法重载
      • 变量作用域
      • 命令行参数
        • 可变参数
      • finalize()方法
      • 构造方法

方法是语句的集合:

  • 解决一类问题的步骤的有序组合
  • 包含于类或对象中
  • 在程序中被创建,在其他地方被引用

优点:

  1. 使程序变得更简短而清晰
  2. 有利于程序维护
  3. 提高程序的开发效率
  4. 提高了代码的重用性
设计原则

原子性:一个方法只完成一个功能,利于后期扩展

命名规则
  • 第一个单词应以小写字母作为开头,后面单词则用大写字母开头,不使用连接符。例如:setByName()
  • 下划线可能出现在JUnit的测试方法名称中用以分隔名称的逻辑组件
    • 典型模型:test_。
    • 例如:testPop_emptyStack
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
	方法体
	return 返回值;
}
public static int age(int birthday){
    return birthday;
}
public static int max(int num1, int num2){
    return num1 > num2 ? num1 : num2; 
}

方法包含一个方法头和方法体:

主函数
  • main 方法的头部是不变的
    • 带修饰符 public 和 static
    • 返回 void 类型
    • 方法名字是 main,
    • String[] 类型参数:String[] 表明参数是字符串数组
  • 其它语言中方法指过程和函数
    • 返回非void类型返回值的方法称为函数
    • 返回void类型返回值的方法叫做过程
方法头
  • 修饰符:可选的,告诉编译器如何调用该方法,定义了该方法的访问类型
  • 返回值类型:方法可能会返回值
    • returnValueType是方法返回值的数据类型
    • 方法执行没有返回值,returnValueType是关键字void
  • 方法名:方法的实际名称;方法名和参数表共同构成方法签名
  • 参数类型:参数像是一个占位符
    • 当方法被调用时传递值给参数,这个值被称为实参或变量
    • 参数列表指方法的参数类型、顺序和参数的个数
    • 参数是可选的,方法可以不包含任何参数
方法体

包含具体的语句,定义该方法的功能

方法调用
  • main 方法是被 JVM 调用的,此外main 方法和其它方法没区别
  • Java支持两种调用方法的方式,根据是否返回值选择
  • 程序调用一个方法时程序的控制权交给了被调用的方法
    • 当被调用方法的返回语句执行
    • 或到达方法体闭括号时候交还控制权给程序
  • 当方法返回一个值的时候,方法调用通常被当作一个值
int larger = max(10,20);
  • 如果方法返回值是void,方法调用一定是一条语句
System.out.println("欢迎访问");
public static void main(String[] args) {
    int i = 5; 
    int j = 2;   
    int k = max(i, j);  
    System.out.println(i+"和"+j+" 比较; 最大值是: "+k);} 

public static int max(int num1, int num2){  
    return num1 > num2 ? num1 : num2; 
}
运行结果:
5和2 比较; 最大值是: 5
递归

方法自身调用自身

  • 递归头:必须有结束调用的时候,若没有会陷入死循环
  • 递归体:调用自身方法的时候

连续调用 → 边界结束 → 值返回

缺点:深度越大时空复杂度越高;对性能要求很高

void关键字

void类型方法,不返回值

public static void main(String[] args) { 
    printGrade(78.5);
} 
public static void printGrade(double score) {  
    if (score >= 80.0)    
        System.out.println('B');  
    else if (score >= 70.0) 
        System.out.println('C');  
    else      
        System.out.println('F');}
运行结果:C
//一个void方法的调用一定是一个语句; 所以它被在main方法第三行以语句形式调用:就像任何以分号结束的语句一样
通过值传递参数

如果调用一个方法需要提供参数,必须按照参数列表指定的顺序提供

public static void main(String[] args) {   
    int a = 1;   int b = 2;   
    System.out.println("原a值:"+a+",原b值:"+b);   
    swap(a, b);  // 调用swap方法   
    System.out.println("现a值:"+a+",现b值:"+b);}

public static void swap(int n1, int n2) {  
    System.out.println("交换前n1的值"+n1+",n2的值"+n2); 
    // 交换 n1 与 n2的值   
    int temp = n1; 
    n1 = n2;  
    n2 = temp;  
    System.out.println("交换后n1的值"+n1+",n2的值"+n2); 
}
运行结果:
原a值:1,原b值:2
交换前n1的值1,n2的值2
交换后n1的值2,n2的值1
现a值:1,现b值:2
//传递两个参数调用swap方法,方法被调用后,实参的值并没有改变
  • Java 基本数据类型传递参数时是值传递
    • 传递数值的副本,对原数据无影响
  • 引用类型传递参数时是引用传递
    • 引用 z = null 只是将引用z不指向任何对象 ,并不会对原先指向的对象数据进行修改
      • 但原数据若没有其他引用将无法找回变成垃圾
    • 引用传递的是引用地址,在此对数据进行此操作会影响原数据
方法重载

创建另一个有相同名字但参数不同的方法

一个类的两个方法拥有相同的名字,但是有不同的参数列表

public static int max(int num1, int num2){ 
    return num1 > num2 ? num1 : num2; 
public static double max(double num1, double num2) { 
    return num1 > num2 ? num1 : num2;
}
  • 如果调用max方法时传递的int型参数

    • 则 int型参数的max方法会被调用
  • 如果传递的是double型参数

    • 则double类型的max方法体会被调用
  • 这叫做方法重载,Java编译器根据方法签名判断哪个方法应该被调用。

  • 方法重载可以让程序更清晰易读

    • 执行密切相关任务的方法应该使用相同的名字
  • 重载的方法必须拥有不同的参数列表;

    • 不能仅仅依据修饰符或者返回类型的不同来重载方法
变量作用域

变量的范围是程序中该变量可以被引用的部分:

  • 方法内定义的变量被称为局部变量
    • 局部变量的作用范围从声明开始,直到包含它的块结束
    • 局部变量必须声明才可以使用
  • 方法的参数范围涵盖整个方法
    • 参数实际上是一个局部变量
  • for循环的初始化部分声明的变量,其作用范围在整个循环
    • 但循环体内声明的变量其适用范围是从它声明到循环体结束

可以在一个方法里,不同非嵌套块中多次声明一个具有相同名称的局部变量,但不能在嵌套块内两次声明相同名称局部变量

命令行参数

运行一个程序时候再传递给它消息要靠传递命令行参数给main()函数实现

命令行参数是在执行程序时候紧跟在程序名字后面的信息

public static void main(String args[]){   
    int[] a = new int[10];  
    for(int i=0; i   
        System.out.println("a[" + i + "]: " + a[i] + "t");  
    }
}
运行结果:
a[0]: 0	a[1]: 0	a[2]: 0	a[3]: 0	a[4]: 0	a[5]: 0	a[6]: 0	a[7]: 0	a[8]: 0	a[9]: 0	
可变参数

JDK1.5开始Java支持传递同类型可变参数给一个方法

  • 在方法声明中,在指定参数类型后加一个省略号(…)
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数
    • 任何普通的参数必须在它之前声明
  • 对于可变参数,编译器会将其转型为一个数组
    • 所以在函数内部可变参数名即可看作数组名
//声明可变参数typeName... parameterName    类似于 typeName[] parameterName
public class Test {   
    void func(String... args){}  
    void func(String [] args){} //这两个方法的命名是相等的,不能作为方法的重载
    public static void main(String[] args) {   
        Test t = new Test();     
        test.func("Wallen","John","Smith"); 
        test.func(new String[3]);      //可变参数,即可向函数传递 0 个或多个参数   
        //这两种调用方法效果一样   
    }
}
//对于可变参数的方法重载保证参数列表不一样
void func(String... args);
void func(String args1,String args2);
func("Wallen","John");//优先匹配固定参数的方法
finalize()方法

Java 允许定义这样的方法,

finalize( )

  • 在对象被垃圾收集器析构(回收)之前调用
  • 用来清除回收对象
    • Java 的内存回收可以由 JVM 来自动完成
    • 如果手动使用,则可以使用上面的方法

例如:你可以使用 finalize() 来确保一个对象打开的文件被关闭了。

在 finalize() 方法里,必须指定在对象销毁时候要执行的操作。

finalize() 一般格式是:
protected void finalize() {    }

关键字 protected 是一个限定符,确保 finalize() 方法不会被该类以外的代码调用

构造方法
  • 当一个对象被创建时候,构造方法用来初始化该对象
    • 构造方法和所在类的名字相同,但构造方法没有返回值
  • 通常会使用构造方法给一个类的实例变量赋初值
    • 或者执行其它必要的步骤来创建一个完整的对象。
  • 所有的类都有构造方法,Java 自动提供了一个默认构造方法
    • 默认构造方法的访问修饰符和类的访问修饰符相同
      • 类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected
    • 但定义了自己的构造方法之后,默认构造方法就会失效
public class Puppy{   
    public Puppy(){	     //无参构造函数(无构造方法时的默认构造方法)
    }    
    public Puppy(String name){       //有参构造函数,这个构造器仅有一个参数:name  
    }   
    public static void main(String[] args){    
        Puppy p = new Puppy();		//调用构造方法初始化一个对象                     
        PupPy p1 = new Puppy("张三");		//调用有参构造方法初始化一个对象   
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027417.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号