局部变量与成员变量
区别:
- 定义的位置上的区别:
1、成员变量:定义在方法之外、类之内;
2、局部变量:定义在方法之内。 - 作用上的区别:
1、成员变量:是用于描述一类事物的公共属性的;
2、局部变量:是提供一个变量给方法内部使用而已。 - 生命周期的区别:
1、成员变量:随着对象的创建而存在,随着对象的消失而消失;
2、局部变量:在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一但出了自己的作用域那么马上从内存中消失。
例如:
class Person{
String name;
public void eat(){
for(int i = 0; i < 5; i++){
System.out.println(“i=”+i);//for后的大括号为i的作用局,此句执行完后i就消失
}
System.out.println(“i=”+i);//此句时i已经消失,故会报错
}
} - 初始值的区别:
1、成员变量是有 默认的初始值的(如下图);
2、局部变量是没有默认的初始值的,必须要先初始化才能使用。
匿名对象
1、匿名对象定义:没有引用类型变量指向的对象称作为匿名对象。
2、匿名对象的好处:简化书写、节省内存。
3、匿名对象要注意的事项:
- 1、我们一般不会给匿名对象赋予属性值,因为永远无法获取到;
- 2、两个匿名对象永远都不可能是同一个对象。
4、匿名对象的应用场景:
- 1、如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象;
- 2、可以作为实参调用一个函数。
5、练习:需求:使用java类描述一个学生类。
//学生类
class Student{
int num;//学号
String name;//姓名
public void study(){
System.out.println("好好学习!");
}
}
class Demo1{
public static void main(String[] args){
//创建一个学生对象
Student s = new Student();//这句不是匿名对象
//new Student();//这是匿名对象
new Student().name = "狗娃";//匿名对象,但一般不对匿名对象赋予属性值
System.out.println(new Student().name);//输出结果为null
}
}
class Demo2{
public static void main(String[] args){
//创建一个学生对象
System.out.println(new Student()==new Student());//"=="用于引用类型变量时,比较的是内存地址。判断两个对象是否为同一个对象。//输出结果是false
}
}
//应用场景一实例:
class Demo3{
public static void main(String[] args){
//调用Student的study方法
Student s = new Student();
s.study();
//如果调用对象只使用一次,后续代码就不再使用该对象了,此时建议使用匿名对象的方式来实现,如下:
new Student().study();
}
}
//应用场景二实例:
//需求:调用一次repair方法。接上篇修车的实例。
class Demo4{
public static void main(String[] args){
//CarFactory f = new CarFactory();
//Car c = new Car();
//f.repair(c);
//以上可优化为:
CarFactory f = new CarFactory();
f.repair(new Car());
}
}