2020/3/12学习笔记-day17

java-day17

目录

上午

方法调用

1、非静态方法

2、静态方法

3、类中方法之间的调用

4、方法的递归调用

参数传递

下午

参数传递(案例)

this关键字

1、区分局部变量和成员变量

2、使用this可以调用类中的构造器

3、this关键字的意义


上午

方法调用

1、非静态方法

没有使用static关键字修饰的方法,调用这种方法一定要是有对象,非静态方法是属于对象的,非静态属性也是属于对象

public class Student{
    public void say(){
        
    }
}
main:
Student s = new Student();
s.say;

2、静态方法

用static关键字修饰的方法,调用静态方法可以使用类也可以使用对象,静态方法和静态属性都是属于类的,是这个类的所有对象共享的

public class Student{
    public void say(){
        
    }
}
main:
//调用方法1
Student s = new Student();
s.say;
​
//调用方法2(更加推荐)
Student.say();

3、类中方法之间的调用

假设一个类中有两个方法,a和b(非静态)

public void a(){
    b();
    //this.b();
}
​
public void b(){
    
}
​
//注意:交互调用,会导致死循环
public void a(){
    b();
}
​
public void b(){
    a();
}

假设一个类中有两个方法,a和b(静态),假设a,b都在Student中

public static void a(){
    b();
    //Student.b();
}
public static void b(){
    
}

假设一个类中有两个方法,a(静态)和b(非静态)

public static void a(){
    //编译失败
    //静态方法不能调用非静态方法,需要使用对象来调用
    b();
}
public void b(){
    
}

假设一个类中有两个方法,a(非静态)和b(静态)

public void a(){
    //编译通过
    //非静态方法能调用类中其他非静态方法
    b();
}
public static void b(){
    
}

4、方法的递归调用

一个方法在内部代码中自己调用自己

public void test(){
    //不可取,一定要有退出条件
    test();
}

使用递归完成1加到100

public int f(int x){
    if(x==1){
        return 1;
    }
    return x+f(x-1);
}

 

参数传递

形参是一个变量要接受形参的值

//形参
public void test(int a){
    //...
}
​
main:
    Test t = new Test();
    t.test(1);//实参

形参是一个变量,将来需要接收实参的值。本质上还是一个=号赋值操作,相当于把=号右边实参的值,赋给=号左边表示形参的变量,但是这个=号赋值的过程我们是看不见的。这个是JVM在运行的时候,调用方法的同时自动帮我们实现的。

当形参是一个引用类型变量的时候,那么将来的实参肯定是一个对象,然后把这个对象的内存地址值传给形参变量,这种情况称之为引用传递。

引用传递传的是内存地址值。

下午

参数传递(案例)

 

this关键字

1、区分局部变量和成员变量

public class Student{
    private String name;
    
    public void printName(String name){
        //就近原则,那个变量离代码近,这个name是局部变量name
        System.out.print(name);
        //变量前加this.表示属性name(属性/实例/成员变量)
        System.out.print(this.name);
    }
    public void setName(String name){
        this.name = name;
        //将局部变量name赋值给属性name
    }
    public void test(){
        this.setName("tom");
        //调用setName()方法,this.可以不写
    }
}
public class Person{
    public void say(){
        //Person
    }
}
public class Student extends Person{
    public void say(){
        //Student
    }
    
    public void test(){
        say();//就近原则等价于this.say()
        this.say();//Studnet
        super.say();//Person
    }
}
public class Person{
    public void say(){
        //Person
    }
}
public class Student extends Person{
       
    public void test(){
        say();//person
        this.say();//Person
    }
}

2、使用this可以调用类中的构造器

this();//调用无参构造器
this("tom");//调用有参构造器

注意,只能在类中的一个构造器里面,使用this的这种特殊语法来调用类中其他参数的构造器。普通的方法中,是不能够使用this来调用类中的构造器。

要求:

1、必须在构造器中使用this语法

2、必须是构造器中的第一句代码(只有this调用构造器的时候)

3、不能出现构造器自己的递归调用

 

3、this关键字的意义

在编写类中的过程,代码中使用了this,这个this表示当前类创建出的对象,并且使用对象调用了this所在的方法。

总结:this代表当前类对象

 

对象中方法的调用

1.我(类A)作为一个对象,去调用另一个对象(类B)的方法 2.别的对象(类B),调用我这个对象(类A)中的方法 3.我作为一个对象,自己调用自己的方法(this)

public class A{
    public void test(){
        B b = new B();
        b.run();
    }
    public void say(){}
}
​
main: A a = new A();
      a.test(); //A-调用->B
      this.say();//A-调用->A
      
public class B{
    public void run(){}
    public void test(){
        A a = new A();
        a.say();
    }
}
main: B b = new B();
      b.test();//B-调用->A

通过this比较两个对象的属性值

Student.java
public class Student{
    
    private int age;
​
    public Student(){}
​
    public Student(int age){
        this.age = age;
    }
    //s2当作参数传给test3
    //o表示传过来的s2
    //用this来表示s1对象
    public boolean test3(Student o){
        return this.age == o.age;
    }
}
​
StudentTest.java
main:
        Student s1 = new Student(30);
        Student s2 = new Student(30);
        //比较s1 s2的年龄
        boolean f = s1.test3(s2);
        System.out.println(f);     //true
​
main:
        Student s1 = new Student(30);
        Student s2 = new Student(20);
        //比较s1 s2的年龄
        boolean f = s1.test3(s2);
        System.out.println(f);     //false
​
发布了82 篇原创文章 · 获赞 52 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/104824124