面向对象基础2(成员变量和方法)

this关键字

this可以出现在非static的方法、构造器中。作用如下:

  1. 代表了该方法的调用者——即“谁用了该方法,this代表谁”

例1

  1. public class Pig {
  2. String color;
  3. public void move() {
  4. System.out.println("running ");
  5. }
  6. public void test() {
  7. System.out.println("测试方法");
  8. this.move();
  9. System.out.println(this.color);
  10. }
  11. }

方法中并没有static关键字,所以是对象调用:对象.方法()

  1. public class PigTest {
  2. public static void main(String[] args) {
  3. Pig p1 = new Pig();
  4. p1.color="white";
  5. p1.test();
  6. Pig p2=new Pig();
  7. p2.color="black";
  8. p2.test();
  9. }
  10. }
  11. /*
  12. 测试方法
  13. running
  14. white
  15. 测试方法
  16. running
  17. black
  18. */

在另一个类PigTest中:

p1调用了test方法,则在Pig类中的this就代表p1

p2调用了test方法,则在Pig类中的this就代表p2

this具有动态性质,谨遵循 “谁调用了thisthis就代表谁”

例2

  1. public class Apple {
  2. String color;
  3. double weight;
  4. //构造器用于该对象的初始化
  5. public Apple(String color,double weight)
  6. //此时调用构造器需要设置参数
  7. //且只能用关键字new调用构造器
  8. {
  9. this.color=color;
  10. this.weight=weight;
  11. }
  12. }

由上例可见,this的另一个主要作用就是区分方法或是构造器中的局部变量,尤其是该局部变量和成员变量同名时

方法详解

方法的所属性:

  • 方法类似于函数,但与函数不同的是,方法不能独立存在,必须定义在类里面

  • 定义在类中的方法,从逻辑上看,
    如果该方法有static修饰,该方法属于类本身们应该用类调用;
    如果该方法无static修饰,该方法属于对象本身

  • 方法不能独立执行
    方法一定要有调用者

  • 如果调用同一个类中的方法,可以省略调用者,系统会添加默认的调用者。
    如果该方法是实例方法,将添加this作为实例调用者

    例3

  1. public class Item {
  2. public static int add(int a,int b)
  3. {
  4. return a+b;
  5. }
  6. public void info()
  7. {
  8. System.out.println("an info");
  9. }
  10. public void test(){
  11. this.info();
  12. info();
  13. //上两行作用完全一样
  14. //调用同一个类的非static方法,默认添加this为作用者
  15. System.out.println(add(22,44));//不建议
  16. System.out.println(Item.add(33,22));
  17. //上两行作用完全一样
  18. //调用同一个类的static方法,默认添加类为作用者
  19. }
  20. }

形参个数可变的方法

类型...形参名:形参个数可变的方法

本质上是数组,该写法等同于

类型[] 形参名

优势——调用方法时更加的方便,可以直接传入多个元素,系统将其自动封装为数组

缺点——只能作为形参列表的最后一个形参

  1. public class VarArgs {
  2. //个数可变的参数
  3. public void test(int a, String... name) {
  4. System.out.println("a为参数" + a);
  5. for (String s : name) {
  6. System.out.print(s);
  7. System.out.print(" ");
  8. }
  9. }
  10. public static void main(String[] args) {
  11. VarArgs va = new VarArgs();
  12. va.test(25, "gtn", "love", "jxq");
  13. }
  14. }
  15. /*
  16. gtn love jxq
  17. */