Java第四章第4节:接口与内部类 Class类、Jar文件 实验+图解讲解

简介

👨‍💻个人主页:@云边牧风
👨‍🎓小编介绍:欢迎来到云边牧风破烂的小星球🌝
📋专栏:Java基础知识
🔑本章内容:Java接口与内部类
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~

接着第四章第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是否是接口
    }
}

结果为:

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有包名的类

     下列TestOneTestTwo类的包名为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.classTestTwo.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无包名的类

     如果TestOneTestTwo没有包名,只需要将TestOne.javaTestTwo.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.classTestTwo.class

三、总结

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

接口

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

内部类

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

匿名类
异常类

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

Class
Jar 文件

结束语:

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

下一节开始讲第五章常用实用类

喜欢的可以点赞+关注哈 ❤

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云边牧风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值