成员变量
- 定义:
- 成员变量存在于堆内存中,和类一起创建,成员变量有两种类型:实例变量或非静态变量(不以static修饰)、类变量或静态变量(以static修饰)。
- 类作为成员变量时,只需创建好这个类的对象,赋值就可以了
- 接口作为成员变量时,只需在主方法中创建好符合该接口的对象,可以通过实现类创建对象,可以通过匿名内部类的方式创建对象,也可以创建匿名对象。
- 实例:
//Weapon类
public class Weapon {
private String name ;//武器的名称
public Weapon(String name) {
this.name = name;
}
}
//Hero类
public class Hero {
private String name;//英雄名称
private Weapon weapon;//英雄用的武器
public Hero(String name, Weapon weapon) {
this.name = name;
this.weapon = weapon;
}
public void attack(){//英雄的功能
System.out.println(name+"正在用"+weapon.getName()+"打怪");
}
}
//类作为成员变量
public class Demo01 {
public static void main(String[] args) {
/*类作为成员变量*/
Weapon weapon = new Weapon("无尽之刃");//创建一个武器类的对象
Hero hero = new Hero("周杰伦",weapon);//把武器类对象作为参数传给hero类的对象
hero.attack();
//Weapon类
public class Weapon {
private String name ;//武器的名称
public Weapon(String name) {
this.name = name;
}
}
//Hero类
public class Hero {
private String name;//英雄名称
private Weapon weapon;//英雄用的武器
public Hero(String name, Weapon weapon) {
this.name = name;
this.weapon = weapon;
}
public void setSkill(Skill skill) {
this.skill = skill;
}
}
//Skill接口
public interface Skill {
public abstract void use();
}
//Skill实现类
public class SkillImpl implements Skill {
@Override
public void use() {
System.out.println("爱的魔力转圈圈!~~~~~");
}
}
public class Demo01 {
public static void main(String[] args) {
Weapon weapon = new Weapon("无尽之刃");//创建一个武器类的对象
Hero hero = new Hero("周杰伦",weapon);//把武器类对象作为参数传给hero类的对象
/*第一种,创建实现类使用*/
Skill skill = new SkillImpl();//创建多态对象Skill,
hero.setSkill(skill);
/*第二种,使用匿名内部类实现接口*/
Skill skill1 = new Skill() {
@Override
public void use() {
System.out.println("爱的魔力转两圈!~~");
}
};
hero.setSkill(skill1);
/*第三种,使用匿名对象匿名内部类实现接口*/
hero.setSkill(new Skill(){
@Override
public void use() {
System.out.println("爱的魔力转三圈!~~");
}
});
局部变量
定义:形参、方法内定义的变量、代码块中定义的变量
成员变量和局部变量的区别
- 定义的位置不同
成员变量:在类方法外
局部变量:在方法中 - 在内存中的位置不同
成员变量:堆内存中
局部变量:栈内存中 - 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,方法调用完毕后消失 - 初始值不同
成员变量:有默认的初始化值
局部变量:没有默认的初始变化值,需定义赋值后才能使用。