Java基础之方法部分

Java中的方法好似c/c++/python中的函数:

方法是一种语法结构,它可以把一段代码封装成一个特定功能,减少代码重复,提高开发效率。使得代码逻辑更加清晰、更牛逼!

方法格式:

标志符(public static) 方法返回类型 方法名(形式参数【注意这种格式 int a】)

实现方法的代码

...

}

如写一个两数求和函数:

使用方法的好处?

  • 提高了代码的复用性
  • 让程序的逻辑更加清晰 

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

方法体代码(需要执行的功能代码)

return返回值;

}

方法的调用格式:

方法名(实参列表);

方法的修饰符:暂时使用public static修饰

方法申明了具体的返回值类型,内部必须使用return 返回需要返回的数据 对应的返回值类型

形参列表可以是多个,亦可以没有 形参之间使用,隔开 不能像Python一样关键字传参 仅位置参数

例如:无返回值无参数类型的方法

 如果方法不需要返回值,不需要接收参数,怎么办?

方法不需要返回结果则申明返回类型为void;方法不需要传参数则直接不写形参()

方法没有设置返回值 方法体里面是不能写return语句的!

方法常见的问题:

  • 方法的编写顺序无所谓
  • 方法与方法之间是平级关,不能使用嵌套定义。
  • 方法的返回值为void时,方法体内不能使用return语句不然会报错;如果写了返回值类型 return的数据类型必须要和起初定义的返回值类型一致。
  • return语句执行后直接退出这个函数,其下面的语句不会执行,属于无效代码。
  • 方法不调用,定义函数里的代码就不会执行,调用时必须复合规则 如:实参个数与形参个数对等
  • 有返回值的方法调用时可以定义变量接收结果,或者直接输出调用,甚至直接调用无返回值只能调用 不需要使用变量接收。

方法定义的技巧:

复习一边地定义方法的格式:

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

方法体语句

返回值

}

例如:

public static int add(int a,int b){

return a+b;

}

返回值类型+方法名+形参列表

修饰符:public static(暂时固定)

方法名:见名知义 有意义 驼峰模式 英文模式 复合标识符命名规则

方法体代码:具体功能具体实现

真正需要关注的两点:

  • 返回值类型
  • 参数问题

练习:输入一个n,计算出1~n的和

练习:判断一个数是基数还是偶数;返回某数是否(奇偶)

想想能不能简化代码呢?之前学了一个三元运算符  可以替代if else(双分支语句)

数组求最值的方法:类似于选择排序

定义一个数组 假设第一个数是最大的 然后和他后面的数进行比较,每次交换得到最大的数。

也可直接赋值,更新:

 

 利用选择排序降序得到最大值:

回忆一下之前说过的几个区(内存被分为五个区:栈、堆、方法区、接口...):

栈:里面一般放局部变量 函数 main函数(主体函数)  执行特点:先进后出

堆:new 对象 例如 int[] arr={1,2,3};   {1,2,3}就先存在堆区         数组地址在栈区 通过指向方法。

方法的内存运行机制:

简单口述一下执行流程:

栈区有:main、study 、eat、Sleep

首先执行main函数 然后直接来到study()函数内 又先开始执行eat() 执行完成后eat()退出栈区;

继续执行study()里的打印学习 然后执行Sleep() 执行完毕后退出栈区==study退出栈区==main函数也退出栈区,代码结束完毕。

So:方法的运行区在哪里?

栈内存里。

Java的参数传递机制:值传递!!!

  • 在传输实参给方法的时候,并不是传输的变量本身,而是传输实参变量中存储的值,这就是值传递。
  • 实参:调用函数是传入的值
  • 形参: 定义函数是的值 参数

针对不同的数据类型(基本数据类型/引用数据类型),若改变形参的值,有不同的结果:

例如:

 

 又如数组:

小结:同样是值传递,改变值,基本类型(形参的改变不会作用于实参的改变,方法里的形参执行完毕 就会销毁 整个方法也会销毁 内存会释放空间)不会变化;引用类型会发生值的变化。

java不像c语言一样,有指针的知识(指针==地址) c语言分为传值调用 传址调用。java是类似的,传入基本数据类型是传的值 引用数据类型是传的地址。

练习:打印任何数据的内容:

打印格式:[1,2,3]

 

补充一个二分查找:

申明:二分查找针对顺序数组进行元素查找(如果是无序的数组,也可以通过排序方法先排好,在进行二分查找); 二分查找的效率很高,每查找一次减少一半的规模 时间复杂度:O(logn)

 

 

练习:比较两个数组是否一样

如果说比较内容的话我们就可以利用排序来比较,这里要比较完全相同就需要遍历一个一个判断。

 

 有时候我们编程的时候可以考虑逆向思维,更加简单,思路更加灵活。

方法重载:
特点:

实现功能类似,方法名一样,参数列表不同,方法重载可以提高代码的复用性。

同一个类里,多个方法相同,形参列表不同,区分大小写。参数的类型数量顺序,与参数名无关。

方法重载的好处:

对于相同的功能业务场景,可读性好,方同提法名相似是统一类型的功能,通过不同实现的功能差异化的选择,这是一种专业的代码设计。

简化方法:

return关键字的独用:

直接结束方法运行,后面的代码不会再执行到了,有一种拦截的作用。该方法可以单独使用在任何方法

使用格式:

return;

例如:执行除法(要求 除数不能为0)

 案例训练:

结合之前学习的所有java基础知识,完成一个个案例。

涉及到的Java知识点:

  • 变量、数组
  • 运算符
  • 程序流程控制if else  if else  switch 死循环 循环嵌套
  •  跳出关键字:break、continue、return
  • 方法

编程思维:

利用Java技术解决实际问题,代码就是解决问题的逻辑。

提高编程思维和编程能力:

写代码之前将问题细分,画出流程图;结合大量练习,勤于思考,熟能生巧。

前期:模仿 后期:内化+创新

不积跬步,无以至千里;不积小流,无以成江海。     学习在于重复,积累,坚持!!!

案例一:买飞机票:

  • 机票价格按照淡季旺季、头等舱和经济舱、输入机票原价、月份、类型
  • 按照如下规则计算机票的最终售价:旺季(5~10)经济舱:八五折  头等舱:九折  淡季(其他月份) 经济舱:六五折  头等舱:七折
  • 键盘录入+流程控制语句的选择+描述规则+反回对应类型的数据

 

 

 

代码测试:

注意:

遇到判断区间匹配使用if语句;遇到值匹配使用switch语句。 

案例二:找素数:

  • 基于一道面试题,判断1001~200之间的素数 满足打印
  • 素数:只能被1和本身整除的数
  • 使用试除法
     

 案例三:开发验证码

  • 定义方法实现随机生成5位验证码,每位可能是英文大写、英文小写、数字
  • 定义方法 返回验证码(String)方法参数是验证码的位数 
  • 方法内部使用for循环 随机生成验证码对应的类型(标志)再具体随机验证码
  • 把生成的验证码结合起来即可

 

 

 测试:

 注意:确定密码的类型 知道类型的个数 利用随机数(利用ASCII码)强转类型 随机生成验证码。

"+"运算 能算就算 不能算就在一起            如:1+'a'==98  (int char) 最终结果为最大存储字节。

案例四:数组元组赋值:

  • 例如: int[] arr={..};   int[] arr2=arr;  这种不算数组元素赋值  而是指向一个相同的数组对象(共用数组数据)
  • 需求:把一个数组的所有元素赋值到另一个数里
  • 遍历 赋值 输出两个数组的值验证

 

 案例五:评委打分

需求:

  • 打分区间【0~100】6个评委 每个人打分  选手最终的分数:去掉最高分,最低分 计算平均分
  • 利用动太初始化数组
  • 遍历 获得最高分 最低分 平均分
  • 业务处理 返回结果

 

 

 注意:类型的重要性 不管是变量 方法 数组 他们是一个体系的 需要什么类型的数据 ?

案例六:数据加密

  • 定义一个数组 输入数据 进行加密(按一定的规则 例如:先+5 然后%10最后逆置数组)
  • 打印加密的和解密的数据
  • 加密,解密是双向的。

 

 

 案例七:双色球开发系统

需求:随机生成一组中奖号码(六个红球、一个蓝球)

红球号码在1~33 中选择 不能重复  、蓝球号码在1~16中选择 依照对应球的个数进行发奖;

假设规则:

红球命中个数+蓝球命中个数 来确立。      

5元(1+1)

10元(2+1/3+1/4+0)

200元(4+1/5+0)

3000元(5+1)

最高500w(6+0)

最高1000w(6+1)

主要有三个部分:首先、随机生成7个中奖号码 然后用户输入猜测这7个号码 最后系统判定。

 

 

 

 

 

主要要点:

录入数据到数组后,如何判断之前数据是否重复?利用无限循环+标志位巧妙解决;

统计红蓝球个数时的清晰头脑,什么时候记录,什么时候展示数据。

 Java基础结束后,我下一篇文章将会介绍Java面向对象的基础知识。

谢谢大家的阅读,我会不断更新写出更好地文章!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值