1.位置
成员变量:方法外类内
局部变量:方法内
2.适用范围、
成员变量:整个类
局部变量:整个方法
3.内存
成员变量:堆
局部变量:栈
4.生命周期
成员变量:随着类创建对象而出现,随着对象被回收而消失
局部变量:当方法被调用时出现,随着方法执行结束而消失
package cn.tedu.object;
public class ObjectDemo1 {
public static void main(String[] args) {
//创建person类对象p
//构造方法---构建对象
Person p=new Person("tom");
//给对象的属性进行赋值
//.代表"的“的意思
//p.name="等等";
p.gender='男';
p.age=23;
Person p1=new Person();//会默认无参构造
p1.name="莉莉";
p1.gender='女';
p1 .age=23;
//调用方法
p.eat();
//输出
System.out.println(p.name+","+p.gender+","+p.age);
System.out.println("===========");
System.out.printf(p1.name+","+p1.gender+","+p1.age);
}
}
//代表人的类
class Person {
//特征---属性
//不加static的属性就是非静态属性
//成员变量
String name;
char gender;
int age;
//当类中没有定义任何形式的构造方法时,jvm默认在底层会添加无参构造
//当类中定义了构造方法,底层就不会默认添加无参构造
//无参构造
//1.没有返回值类型 2.与类同名
public Person(){}
//普通方法--可以与类同名
//public void Person(){}
//有参构造-----对象属性初始化
//java支持构造方法重载(有参构造和无参构造)
public Person(String name){//方法有就近原则
//this代表当前类的对象
this.name=name;
}
//行为--方法---成员方法
//成员方法和成员变量都是类的描述信息(功能),但构造方法不是
public void eat(){
int age=1;//局部变量----当被调用结束,则消失
System.out.printf(name+"在吃饭");
}
public void sleep(){
System.out.printf(name+"在睡觉");
}
}
输出结果为:
tom在吃饭tom,男,23
===========
莉莉,女,23
在此代码中,虽然给对象的属性进行了赋值,但在调用的有参构造方法中,name被this关键字定义,且方法有就近原则,所以最后的name为被创建时的“name”。
在eat方法中,定义的age变量位于方法外类内,为局部变量,当eat方法被调用结束后,age消失。