简介

接着第四章第3节内部类的内容,这一节开始学习Class类、Jar文件👇:

一、Class类

1.1定义

关于Java的类在前面第2章第1节已经提到过,要是不够了解的可以戳回去看👉Java类

1.2Class类的特点

java.lang 包中的类,该类的实例用来封装对象运行时的状态。


Class 类本身不提供构造方法,因此, 不能使用 new 运算符和构造方法显式地创建一个 Class 对象 。当一个 类被加载且创建对象 时,和该类相关的一个类型为 Class 的对象就会 自动创建。


任何对象调用 getClass () 方法都可以获取和该对象相关的一个 Class 对象,这个 Class 对象可以获取 所属类的有关信息。



如:


String s = "Hello!";
Class c = s.getClass();

 针对对象c,可以有如下操作:

c.getDeclaredMethods()	//获取String类的方法列表
c.getFields()			//获取String类的成员列表
c.isInterface()		//判断String是否是接口
……

实际使用中👇:

public class Main {
    public static void main(String[] args) {
        String s = "Hello!";
        Class c = s.getClass();
        System.out.println(c.getDeclaredMethods());	//获取String类的方法列表
        System.out.println(c.getFields());			//获取String类的成员列表
        System.out.println(c.isInterface());		//判断String是否是接口
    }
}

结果为:

java接口接收文件并处理_java接口接收文件并处理

1.3使用Class实例化一个对象


除了使用 new 运算符和构造方法去创建一个对象,也可以使用 Class 对象得到一个类的实例



首先,通过 Class 类的 forName () 方法,能够根据类名(字符串类型)获取该类的 Class 对象:



public static Class forName ( String className ) throws ClassNotFoundException


然后,调用 Class 对象的 newInstance () 方法可以获取该类的一个实例:



public Object newInstance () throws InstantiationException,IllegalAccessException


例如:已经定义了“ Kitty” 类,那么可以通过 Class 类创建 Kitty 类的对象:


class Kitty extends Pet{
    public void speak(){
	System.out.println("喵喵~");
	}
}

Class c = Class.forName(“Main.Kitty");//获取Kitty类相关的Class对象
Pet a = (Pet) c.newInstance();//得到Pet类的实例“a”
//(Pet)-使用下转型
a.speak();

1.4使用Class实例化一个对象的注意要点:

“ newInstance ()” 方法返回 Object 类型,因此要 下转型

使用“ forName ()” 和“ newInstance ()” 方法时,要使用“ throws” 抛出异常

如:


Kitty getAKitty () throws ClassNotFoundException , InstantiationException ,  

IllegalAccessException    {
      Class c = Class.forName("Kitty");
      Kitty a = (Kitty)c.newInstance();
  return a;
}

1.5反编译和文档生成器

反编译器javap.exe可以将字节码反编译为源码,查看源码类中的方法名字和成员变量的名字 ,例如:

假设D:目录下有People.class文件,则:

D:\>javap People

文档生成器javadoc.exe可以制做源文件类结构的html格式文档

假设D:目录下有People.java文件,则:

D:\>javadoc –d d:\readme  People.java

二、Jar文件

2.1Jar文件定义

JAR文件是Java特有的一种文档格式

       可以使用jar.exe命令把一些类的字节码文件压缩成一个jar文件,然后将这个jar文件存放到Java运行环境的扩展中,即将该jar文件存放在JDK安装目录的jre\lib\ext文件夹中。这样,Java应用程序就可以使用这个jar文件中的类来创建对象了。

2.2有包名的类

     下列TestOne和TestTwo类的包名为moon.star。

TestOne.java👇:

package moon.star;
public class TestOne{
    public void fTestOne(){
        System.out.println(“I am a
             method In TestOne class”);
    }
}

TestTwo.java👇:

package moon.star;
public class TestTwo{
    public void fTestTwo(){
        System.out.println(“I am a 
             method In TestTwo class”);
    }
}

比如将这两个源文件保存到d:\1000\moon\star 目录中,然后分别编译这两个源文件。

       将生成的两个字节码文件TestOne.class和TestTwo.class压缩成一个jar文件:Jerry.jar。

       首先编写一个清单文件:hello.mf(manifestfiles)。

hello.mf

Manifest-Version:  1.0
Class:  moon.star.TestOne moon.star.TestTwo
Created-By:  1.6

将hello.mf保存到d:\1000 目录中。

       使用jar命令来生成一个jar文件:Jerry.jar。

d:\1000>jar cfm Jerry.jar hello.mf moon\star\TestOne.class

              moon\star\TestTwo.class

如果D:\1000\moon\star只有以上两个字节码文件,可以

d:\1000>jar cfm Jerry.jar hello.mf moon\star\*.class

将Jerry.jar复制到到Java运行环境的扩展中,即JDK安装目录的jre\lib\ext文件夹中。

    在其他类中就可以使用import语句引入Jerry.jar中的类。

import moon.star.*;
public class Use{
    	public static void main(String args[]){
         		TestOne a=new TestOne();
         		a.fTestOne();
         		TestTwo b=new TestTwo();
         		b.fTestTwo();
    	}
}

2.3无包名的类

     如果TestOne和TestTwo没有包名,只需要将TestOne.java和TestTwo.java保存到d:\1000中,编译得到字节码文件。将上述清单文件中类的包名去掉后保存到d:\1000文件夹中,使用jar命令

d:\1000>jar cfm Jerry.jar hello.mf TestOne.class TestTwo.class

d:\1000>jar cfm Jerry.jar hello.mf *.class

将Jerry.jar复制到到Java运行环境的扩展中,即JDK安装目录的jre\lib\ext文件夹中,应用程序就可以直接使用(无需import语句)Jerry.jar文件中的TestOne.class和TestTwo.class。

三、总结

第4章的内容就到这里了,一共有这些内容: 

接口

接口的成员默认的修饰关键字;接口回调

内部类

被外嵌类独有;不能定义类成员和类方法

匿名类

异常类

抛出异常;捕获异常;处理异常

Class 类

Jar 文件

结束语:

以上是Jav第四章的全部内容,希望大家喜欢