zoukankan      html  css  js  c++  java
  • Java入门(七):方法

    方法,在日常生活中可以理解成解决问题或处理事情的技巧,一个方法的形成,需要思考和分析,从而形成一步一步的步骤,最后在实际执行过程中验证自己的思路。在Java中,方法的形成亦是如此。

    方法,指用于封装一段特定的逻辑功能,如计算百分比、判断非空、时间日期的转换等操作,可以在程序中被反复调用,减少重复代码,也便于程序维护,也可以相当于一个小轮子。

    一个完整的方法主要由访问修饰符、修饰词、返回值类型、方法名、参数列表、异常处理、方法体七个部分组成,只能声明在类的内部。

    访问修饰符 修饰词 返回值类型 方法名(参数列表) throws 异常 {

      方法体

    }

    1、访问修饰符

    用于声明方法的可用范围。包括public、protected、private、缺省四种。public修饰的方法可以被所有类访问。protected修饰的方法可以被位于同一包中的所有类访问,也可以被所有子类(可以不同包)访问。private修饰的方法只能被当前类访问。缺省,也叫无访问修饰符,其修饰的方法可以被位于同一包中的所有类访问。

    2、修饰词

    用于声明方法的性质或用途。包含static、final、abstract、native、synchronized五种。static修饰的方法,属于静态方法,也称为类方法,可以直接通过类名点方法名调用。final修饰的方法,不能被重载(在面向对象会仔细说明重载、重写的)。abstract修饰的方法表示此方法是一个抽象方法,表示类中已声明但没有实现。native修饰的方法在类中没有实现,此修饰词并不多用。synchronized修饰的方法,表示该方法被“锁”,其他地方的调用无法执行,直到方法运行完,在后面的线程中会详细介绍。

    3、返回值类型

    用于声明方法的处理结果的数据类型。如果方法没有返回值,可以使用void来声明,表示无返回值。如果方法有返回值,则必须在方法中使用return语句,返回与返回值类型相兼容的返回值数据。

    4、方法名

    方法的识别名称,其命名原则遵守Java命名规范,做到见名知意,长一点也可以。

    5、参数列表

    用于声明方法中需要处理的数据,是方法执行的前提条件,可以有多个相同或不同数据类型参数。

    6、异常处理

    使用throws声明方法运行中可能会出现的异常,将其抛给方法调用者,常见的如空指针异常、输入输出异常等。

    7、方法体

    方法体是方法的处理过程,有具体的算法逻辑或业务逻辑,是一个方法的核心。

    package javalearningday06;
    
    import java.util.Arrays;
    
    /**
     * 方法
     * @author 小川94
     * @date 2018年3月25日
     */
    public class Function {
    
        public static void main(String[] args) {
            System.out.println(helloSomeone("")); // Hello world !
            System.out.println(helloSomeone("小川94")); // Hello,小川94 !
            System.out.println(randomCheckCode(4));
            
            // 对于方法中参数的验证
            int a = 5; // 声明的局部变量a
            // 将a传给add方法,并不会使用上面已经在栈中存在的a,而是会另外在栈中开辟存储空间,存放传参a
            add(a); 
            // 输出打印的a是main方法中声明的变量a,不是add方法中的传参a
            System.out.println(a); // a = 5
        }
        
        /**
         * 打招呼方法
         * StringUtil为工具类,同包下的类不需要引用;
         * 对于传递进来的参数,如果后续会对其进行相关操作,请务必判断是否为空
         * @param name 名称
         * @return
         */
        public static String helloSomeone(String name) {
            if (StringUtil.IsNullOrEmpty(name)) {
                return "Hello world !";
            }
            return "Hello," + name + " !";
        }
        
        /**
         * 生成num位随机验证码字符串
         * @param num 验证码位数
         * @return
         */
        private static String randomCheckCode(int num){
            if (StringUtil.IsNullOrEmpty(num)) {
                return "请传入需要生成几位数验证码的参数!";
            }
            if (0 == num || num < 0) {
                return "请传入大于0的正整数!";
            }
            String[] dic = {"A","B","C","D","E","F","G","H","I","J",
                    "K","L","M","N","O","P","Q","R","S","T",
                    "U","V","W","X","Y","Z","0","1","2","3",
                    "4","5","6","7","8","9"};
            String[] strArr = new String[num];
            for (int i=0; i<strArr.length; i++) {
                int index = (int)(Math.random()*dic.length);
                strArr[i] = dic[index];
            }
            return Arrays.toString(strArr);
        }
        
        /**
         * 关于方法中变量的问题:
         *   方法中声明的变量、参数列表的传参都是局部变量,运行期间,都会在栈中分配存储空间
         * @param a
         */
        protected static void add(int a) {
            a++;
        }
        
    }

    下面是一个是否为空判断的工具类

    package javalearningday06;
    
    /**
     * 是否为空工具类
     * @author 小川94
     * @date 2018年3月25日
     */
    public class StringUtil {
        
        /**
         * 判断对象是否为null或者空字符串
         * @param obj
         * @return
         */
        public static boolean IsNullOrEmpty(Object obj){
            if (obj == null) { 
                return true; 
            }
            if (obj.toString().trim().equals("")) { 
                return true; 
            }
            return false;
        }
        
        /**
         * 判断对象不为null或空字符串
         * @param obj
         * @return
         */
        public static boolean IsNotEmpty(Object obj){
            return !IsNullOrEmpty(obj);
        }
        
    }

    对于方法,也可以这样通俗的理解,将整个方法当做一台可以重复生产产品的机器,访问修饰符相当于这台机器可以由谁来操作;修饰词相当于机器的设置,对产品规格、重量等的设置;返回值类型相当于最后的成品;方法名就是这台机器的名字、编号;参数列表就是生产产品的原料;异常处理相当于机器运行过程中可能会出现的故障;方法体就是机器的加工过程了,最后通过return语句,来生成最终的成品。

    Java的高级特性是面向对象,可以对万事万物进行抽象处理,一切皆对象,其中有抽象映射具体、具体归纳抽象的相互转化,这些不仅会在编程中运用,生活中亦是如此。

    上面的代码都上传至了GitHub,地址是https://github.com/XiaoChuan94/javalearning/tree/master/javalearningday06,有需要的可以去下载观看,如果喜欢就给个star吧!如有不足,欢迎下方留言交流。

    文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!

    公众号后台输入关键字“Java学习电子书”,即可获得12本Java学习相关的电子书资源,如果经济能力允许,还请支持图书作者的纸质正版书籍,创作不易。

  • 相关阅读:
    WebApi接口返回值不困惑:返回值类型详解
    Autofac 依赖注入框架 使用
    ASP.NET Core:使用Dapper和SwaggerUI来丰富你的系统框架
    ASP .Net Core 使用 Dapper 轻型ORM框架
    基于AspNet Core2.0 开发框架,包含简单的个人博客Demo
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)
    精简版自定义 jquery
    vs code 前端如何以服务器模式打开 [安装服务器] server insteall
    RestSharp用法小结
    翻译:WebApi 认证--用户认证Oauth解析
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/8642989.html
Copyright © 2011-2022 走看看