方法回顾及加深

方法回顾及加深

方法一定是定义在类中的,属于类的成员。

方法的定义

格式: 修饰符 返回类型 方法名(参数列表)异常抛出类型{...}
修饰符
public、static、abstract、final等等都是修饰符,一个方法可以有多个修饰符。例如程序入口 main方法,就使用了public static这个俩个修饰符 
注:如果一个方法或者属性有多个修饰符,这多个修饰符是没有先后顺序的
返回类型
方法执行完如果有要返回的数据,那么就要声明返回数据的类型,如果没有返回的数据,那么返回类型就必 须写void. 
只有构造方法(构造器)不写任何返回类型也不写void 

【示例】

public String sayHello(){ 
    return "hello";
}
public int max(int a,int b){ 
    return a>b?a:b; 
}
public void print(String msg){ 
    System.out.println(msg); 
}

思考:声明返回类型的方法中一定要出现return语句,那么没有返回类型(void)的方法中,能不能出现return语句?

注意:break和return的区别

return 语句的作用 
(1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 
(2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一 致。
(3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回 调用函数处。

break语句的作用 
(1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否 成立,直接转向循环语句下面的语句。 (2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体
方法名
遵守java中标示符的命名规则即可.
参数列表
根据需求定义,方法可以是无参的,也可以有一个参数,也可以有多个参数
异常抛出类型
如果方法中的代码在执行过程中,可能会出现一些异常情况,那么就可以在方法上把这些异常声明并抛出, 也可以同时声明抛出多个异常,使用逗号隔开即可

方法调用

在类中定义了方法,这个方法中的代码并不会执行,当这个方法被调用的时候,方法中的代码才会被一行一行顺序执行。

非静态方法
没有使用static修饰符修饰的方法,就是非静态方法. 
调用这种方法的时候,是"一定"要使用对象的。因为非静态方法是属于对象的。(非静态属性也是一样的)

【例子】

public class Student{ 
    public void say(){} 
}

main: 
Student s = new Student(); 
s.say();
静态方法
使用static修饰符修饰的方法,就是静态方法. 
调用这种方法的时候,"可以"使用对象调用,也"可以"使用类来调用,但是推荐使用类进行调用,因为静态 方法是属于类的。(静态属性也是一样的)

【例子】

public class Student{ 
    public static void say(){} 
}

main: 
Student.say();
类中方法之间的调用

假设同一个类中有俩个方法,a方法和b方法,a和b都是非静态方法,相互之间可以直接调用

public void a(){ 
    b(); 
}
public void b(){ 

} 

a和b都是静态方法,相互之间可以直接调用.

public static void a(){ 
    b(); 
}
public static void b(){ 

}

a静态方法,b是非静态方法,a方法中不能直接调用b方法,但是b方法中可以直接调用a方法. 静态方法不能调用非静态方法!

public static void a(){ 
    //b();报错 
}
public void b(){ 
    a(); 
}

另外:在同一个类中,静态方法内不能直接访问到类中的非静态属性

总结:类中方法中的调用,两个方法都是静态或者非静态都可以互相调用,当一个方法是静态,一个方法是非静态的时候,非静态方法可以调用静态方法,反之不能。

调用方法时的传参

形参和实参

【例子】

// a = x; 
public void test(int a){ 
    //.. 
}
main: 
int x = 1; 
t.test(x);

参数列表中的a是方法test的形参(形式上的参数)

调用方法时的x是方法test的实参(实际上的参数)

值传递和引用传递

调用方法进行传参时,分为值传递和引用传递两种。

如果参数的类型是基本数据类型,那么就是值传递。

如果参数的类型是引用数据类型,那么就是引用传递。

【示例:值传递】

//值传递
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);//1

        Demo04.change(a);

        System.out.println(a);//1
    }
    //返回值为空
    public static void change(int a){
        a = 10;
    }
}

【示例:引用传递】

//对象和内存
public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person();

        System.out.println(person.name);//null

        Demo05.change(person);

        System.out.println(person.name);//老八
    }
    public static void change(Person person){
        //person是一个对象:指向的是 Person person = new Person();这是一个具体的人,可以改变属性!
        person.name = "老八";
    }
}
//定义一个Person类,有一个属性:name
class Person{
    String name; //null
}

this关键字

在类中,可以使用this关键字表示一些特殊的作用。

this在类中的作用

【区别成员变量和局部变量】

public class Student{ 
    private String name; 
    public void setName(String name){ 
        //this.name表示类中的属性name 
        this.name = name; 
    } 
}

【调用类中的其他方法】

public class Student{ 
    private String name; 
    public void setName(String name){ 
        this.name = name; 
    }
    public void print(){ 
        //表示调用当前类中的setName方法 
        this.setName("tom"); 
    } 
}

注:默认情况下,setName(“tom”)和this.setName(“tom”)的效果是一样的.

【调用类中的其他构造器】

public class Student{ 
    private String name; 
    public Student(){ 
        //调用一个参数的构造器,并且参数的类型是String 
        this("tom"); 
    }
    public Student(String name){ 
        this.name = name; 
    } 
}

注:this的这种用法,只能在构造器中使用.普通的方法是不能用的.并且这局调用的代码只能出现在构造器中的第一句.

public class Student{ 
    private String name;
    //编译报错,因为this("tom")不是构造器中的第一句代码. 
    public Student(){ 
        System.out.println("hello"); 
        this("tom"); 
    }
    public Student(String name){ 
        this.name = name; 
    } 
}
this关键字在类中的意义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值