java学习day06
方法
什么是方法?
java的方法是java语句的集合,它们在一起执行一个功能
方法具有哪些特性?
具有复用性和独立功能
方法时解决一类问题的步骤的有序组合
方法在类中定义
方法在程序中被创建,在其他地方被引用
方法设计原则:设计方法时要保证方法的原子性,一个方法只完成一个功能,这样有利于后期的扩展
方法的定义
java方法类似于其他语言的函数,是一段用来完成特定功能的代码片段
方法包含一个方法头和方法体
方法头:
修饰符:修饰符是可选的,修饰符定义了该方法的访问类型
返回值类型:方法的返回值,返回值可以是基本数据类型也可以是引用数据类型,如果不需要返回任何东西则是void
方法名:方法的实际名称
参数类型:参数是一个占位符,当方法被调用时,传递值给参数,这个值被称为实参,参数列表是指方法的参数类型、顺序、参数个数,参数是可选的,方法可以不包含任何参数
形式参数:在方法被调用时用于接收外界输入的数据,可以有0-n个,有多个形参用逗号隔开,形参的数据类型器决定性作用
实参:调用方法时时机传给方法的数据
方法体:方法包含具体语句,定义该方法的功能
return语句:方法的返回值类型不是void,必须要有return语句,如果是void那么return语句可有可无
定义:
修饰符 返回值类型 方法名(形式参数列表){ 方法体 //return作用是终止方法 return 返回值;//如果返回值类型不是void则必须要有return语句,否则可以不要 }
public class Demo2 { public static void main(String[] args) { } //无参的方法 public static void doSome(){ } //有参的方法 public static int doSome(int i){ return 1; } }
方法的重载
要想了解方法重载是怎么一回事就必须知道在java中是如何进行方法的区分
在java语言中如何进行方法区分:
首先编译器会通过方法名进行区分,但是java中允许方法名相同的情况出现
如果方法名相同,编译器会通过方法的参数列表进行方法的区分
方法重载优点使用时机:
代码美观
功能相似的,可以让方法重载,有利于代码的编写和阅读
方法重载规则:
1、方法名必须相同
2、参数列表必须不相同(参数个数不同、或参数类型不同、或参数排列顺序不同)
3、在同一个类中
必须满足以上三个条件才能进行方法重载
需要注意的是:方法重载与方法的返回值类型无关,与方法的修饰符无关
权限修饰符
本类 同包的其他类或子类 不同包的类 不同包的子类
public yes yes yes yes
无 yes yes no no
protected yes yes no yes
private yes no no no
可变参数
jdk1.5开始,java支持传递同类型的可变参数给一个方法
如何定义可变参数,在方法声明中,指定参数类型后加一个省略号(…)
一个方法只能指定一个可变参数,必须是方法的最后一个参数,任何普通的参数都必须在它之前声明
传进去的数据会存在一个数组中
public class Test extends Demo2{ public static void main(String[] args) { doSome(10,10,100,100,100); } public static void doSome(int i,int ...num){ for (int n:num) { System.out.println(n); } } }
方法递归
递归就是自己调用自己
利用递归可以用简单的程序来解决一些复杂的问题
递归的注意事项
递归一定要有结束的条件,否则会发生栈内存溢出错误StackOverflowError,即使递归有了结束
条件也不定能避免栈内存溢出错误的发生,递归太深,栈内存空间不足也会发生错误
public static void doSome(){ System.out.println(10); doSome(); }
方法的分类
实例方法:不带static的叫做实例方法,需要创建对象使用引用才能调用
静态方法:带static的叫做静态方法,使用类名调用
public class Test{ public static void main(String[] args) { A a = new A(); a.some(); A.doSome(); } } class A{ public static void doSome(){ System.out.println("静态方法"); } public void some(){ System.out.println("实例方法"); } }
代码块
静态代码块:static关键字定义,在类加载时执行,且在main方法执行之前执行,并且只执行一次,
静态代码块提供了一种时机:类加载时机
public class Test{ static { System.out.println("静态代码块执行了"); } public static void main(String[] args) { System.out.println("main方法执行了"); } }
实例代码块:在构造方法执行之前执行,一个时机:对象构建时机,构造方法执行几次,实例代码块就执行几次
class A{ { System.out.println("实例方法执行了"); } public A() { System.out.println("构造方法执行了"); } }

浙公网安备 33010602011771号