this指的是什么?
this其实是指本类的对象,本类对象可以创建很多,具体代表的是哪个对象呢?哪个对象在调用this所在的函数,this就代表哪个对象
什么时候使用this?
定义类中的功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,只要是本类功能内部使用到了本类对象,都可用this表示
class Person2
{
private String name;
private int age;
Person2(String name,int age)
{
//此时这里要用this,因为局部变量name ,age与成员变量名称相同,如果此处 不用this代表着用的还局部变量的name
this.name=name;
this.age=age;
}
}
构造函数中的相互调用 this
this只能在构造函数的第一行,因为初始化要先执行
class Person2
{
private String name;
private int age;
Person2(String name,int age)
{
//此时会调用 用带有一个参数的构造参数
this(name);
this.age=age;
}
//无参数构造函数
Person2()
{
}
//有参构造函数
Person2(String name)
{
this.name=name;
}
static关键字
修饰符,只能用于修饰成员 (成员变量,成员函数)
如果被static修饰的话这个成员变量/成员函数就不在堆内存 中了,而在方法区中(共享区,数据区)
方法区中存储的是什么 :静态,类中的方法,
静态除了被对象调用外,还可以直接被类名调用
静态有特点:
1.随着类的加载而加载,静态会随着类的消失面消失,说明它的生命周期最长
2,被所有对象共享
3.优先于对象存在,静态是先存在的,对象是后存在的,
4.可以被对象调用
实例变量和类变量的区别:
1,存放的位置
类变量(静态)随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2.生命周期
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
静态使用的时候需要注意的地方
1,静态方法只能访问静态成员
2,非静态方法可以访问非静态成员 ,可以访问静态成员,因为静态优先于对象存在,所以能够访问
3.静态中不能定义this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this
静态的优点:
对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份,可以直接被类名调用
静态的缺点:
生命周期过长 ,访问出现了局限性,静态只能访问静态
什么时候会使用到静态?
当对象中有共享的数据时,是数据(值),而不是属性
当函数中没有出现对象的特有数据就可以将这个函数定义成static
简单的小示例
public class ObjectStatic
{
public static void main(String[] args)
{
//因为类成员方优先于对象存在所以此时可以用类名.方法调用
Student.classInfo();
Student s=new Student("zhangsan",20);
s.classInfo();
s.info();
}
}
class Student
{
//学生的姓名
private String name;
//学生的年龄
private int age;
//学生的班级,此时每个学生都属于同一个班级,可以将这个成员变量设置成static
private static String Class1="1023";
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public void info()
{//这里使用到了对象的特有数据函数不能声明为static
System.out.println("name:"+name+"age:"+age);
}
public static void classInfo()
{
System.out.println("class:"+Class1);
}
}
主函数 main
是一个特殊的函数,程序的入口,可以被虚拟调用
主函数的定义:
public :该函数的访问权限最大
static:主函数随着类的加载而加载已经存在
void:主函数没有具体返回值
main:是一个特殊的单词,可以被虚拟机识别,不是关键字