this关键字

作用:区分成员变量和局部变量同名的问题

方法中的局部变量和成员变量如果同名,在方法中打印该变量会遵循就近原则,不会去理会成员变量,如果在该变量前面加上this.的话,就会指向成员变量,this的作用就是哪个对象调用我就指向哪个对象。

面向对象的案例:判断两人是否为同龄人

l  描述人的类

package cn.itcast.this关键字;
/*
 * 定义人的类,描述年龄即可
 */
public class Person {
   //定义年龄
   private int age;
   //设置值,setXxx()方法
   public void setAge(int age){
      this.age = age;
   }
   //获取值,getXxx()方法
   public int getAge(){
      return age;
   }
   /*
    * 定义方法,对年龄进行比较并返回
    * 方法名compareAge()
    * 返回值:相同为true,不同为false,boolean
    * 参数列表:Person变量
    */
   public boolean compareAge(Person p){
      return this.age == p.age;
   }
}


l  测试类

package cn.itcast.this关键字;
/*
 * 测试类
 * 创建Person类的对象
 * 对象名.调用成员变量方法并赋值
 * 对象名.调用方法
 */
public class PersonTest {
   public static void main(String[] args) {
      //创建两个人的对象
      Person p1 = new Person();
      Person p2 = new Person();
      //通过setXxx方法对对象赋值
      p1.setAge(20);
      p2.setAge(20);
      //通过getXxx方法获取打印值
      System.out.println(p1.getAge());
      System.out.println(p2.getAge());
      //调用方法进行比较值
      System.out.println(p1.compareAge(p2));
   }
 
}


面向对象的案例:随机点名器

l  学生类

package cn.itcast.random随机点名器;
 
/*
 * 定义一个Student学生类
 * 描述出姓名和年龄,私有化
 * 对外提供访问方式
 */
public class Student {
   //定义学生姓名
   private String name;
   //定义学生年龄
   private int age;
   //setXxx和getXxx
   public void setName(String name){
      this.name = name;
   }
   public void setAge(int age){
      this.age = age;
   }
   public String getName(){
      return name;
   }
   public int getAge(){
      return age;
   }
}


l  测试类

package cn.itcast.random随机点名器;
 
import java.util.ArrayList;
import java.util.Random;
 
/*
 * 测试类
 * 分析:1、定义一个Student学生类,描述学生的姓名和年龄
 *    2、在主方法中需要定义一个集合去存储学生的信息,实现随机点名器的功能
 *    3、定义方法,将学生的姓名和年龄进行设置,并存储到集合中
 *    4、定义方法,遍历集合,并获取打印出集合中的信息
 *    5、定义方法,实现随机点名的效果
 */
public class StudentTest {
   public static void main(String[] args) {
      //定义一个ArrayList集合存储学生信息
      ArrayList<Student> array = new ArrayList<Student>();
      //调用addStudent方法,存储学生的信息
      addStudent(array);
      //调用遍历集合的方法
      printStudent(array);
      //调用随机点名的方法
      randomStudent(array);
   }
   /*
    * 定义方法,实现随机点名的效果
    * 返回值:void
    * 参数列表:集合
    */
   public static void randomStudent(ArrayList<Student> array){
      Random r = new Random();
      int index = r.nextInt(array.size());
      Student s = array.get(index);
      System.out.println(s.getName());
   }
   /*
    * 定义方法,遍历集合,并获取打印出集合中的信息
    * 返回值:void
    * 参数列表:集合
    */
   public static void printStudent(ArrayList<Student> array){
      //遍历集合
      for(int i = 0;i < array.size();i++){
         Student s = array.get(i);
         System.out.println("姓名:"+s.getName()+"\t"+"年龄:"+s.getAge());
      }
   }
   /*
    * 定义方法,将学生的姓名和年龄进行设置,并存储到集合中
    * 返回值:void 
    * 参数列表:集合
    */
   public static void addStudent(ArrayList<Student> array){
      //创建Student对象,对其设置年龄和姓名
      Student s = new Student();
      s.setAge(20);
      s.setName("张三");
      
      Student s1 = new Student();
      s1.setAge(21);
      s1.setName("李四");
      
      Student s2 = new Student();
      s2.setAge(23);
      s2.setName("王五");
      
      Student s3 = new Student();
      s3.setAge(22);
      s3.setName("胡椒");
      //将信息存储到集合中
      array.add(s);
      array.add(s1);
      array.add(s2);
      array.add(s3);
   }
}