zoukankan      html  css  js  c++  java
  • java基础之 方法

    一、什么是方法

    方法是用来完成特定功能的代码片段。

    比如说我们最常用的 System.out.println(); 这一段代码中 println() 就是方法,它完成的特定功能是在控制台输出我们需要输出的内容。

    二、方法该怎么写

    修饰符 返回值类型 方法名称 (参数类型 参数名称){

    ​ ...方法体...

    ​ return 返回值;

    }

    • 修饰符:定义方法访问的权限,有默认值,具体修饰符看【附录Ⅰ】
    • 返回值类型:说明方法进行后返回数据的类型,方法执行后没有返回结果就写void,不能省略不写。
    • 方法名:方法名是给代码段起一个名字,方便调用方法。名字要符合命名规范【附录Ⅱ】
    • 参数类型:参数就像一个占位符,方法内部使用参数来模拟传入的数据;如果参数传入值,占位符就会直接被参数替换掉。如果方法不需要参数,可以省略不写。
    • 方法体:完成特定功能的代码段。
    • 返回值:当代码执行完成后应该告诉调用者的内容,当然也可以什么也不告诉,我们只要不写 return 就表示没有返回值。
    // 实例:写一个计算2个整数的和的方法
    
    //修饰符       返回值 方法名  参数类型 参数名称
    public static int   add   (int     number1, int number2) {
        // 方法体
        int sum = number1 + number2;
        // 返回值
        return sum;
    }
    
    

    三、方法如何调用

    方法名(参数值);

    • 方法名:我们在写方法时定义的名字。
    • 参数值:方法在定义时需要我们传入的值,比如上面的方法sum就需要我们传入2个整数,我们在调用方法时就应该把2个整数值传递过去,如果调用时不传入参数,程序就会报错。
    • 如果方法有返回值的,我们可以使用一个变量存放起来,便于后面使用。
    public static void main(String[] args) {
        
        // 方法的调用
        int sum = add(1,2);
    
        // 使用方法的返回值
        System.out.println(sum);
        
    }
    
    // 输出
    3
    

    四、方法的重载

    书写一个 同名不同参 的方法,这种行为叫做方法的重载。

    • 方法名必须相同,如果不同就不能称为重载。
    • 参数必须不同,可以是类型或者数量不同。
    • 返回值类型不影响方法的重载,只要符合上面的2种情况即可。
    // 书写一个add的重载方法,使其能计算2个double类型的数字之和
    public static double   add   (double     number1, double number2) {
        
        // 方法体
        double sum = number1 + number2;
        // 返回值
        return sum;
        
    }
    
    • 在调用 add 方法时,jvm会根据传入的参数去匹配对应的方法。
    public static void main(String[] args) {
    
        // 方法的调用
        int sum = add(1, 2);
        // 使用方法的返回值
        System.out.println(sum);
    
        double sum2 = add(1.0, 2.0);
        System.out.println(sum2);
    
    }
    
    // 输出
    3
    3.0
    

    五、不定项参数

    在传递参数时,在参数类型的后面添加 ... 表示这个参数为不定项参数,

    也就是同类型的参数可以书写多个。

    • 不定项参数支持 jdk1.5+
    • 不定项参数只能放在参数的最后一个,普通参数放在前面。
    // 实例:根据传入的整数,计算整数之和
    public static double add(double... numbers) {
        System.out.println("不定项参数");
        // 方法体
        double sum = 0.0;
        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }
        // 返回值
        return sum;
    }
    
    • 在调用方法时,固定参数优先级大于不定项参数方法。
    public static void main(String[] args) {
    
        // 方法的调用
        int sum = add(1, 2);
        // 使用方法的返回值
        System.out.println(sum);
    
        // 符合条件的方法存在2个,这是会根据优先级大小来调用
        double sum2 = add(1.0, 2.0);
        System.out.println(sum2);
    
        double sum3 = add(1.0, 2.0, 3.0);
        System.out.println(sum2);
    
    }
    
    // 输出
    3
    重载add方法
    3.0
    不定项参数
    3.0
    

    六、递归

    函数调用它自身的情况成为递归

    • 新的问题和原来的问题有同样的解决方式时我们可以递归。
    • 必须存在一种可能,使递归可以被结束。
    // 实例:遍历文件夹下的所有子文件。
    // 文件夹下即可能存在文件,也可能是文件夹,
    // 如果是文件夹,那么它下面也即可能存在文件,也可能是文件夹,
    // 这样子文件夹的问题和我们要查询的总文件夹有同样的处理方式,这时我们就可以使用递归来处理。
    public static void dirAllFile(File file) {
        // 获取文件夹的文件列表
        File[] files = file.listFiles();
        Optional<File[]> optionalFiles = Optional.ofNullable(files);
        // 判断是否存在文件
        if (optionalFiles.isPresent()) {
            // 存在文件就比遍历文件
            for (File temp : optionalFiles.get()) {
                // 如果当前的对象是一个文件夹,我们需要遍历文件夹下的所有文件
                if (temp.isDirectory()) {
                    System.out.println("目录=" + temp.getName());
                    // 递归
                    dirAllFile(temp);
                } else {
                    System.out.println("	文件=" + temp.getName());
                }
            }
        }
    }
    
    // 调用
    public static void main(String[] args) {
        dirAllFile(new File("E:\项目\security"));
    }
    
    // 输出
    目录=exception
    	文件=ValidateCodeException.java
    目录=filter
    	文件=JwtAuthenticationTokenFilter.java
    	文件=ValidateCodeFilter.java
    目录=handle
    	文件=AuthenticationEntryPointImpl.java
    	文件=JsonAccessDeniedHandler.java
    	文件=JsonAuthenticationEntryPoint.java
    	文件=JsonFailureHandler.java
    	文件=JsonLogoutSuccessHandler.java
    	文件=JsonSuccessHandler.java
    	文件=LogoutSuccessHandlerImpl.java
    	文件=LoginBody.java
    	文件=LoginUser.java
    目录=model
    	文件=LoginBody.java
    	文件=LoginUser.java
    	文件=SecurityConfig.java
    	文件=SecurityUtils.java
    目录=service
    	文件=PermissionService.java
    	文件=SysLoginService.java
    	文件=SysPermissionService.java
    	文件=TokenService.java
    	文件=UrlAccessDecisionManager.java
    	文件=UrlFilterInvocationSecurityMetadataSource.java
    	文件=UserDetailsServiceImpl.java
    

    下面这张图片是实际的文件树

    image-20210519144518080

    • 递归会根据数据一直调用自身,层数越多消耗的资源越多,数据量大时不建议使用;假设你要遍历整个磁盘的文件,这时就不建议使用。

    附录Ⅰ 方法修饰符

    默认值default,不写修饰符即默认default;Y 表示可以访问,N表不可访问。

    修饰符 当前类 同一个包 子孙类(同一包) 子孙类(不同包) 其他包
    public Y Y Y Y Y
    protected Y Y Y N
    default Y Y Y N N
    private Y N N N N

    附录Ⅱ 方法命名规范

    • 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
    • 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
    • 【强制】方法名统一使用lowerCamelCase风格,必须遵从驼峰形式。
    • 【强制】杜绝完全不规范的缩写,避免望文不知义。
    • 【推荐】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。
    • 【参考】 获取单个对象的方法用get作前缀。
    • 【参考】获取多个对象的方法用list作前缀。
    • 【参考】获取统计值的方法用count作前缀。
    • 【参考】插入的方法用insert作前缀。
    • 【参考】修改的方法用update作前缀。
    • 【参考】物理删除的方法用delete作前缀。
    • 【参考】逻辑删除的方法用remove作前缀。
    原创内容,如果你觉得文章还可以的话,不妨点个赞支持一下!转载请注明出处。
  • 相关阅读:
    elasticsearch 6.x.x 获取客户端方法
    struts2+spring 配置404和500错误页面
    linux 部署redis集群 碰到的坑
    Linux下安装redis
    struts加载spring
    有关struts中DispatchAction的用法小结
    spring AOP原理
    struts2.0的工作原理?
    Spring MVC的实现原理
    spring 的单例模式
  • 原文地址:https://www.cnblogs.com/lixingwu/p/14785059.html
Copyright © 2011-2022 走看看