成员变量和局部变量的区别
1)书写位置不同
成员变量:类中方法外
局部变量:在方法定义中或者方法声明上
2)内存中的位置不同
成员变量:在堆内存中
局部变量:在栈内存中
3)生命周期不同
成员变量:随着对象的创建而存在,随着对象创建完毕,等待垃圾回收器回收对象(空闲时候进行回收)才能消失
局部变量:随着方法调用存在,随着方法调用结束而消失
4)初始化不同:
成员变量:在堆内存中由系统默认初始化(根据成员变量的类型进行默认初始化:String:null int:0)
局部变量: 无论是先定义还是直接初始化,必须在使用之前初始化,否则报错!
方法的形式参数如果是引用类型
//方法的形式参数:引用类型:数组,类,接口
//如果是一个具体类,在调用这个方法的时候,实际参数需要传递的是当前类的对象!
class Student{
public void study(){
System.out.println("学习JavaEE...") ;
}
}
class StudentDemo{
public void method(Student s){//形式参数是具体类
s.study() ; //形式参数名.方法名()---->需要通过对象名来访问
}
}
//测试类
class StudentTest{
public static void main(String[] args){
//需要调用StudentDemo类中的method方法
//创建StudentDemo类对象
StudentDemo sd = new StudentDemo() ;
//创建一个具体的学生对象
Student student = new Student() ;
sd.method(student) ;
}
}
使用匿名对象的改进
什么是匿名对象
匿名对象:就是没有名字的对象
匿名的格式
new 类名() ;
匿名对象特点
匿名对象可以作为参数传递,而且它开发中使用一次就可以,只在堆内存开辟空间,使用完毕,被回收掉!
使用匿名对象对形式参数为引用类型的改进
class Student{
public void study(){
System.out.println("学习JavaEE...") ;
}
}
class StudentDemo{
public void method(Student s){//形式参数是具体类
s.study() ; //形式参数名.方法名()---->需要通过对象名来访问
}
}
//测试类
class StudentTest{
public static void main(String[] args){
//需要调用StudentDemo类中的method方法
//创建StudentDemo类对象
/*
StudentDemo sd = new StudentDemo() ;
//创建一个具体的学生对象
Student student = new Student() ;
sd.method(student) ;
*/
new StudentDemo().method(new Student()) ;
}
}