回顾方法
- 方法的定义
- 修饰符:public公共 static静态
- 返回类型
- break: 跳出switch,结束循环 return:结束方法 返回一个结果
- 方法名: 注意规范就OK 见名知意
- 参数列表: (参数类型, 参数名) …
- 异常抛出: 疑问,后面讲解
案例:方法定义
//Demo01 就是一个类 因为那是用 class修饰的
public class Demo01 {
//类里面有一个核心的方法main方法 代码都是写在main方法里面 那么方法也一定是在类里面的
public static void main(String[] args) {
}
/*
如何定义一个方法
名修饰符public:公共的 返回值类型String:字符串 方法名:sayHello(...方法参数){
方法题
return 返回值;
}
*/
//return 结束方法 返回一个结果
public String sayHello() {
return "hello,world";//返回值后 方法结束 返回值必须要和返回类型相同才能返回
}
//修饰符public:公共的 返回值类型int:整数 方法名:max(形式参数)(参数类型,参数名)
public int max(int a, int b) {
return a>b ? a:b;//三元运算符
}
//完整的方法 readFile 读文件 throws 抛出 Exception 异常
public void readFile(String file) throws IOException{
}
}
案例:Student类 静态和非静态
public class Student {
//非静态方法
public void say(){
System.out.println("学生说话了");
}
//静态方法
public static void say1(){
System.out.println("学生吃东西了");
}
}
案例:当Demo02类调用 Student类
public class Demo02 {
public static void main(String[] args) {
//静态方法 类名.方法 直接调用
Student.say1();
//非静态方法 无法通过类名.方法调用 需要实例化这个类 new
//对象类型 对象名 = 对象值; /new Student().say();
Student student = new Student( );
student.say();
}
}
案例:同一类里静态类与普通类的互相调用
//当都为普通方法 没有加static不是静态的 可互相调用
public void a(){
b();
}
public void b(){
}
//当都为静态方法 都可互相调用
public static void aa(){
bb();
}
public static void bb(){
aa();
}
//aaa为静态方法 bbb为普通方法 aaa就不能调用bbb方法
//static 和类一起加载了 当Demo02 类存在的时候他就已经存在了 跟对象创建之后有关的
//可理解为 一个存在的调用一个不存再的 就会报错
public static void aaa(){
//bbb();
}
//类实例化 之后存在的
public void bbb(){
aaa();
}
案例:实际参数和形式参数
public class Demo03 {
public static void main(String[] args) {
//实际参数和形式参数的类型要对应!
//静态方法调用
int a=Demo03.add(10,2);//实际参数
System.out.println("静态方法调用:"+a);//12
//普通方法调用
Demo03 b=new Demo03();
int c=b.ddd(5,2);//实际参数
System.out.println("普通方法调用:"+c);//3
}
//静态方法 修饰符:public公共的 static静态 返回值类型:int 方法名:add(类型,形式参数)
public static int add(int a,int b){
return a+b;
}
//普通方法
public int ddd(int a,int b){
return a-b;
}
}
- 方法的调用:递归
- 静态方法
- 非静态方法
- 形参和实参
- 值传递和引用传递
- this关键字:当前类或对象
案例:值传递
//值传递
public class Demo05 {
public static void main(String[] args) {
int a = 1;
int b = 1;
System.out.println(a); //1
//调用change()方法
Demo05.change(a);
System.out.println(a); //1
}
//返回值为空 调用方法只是走一下这个方法 比没有创造或改变什么东西
//这里的a只是形式参数 把实际参数a=1 传递给a 但这里的a是形式参数 a=10 但由于返回值为空 并没有返回一个结果 只是走完了这个方法 有回到了main方法 所以a=1
public static void change(int a) {
a = 10;
}
}
案例:引用传递
public class Demo04 {
//引用传递:对象,本质还是值传递
public static void main(String[] args) {
Perosn perosn = new Perosn(); //调用Perosn() 先实例化
System.out.println(perosn.name); //null
Demo04.change(perosn);//调用change()方法
System.out.println(perosn.name); //恰北北
}
public static void change(Perosn perosn) {
//perosn是一个对象: 指向的---> Perosn perosn = new Perosn(); 这是一个具体的人,可以改变属性!
perosn.name = "恰北北";
}
}
//定义了一个Perosn类, 有一个属性: name
class Perosn {
String name; //没给赋值 默认为:null
}