一 、Class 类
1、Class类的由来
Java语言是面向对象的编程语言。在java中万事万物皆是对象,除了基本数据类型,和静态的方法和属性(因为它们是属于类的)没有面向对象的痕迹。
类是模板,它把对象的特征和行为抽象后进行封装。例如学生是对象,它有哪些特征(属性):姓名,年龄,班级。行为:学习等。因此就有了类
public class Student {
private String name;
private int age;
private String className;
getter and setter mothod;
public void study() {...}
}
刚说过在java中万事万物皆对象,那么类也不例外类也是对象。它也有自己的特征(属性):它有方法,构造器,属性。行为:构造对象,方法调用。我们现在需要一个类把它的行为和属性抽象后加以封装—Class类诞生了。
2、创建类的实例
(1)创建普通类的实例:通过new关键字。
Student stu = new Student();
(2) 创建Class类的实例:
方法一:隐含的静态成员变量class
Class c1 = Student.class;
方法二:该类对象的getClass方法
Class c2 = stu.getClass();
方法三:Class类的静态方法forName(String className)
Class c3 = Class.forName("Student") // 如果类在包中这里的className要写完全限定类名
其中,c1,c2,c3是同一个对象,即c1==c2==c3。很容易理解。一个类只需要一个描述他的Class对象。其中stu称为Student类的实例,c1,c2,c3称为Student类的类类型。
三、类的静态加载和动态加载
类的静态加载:在编译时期把需要的类的字节码加载进来。在java代码中的体现:
new Student();
类的动态加载:在运行时期把需要的类的字节码加载进来。在java代码中的体现:Class.forName(“完全限定类名”) (完全限定类名=包名+类名)
平时我们用IDE,有些编译错误的检查直接帮我们做了。为了更深刻的体会静态和动态加载。我们选用命令方式编译和运行。
位置:C:\Users\gzn\Desktop\TestLoader\
class TestStaticLoader
{
public static void main(String[] args)
{
List list = new ArrayList();
}
}
在虚拟机编译时,发现有new ArrayList();此时要进行静态加载。此时它会在我的import 中寻找有没有ArrayList这个类。没有,接着在此java源文件TestStaticLoader的同目录下看有没有ArrayList这个类,也没有报错。
正确做法:
import java.util.List
import java.util.ArrayList
class TestStaticLoader
{
public static void main(String[] args)
{
List list = new ArrayList();
}
}