/*
类是对一系列功能和相关数据的封装,而若要使用这些数据和类中的功能(类提供的功能)或者若要使用类中的成员,有两种方式,一种是通过
创建类的对象,通过对象访问类中的功能和数据。另一种是通过类名直接访问类中的静态方法和静态数据。只有这两种方式。
任何对类的成员的使用,都必须通过引用,无论是在内部还是在外部,只不过在内部时省略了this(非静态成员中的
)或者类名。
类对象的创建过程:
public static void main(String[] args)
{
Student s =new Student();
}
JVM(java虚拟机)在执行这一句时,做了如下几件事情。
1、先在栈内存中分配main方法的空间
2、局部变量s在栈内存的main方法的空间里创建,并即将进行初始化
3、new关键字使得JVM中的类加载器开始加载new后面的类Student,首先找到Student.class文件,然后将类Student加载到
内存里面。
4、类的所有静态成员变量开始在类的方法区中的静态成员区创建,所有类的静态成员方法连同方法体加载到静态成员区,
非静态的成员(方法、变量)代码也加载入类的方法区中的非静态成员区,所有静态代码块都被执行,用来完成对类
的初始化,按照自上而下的顺序创建、加载、执行。
5、加载完类后,开始类对象的创建,首先在堆内存中分配所需的内存空间,并获得首地址,然后读取方法区中的该类的非
静态成员部分,将所有非静态成员变量在堆内存中的该对象的空间内创建,并进行默认初始化,然后进行显示初始化
(若存在),然后执行构造代码块(若存在)对类对象进行统一初始化,按照自上而下的顺序创建、执行,
最后根据“new Student()”后面的括号,选择对应的构造函数进行对象的具体初始化(若找不到对应的构造函数,
则出错,对象创建过程失败)。
6、至此,堆内存中的对象创建并出示化完毕。将堆内存中的该对象的首地址返回给栈内存中的局部变量s
*/
a
class Student
{
private String name ="zhangsan";
private int age = 12;
private static String country = "china";
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(String age)
{
this.age = age;
}
public int getAge()
{
return age;
}
public static void show()
{
System.out.println("name ="+name+"--age ="+age);
}
public static void showCountry()
{
System.out.println("country ="+country);
}
}
class StudentDemo
{
public static void main(String[] args)
{
new Student();
}
}
|
|