java 语言Class类的作用,怎么使用

Python07

java 语言Class类的作用,怎么使用,第1张

java中创建对象时其实不是通过类直接创建的,如果你想要使用Test类,在java中JVM首先加载Test.java文件的字节码文件Test.class(也就是编译后的文件),当JVM(java虚拟机)加载字节码文件后,自动为该类创建自己的class对象,在通过class对象创建你以后要创建的对象\x0d\x0a例如:Test t1=new Test() Test t2=new Test() 我们都知道java中 == 是比较两个对象的内存地址,t1.getClass()==t2.getClass()返回是true,证明他们是一个class对象创建出来的。那么可Class对象的意义就是标志一个类了,Class类为我们提供了很多方法,比如反射技术常用到的Class.forName("包.类")这样可以获取一个类的Class对象。\x0d\x0a例如:Test类在org.abc这个包里,那么可以用Class.forName("org.abc.Test")这样就返回一个Test类的class对象,拿到这个对象接下来可以做很多事,调用这个类的方法,属性,构造方法等,具体你去研究下反射技术。如果有不懂在问我。\x0d\x0a针对一种数据类型的Class转换,比如String.class,int.class,类.class等\x0d\x0a你提出的问题Class参数,就是让你传一种Class对象进去。比如String.class,int.class,类.class等\x0d\x0aTest.class==t1.getClass()返回true,怕你有误解,说明一下类和对象都可以获取class对象的。并且这个对象是一个对象,因为一个类对应自己的class对象。

class定义类   public class Person{}

使用类,需要创建类的对象  Person p = new Person()

在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的)。

在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化:

对于  char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false);

对于引用类型的变量,会默认初始化为null。

如果没有显示地定义构造器,则编译器会自动创建一个无参构造器,但是要记住一点,如果显示地定义了构造器,编译器就不会自动添加构造器。

类分为两种:

1.抽象类

抽象类只能用来派生子类,不能创建抽象类的对象。如:

abstract class A

{

abstract void f()

}

//派生子类

class B extends A

{

void f()

{}

}

如果一个类包含抽象方法,那些个类必须定义成抽象类,但抽象类可以不包含抽象方法。

2.非抽象类

非抽象类可以派生子类,也可以创建非抽象类的对象。如:

class A

{

void f()

{}

}

//派生子类

class B extends A

{

void g()

{}

}

A a1=new A()

a1.f()

无论抽象类还是非抽象类都可以包含静态方法和静态属性。类的静态的方法和属性不需要创建对象,通过类名就可以使用,如:

//A是抽象类

abstract class A

{

void static f()

{}

static int n=100

}

//引用静态方法

A.f()

//引用静态属性n

int r=A.n

//B是非抽象类

class B

{

void static f()

{}

static int n=100

}

//引用静态方法

B.f()

//引用静态属性n

int r=B.n

而对象是类的实例化,类是对象的模板。可以用非抽象类来创建对象,然后使用类的实例方法和实例属性,如:

class A

{

void f()

{}

int n=1

}

//创建一个类A的对象

A a1= new A()

//使用实例方法和属性

a1.f()

int r=a1.n

此外,静态属性是属于类的,只有一个拷贝,被类的所有对象所共享。而实例属性是属于对象的,每个对象都有自己的一个实例属性的拷贝,彼此之间相互独立,互不影响。