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

二、遇到的问题

       引用传递部分中栈、堆没有弄懂。

三、明日计划

      继续学习第四章的内容

原文地址:https://www.cnblogs.com/wmdww/p/13301033.html