2020.7.14
一、今日学习内容
JAVA中的方法
(1)方法的分类:
类方法:
1 public class StaticMethod { 2 static int i=5; 3 static void m() { 4 System.out.println("静态方法,只能访问静态变量,i="+i); 5 } 6 public static void main(String[] args) { 7 m(); 8 } 9 }
输出结果:
静态方法,只能访问静态变量,i=5
实例方法:
1 public class ClassMethod { 2 static int i=5; 3 int j=10; 4 void m() { 5 System.out.println("实例方法既可以调用静态变量,也可以调用非静态变量"); 6 System.out.println("i="+i); 7 System.out.println("j="+j); 8 } 9 public static void main(String[] args) { 10 ClassMethod cm=new ClassMethod(); 11 cm.m(); 12 } 13 }
输出结果:
实例方法既可以调用静态变量,也可以调用非静态变量
i=5
j=10
(2)构造方法:
无参:
1 public class ConstorDemo{ 2 public ConstorDemo(){} 3 public static void main(String[] args){} 4 }
有参:
1 public class ConstorDemo{ 2 public ConstorDemo(int x){} 3 public static void main(String[] args){} 4 }
创建一个对象:
1 public class ConstorDemo{ 2 public ConstorDemo(int x){ 3 x=20; 4 System.out.println("x="+x); 5 } 6 public static void main(String[] args){ 7 ConstorDemo demo=new ConstorDemo(2); 8 } 9 }
输出结果:x=20
(3)自定义方法:访问修饰符 返回类型 方法名(参数列表){}
修饰符:
方法名:JAVA官方建议方法名首字母小写,其余单词首字母大写,只要符合命题规范即可。
带static关键字的方法:通过类名调用,不需要创建类的实例。
带final修饰的关键字:表明该方法不能被重载,也不能被覆盖。(static和final可同时修饰方法,且顺序可调换)
(4)方法重载:在一个类中,方法名相同,方法的参数不相同。方法参数不同体现为两点:方法的参数类型相同,个数不同;方法的参数个数相同,类型不同。 (满足其一即可)
(5)方法的调用:
非静态方法:对象名.方法();
静态方法:类名.方法();
方法与方法之间的调用:
静态方法内部调用其他方法:如果在本类中,静态方法可以直接调用静态方法;如果在本类中是非静态方法,就必须通过对象来调用。
如果不在一个类中,静态方法调用其他类中的静态方法,必须通过 类名.静态方法()来调用。
如果在不同类中,静态方法调用其他类中的非静态方法,需要导入该类中的包,以及通过创建对象调用。
非静态方法内部调用:如果在本类中,非静态方法可直接调用静态方法;如果在本类中,非静态方法可直接调用非静态方法;
如果在不同类中,非静态方法调用其他类中的静态方法,需要导入该类中的包,以及通过类名来调用。
如果在不同类中,非静态方法调用其他类中的非静态方法,需要导入该类中的包,以及通过创建对象调用。
(6)方法参数及其传递问题:
传入的是基本类型:在方法内修改参数值时不影响原实参。
1 public class MethodDemo4 { 2 private static int x=10; 3 public static void main(String[] args) { 4 MethodDemo4 demo=new MethodDemo4(); 5 demo.getX(x); 6 System.out.println("x="+x); 7 } 8 public void getX(int x) { 9 x--; 10 } 11 }
输出结果:x=10
1 public class Demo1 { 2 3 public static void main(String[] args) { 4 P p=new P(); 5 p.name="张无忌"; 6 p.age=30; 7 8 P p2=p; 9 p2.name="伍正云"; 10 p2.age=20; 11 12 p.t(); 13 14 } 15 16 } 17 class P 18 { 19 String name; 20 int age; 21 public void t() { 22 System.out.println("姓名:"+name+",年龄:"+age); 23 } 24 }
输出结果:姓名:伍正云,年龄:20
从结果中可以看出,p的属性被p2修改了。
引用类型传递:
1 public class Demo2 { 2 public static void main(String[] args) { 3 Demo2 demo=new Demo2(); 4 P p=new P(); 5 p.age=20; 6 demo.getX(p); 7 System.out.println(p.age); 8 9 } 10 public void getX(P p) 11 { 12 p.age=45; 13 } 14 } 15 class P 16 { 17 String name; 18 int age; 19 public void t() { 20 System.out.println("姓名:"+name+",年龄"+age); 21 } 22 }
输出结果:45 age的值被修改了
(7)方法递归:条件:必须满足一个结束的条件;方法调用自身。
例:使用递归实现 n!的阶乘
1 public class JiChen { 2 public static void main(String[] args) { 3 JiChen j=new JiChen(); 4 long i=j.f(5); 5 System.out.println(i); 6 } 7 public long f(int n) 8 { 9 if(n==1) return 1; 10 return n*f(n-1); 11 } 12 }
输出结果:120
二、遇到的问题
引用传递部分中栈、堆没有弄懂。
三、明日计划
继续学习第四章的内容