Java第二阶段---09类和对象---第二节 成员变量和成员方法
第二节 成员变量和成员方法
1.成员变量
解释说明
在类中定义的变量就是成员变量。成员变量顾名思义是属于成员(具体的对象、具体的事物)的,成员变量有初始值。
成员变量的初始值:
引用数据类型的初始值都是null,整数都是0,浮点数都是0.0,boolean类型是false,char类型是'\u0000'
访问成员变量的语法
对象名.属性名;
示例
public class PersonTest {
public static void main(String[] args) {
//这里p成为对象名,
Person p = new Person();//构建了一个具体的人,只是这个人目前没有姓名,年性别和年龄
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
p.name = "刘德华";
p.sex = "男";
p.age = 53;
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
Person p1 = new Person();
p1.name = "张学友";
p1.sex = "男";
p1.age = 52;
System.out.println(p1.name + "\t" + p1.sex + "\t" + p1.age);
Person p2 = new Person();
p2.name = "黎明";
p2.sex = "男";
p2.age = 45;
System.out.println(p2.name + "\t" + p2.sex + "\t" + p2.age);
}
}
2.成员方法
解释说明
在类中定义的方法就是成员方法。成员方法顾名思义是属于成员(具体的对象、具体的事物)的。
调用成员方法的语法
//[]中内容可有可无
对象名.方法名([参数列表]);
示例
public class PersonTest {
public static void main(String[] args) {
//这里p成为对象名,
Person p = new Person();//构建了一个具体的人,只是这个人目前没有姓名,年性别和年龄
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
p.name = "刘德华";
p.sex = "男";
p.age = 53;
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
p.eat();
p.sleep();
p.work();
Person p1 = new Person();
p1.name = "张学友";
p1.sex = "男";
p1.age = 52;
System.out.println(p1.name + "\t" + p1.sex + "\t" + p1.age);
p1.eat();
p1.sleep();
p1.work();
Person p2 = new Person();
p2.name = "黎明";
p2.sex = "男";
p2.age = 45;
System.out.println(p2.name + "\t" + p2.sex + "\t" + p2.age);
p2.eat();
p2.sleep();
p2.work();
}
}
3.成员变量和局部变量
解释说明
局部变量就是在方法内部定义的变量。局部变量没有初始值,因此,局部变量在使用之前必须完成初始化操作。当局部变量与全局变量同
名时,局部变量优先级更高(因为局部变量的作用范围更小,就在局部变量所定义的方法内,因此局部变量在方法内的优先级要高于成员变量)。
示例
public class Car {
//车特征
public String name;//车名 可以直接拿来用 说明它有初始值
public String address;//生产地
public int rol;//转速
//车行为
public void run(){
System.out.println("运行");
}
public void pY() {
System.out.println("漂移");
}
public void show(){//展示
String name1;//局部变量,没有初始值
System.out.println(name1 + name +'\t'+ address +'\t'+ rol);//name1报错
}
}
4.this关键字
思考:
在方法中,如果局部变量和成员变量同名,此时又想使用成员变量,怎么办呢?
此时需要使用this关键字来解决
this关键字表示的是当前对象(使用new创建出来的对象-->属性(特征)和方法(行为)都是属于对象的)。
示例
public class Car {
//车特征(属性)
public String name;//车名 可以直接拿来用 说明它有初始值
public String address;//生产地
public int rol;//转速
//车行为(方法)
public void run(){
System.out.println("运行");
}
public void pY() {
System.out.println("漂移");
}
public void show(){//展示
String name="奔驰";
System.out.println( this.name +'\t'+ address +'\t'+ rol);//相当于address省略了this (本来是this.address)
}
}
public class CarTest {
public static void main(String[] args) {
Car c =new Car(); //this => c
c.name = "奥迪";
c.address = "中国";
c.rol = 240;
c.show();
Car c1 =new Car(); //this => c1
c1.name="大众";
c1.address="中国";
c1.rol=300;
c1.show();
}
}
this还可以用来调用成员的方法
/**
* 人类
*/
public class Person {
//特征
public String name;//姓名
public String sex;//性别
public int age;//年龄
//人行为
public void eat(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在吃饭");
work();//相当于 this.work() 因为方法是属于对象的 要调用只能是对象来调(对象是谁 在PersonTest中是p 所以相当于PersonTest中p.work 所以相当于this.work();
}
public void sleep(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在睡觉");
work();//相当于 this.work() 因为方法是属于对象的 要调用只能是对象来调 所以相当于this.work();
}
public void work(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在工作");
}
}
Person源码
/**
* 人类
*/
public class Person {
//特征
public String name;//姓名
public String sex;//性别
public int age;//年龄
//人行为
public void eat(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在吃饭");
work();//相当于 this.work() 因为方法是属于对象的 要调用只能是对象来调(对象是谁 在PersonTest中是p 所以相当于PersonTest中p.work 所以相当于this.work();
}
public void sleep(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在睡觉");
work();//相当于 this.work() 因为方法是属于对象的 要调用只能是对象来调 所以相当于this.work();
}
public void work(){
System.out.println(age+"岁的"+sex +"性同志"+ name+"在工作");
}
}
PersonTest源码
public class PersonTest {
public static void main(String[] args) {
//这里p成为对象名,
Person p = new Person();//构建了一个具体的人,只是这个人目前没有姓名,年性别和年龄
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
p.name = "刘德华";
p.sex = "男";
p.age = 53;
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);
p.eat();
p.sleep();
p.work();
Person p1 = new Person();
p1.name = "张学友";
p1.sex = "男";
p1.age = 52;
System.out.println(p1.name + "\t" + p1.sex + "\t" + p1.age);
p1.eat();
p1.sleep();
p1.work();
Person p2 = new Person();
p2.name = "黎明";
p2.sex = "男";
p2.age = 45;
System.out.println(p2.name + "\t" + p2.sex + "\t" + p2.age);
p2.eat();
p2.sleep();
p2.work();
}
}
Car源码
public class Car {
//车特征(属性)
public String name;//车名 可以直接拿来用 说明它有初始值
public String address;//生产地
public int rol;//转速
//车行为(方法)
public void run(){
System.out.println("运行");
}
public void pY() {
System.out.println("漂移");
}
public void show(){//展示
String name="奔驰";
System.out.println( this.name +'\t'+ address +'\t'+ rol);//相当于address省略了this (本来是this.address)
}
}
CarTest源码
public class CarTest {
public static void main(String[] args) {
Car c =new Car(); //this => c
c.name = "奥迪";
c.address = "中国";
c.rol = 240;
c.show();
Car c1 =new Car(); //this => c1
c1.name="大众";
c1.address="中国";
c1.rol=300;
c1.show();
}
}