方法是什么?

方法是可以完成某个特定的功能的并且可以被重复利用的代码片段,方法的出现,让代码有了很强大复用性

方法定义:

[修饰符列表] 返回值类型 方法名(形式参数列表){

方法体;

}

形式参数列表:

简称:形参

形式参数列表中的每一个参数都是"局部变量",方法结束后内存释放,形参的个数有(0-n)个,形参有多个的话,使用","隔开,是英文的逗号, 形参的数据类型起决定性作用,形参的变量名随意

方法体:

由java语句构成,方法体中编写的代码是业务逻辑代码,完成某个特定的功能,在方法体中处理业务逻辑 代码需要的数据,数据来源就是这些形参

注解:在写方法时参数是形参,而在调用有参数的方法时,这个参数列表为实参(实际参数列表),形参和实参必须一一对应,类型对应,个数对应。

返回值类型:

返回值一般指的是一个方法结束之后的结果,方法就是为了完成某个特定的功能,方法结束后,大部分都有一个结果,而体现结果的一般都是数据,数据得有类型,这就是返回值类型

返回值类型可以是任何类型(基本数据类型/引用数据类型)

返回值类型不能不写,当一个方法执行结束不返回任何值时,必须写void关键字

返回值类型不是void,那么在方法执行结束的时候必须使用"return 值"这样的语句来完成"值"的返回,不然会编译报错

如果返回值类型是void,那么在方法体当中不能有"return 值",这样的语句,但是可以有"return;",这样的语句。

注解:"return;"作用终止当前方法,只要有"return ;"关键字的语句执行,当前方法必然结束,但是不是整个程序结束,而写上System.exit(0);语句, 运行时则终止程序的执行,强行退出JVM

注意:方法定义的先后顺序没有关系,方法定义在类体中,但是在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。

方法调用的时候,该方法需要内存空间,在栈中分配,而且方法只有在调用的时候才会在栈中分配空间,并且调用时就是压栈,分配空间,方法执行结束后,该方法需要的空间就会释放,此时发生弹栈动作

方法调用时参数的传递问题:

参数传递的时候,和类型无关,不管是基本数据类型还是引用数据类型,统一都是将变量(盒子)中保存的那个值复制一份,传递下去,但是这个值可能是一个数字100,也可能是对象的内存地址(内存地址也是一个值),就一句话:不管是哪一种数据类型的传递,都是将变量中保存的那个值复制一份传递过去。

注解:栈中存储方法运行需要的内存,以及栈中存储方法的局部变量

局部变量有一个特点:方法结束之后,局部变量占用的内存会自动释放

注意:程序开始执行的时候是先执行main方法。因为main方法是程序入口,main方法不需要程序员手动调用,是由JVM调用的,但是除了main方法其他方法都需要程序员手动调用才能被执行。在使用方法时,自定义的方法可以调用main方法,但是没有意义,容易出现无限调用,一个方法不能再另外一个方法里声明(方法与方法之间关系是平级关系)

方法重载(overload)

什么情况下考虑使用方法重载机制?

当多个方法功能相似的时候,建议将方法名定义为一致的,这样代码美观,又方便编程(容易记忆,方便使用)

注意:方法重载不能随便使用,如果功能不相似,就不要使用

满足什么条件的时候构成了方法重载?

在同一个类中

方法名相同

形式参数列表不同(参数个数不同,参数数据类型不同,参数顺序不同)

方法重载优点:代码美观、方便代码的编写

方法覆盖/重写(Override)

构成方法覆盖的条件

方法覆盖发生在具有继承关系的父子类,这是首要条件

覆盖之后的方法与原方法具有相同的返回值类型、相同的方法名、相同的形式参数列表

使用方法覆盖的注意事项:

私有的方法不能被继承,所以不能覆盖/重写

构造方法也不能被继承,所以也不能覆盖/重写

覆盖/重写之后的方法不能比原方法拥有更低的访问权限,可以更高

覆盖/重写之后的方法不能比原方法抛出更多的异常,可以相同和减少

方法覆盖/重写只和方法有关,与属性无关

静态方法不存在覆盖/重写

注解:不是静态方法不能覆盖/重写,而是覆盖意义不大,方法覆盖/重写只针对实例方法,私有不能覆盖,静态不谈覆盖

什么时候会考虑使用"方法覆盖/重写"?

子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类对这个方法进行从新编写,直接把父类的方法复制到子类,重写方法体(方法中的代码),其他不改变

注解:方法覆盖/重写是为了实现多态,同时为了增强类的重要性和复用性,当子类对父类继承过来的方法进行"方法覆盖/重写)"之后,子类调用该方法的时候,一定执行覆盖之后的方法

方法递归

什么是方法递归?

方法自身调用自身。

注意:使用递归的时候,必须添加结束条件,没有结束条件,会发生栈内存溢出错误。但是当递归有结束条件,并且结束条件合法的时候,也可能会发生栈内存溢出错误。原因:递归太深,栈内存不够了

栈内存溢出错误:StackOverflowError,原因:栈内存不够

方法递归简单例子:

1 public classTest {2 public static voidmain(String[] args) {3 int add = add(10);4 System.out.println(add);5 }6 public static int add(intn) {7 if (n ==1) {8 return 1;9 }10 return n +add(n - 1);11 }12 }

怎么让java技术变强_java中的方法相关推荐

  1. java图形用户界面概述_Java中图形用户界面概述

    Java中图形用户界面概述,转型或者高薪就业,java工程师是不错的选择,而且java是目前乃至未来都主流的程序语言.Java中图形用户界面概述,一起来学习下java方面的知识吧. 1.1.组件 组件 ...

  2. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  3. Java技术在多数据库系统中的应用研究

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解; 摘 要 本文讨论的是在多种异构 ...

  4. java ref 应用类型_Java中的四种引用类型比较

    1.引用的概念 引用这个概念是与JAVA虚拟机的垃圾回收有关的,不同的引用类型对应不同的垃圾回收策略或时机. 垃圾收集可能是大家感到难于理解的较难的概念之一,因为它并不能总是毫无遗漏地解决Java运行 ...

  5. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集

    首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态 ...

  6. hashset java 键值对_Java中的各个容器的性能对比

    java中个个容器的属性,性能,参数对比: Java容器的性能及属性的对比 List:Vector,ArrayList,LinkedList Vector:内部是数组数据结构,可以理解为加锁的Arra ...

  7. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

  8. Java可移动性不强_java地位无可撼动的原因

    如今,面对曾经在程序员中被各种新技术掩盖直至堙灭的技术值得怀念.犹如COBOL这当年被老程序员们尊为神器的语言如今也基本没有价值.而Java作为现代程序员的中坚力量在这点上会不会成为下一个COBOL? ...

  9. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

最新文章

  1. Linux RAR 安装和使用
  2. 云计算的网络规划——私有云
  3. hive 强转为string_Hive(二)【数据类型、类型转换】
  4. crt mysql中文乱码_CRT 和mysql 中文乱码解决方式
  5. 函数模板的载体-HPP
  6. Jquery - jquery 插件,jQuery.Switchable
  7. java cxf服务端_webservice概述及cxf在Java开发中应用(二) 简单搭建cxf服务端
  8. python下载安装教程-Python和Anoconda和Pycharm安装教程
  9. Minix、UNIX、Linux的区别与联系
  10. 斐波那契数列的java代码
  11. 利用vbs脚本实现自动发送微信消息
  12. 数值分析 解线性方程组的编程实现(Hilbert)
  13. 3D线激光成像数学模型简析与实现
  14. UI设计中聊天气泡框的设计技巧
  15. 计算机专业实用设计专利例子,计算机类实用新型专利有几个发明人
  16. 判断是否是平衡二叉树
  17. c语言进程管理,OS进程管理模拟(C语言实现)
  18. win10查看计算机管理员,win10系统下怎么获取administrator管理员权限
  19. 【数字IC/FPGA】门控时钟
  20. Excel VBA初级系列培训--课时1

热门文章

  1. 在家办公,我比上班还累你信吗?
  2. 程序员需要了解的硬核知识之操作系统和应用
  3. 滴滴缺席的这 11 个月,顺风车迷局如何破?
  4. 深度学习图像算法在内容安全领域的应用实践和优化
  5. 如何打造工业物联网帝国?
  6. 戴尔科技集团公布 2019 财年第四季度及全年财报,巨大进步和强劲发展的一年...
  7. @程序员,沟通这项核心技能你掌握了多少?
  8. 这一次,老罗要干掉微信?
  9. AI 产品经理如何练就?一文了解十大必备技能
  10. 金三银四我带你去BAT面试现场,干货整理