用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

云代码会员    -  云代码空间

—— 机会垂青于有准备的人

java提升

2019-07-25|672阅||

摘要:接触到java基础提升(1)后;我接下来给大家介绍一点别的,一定让你们感兴趣:**枚举**与**反射**。枚举的英文是Enumeration,反射的英文是Reflect,在接触这些之前;我想跟你说清楚;像在平常开发中90%的程序员是用不到的枚举和反射的,为什么还要去学呢?对于大家


**\**枚举:**\**
在使用Eclipse中就有枚举的创建方式,在java中Enum就是创建一个枚举这么一个类;那么它是用来干什么的呢?先来谈谈final这个修饰符;翻译中文是最终的;在java中被它修饰的类叫做最终类;不能被继承。被它修饰的变量;只能被赋值一次;一旦赋值这个变量的一生就认定它了,你相信爱情吗?final相信!为什么我要说这么多呢,Enum就是来说明这个问题的。如图:
![在这里插入图片描述](https://img-blog.csdn.net/20181021145703987?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
上面是我说过常量吧;A,B,C,D    就是一个常量。只不过它不是一般数据类型的常量,它们相当于:
public static final Test_Enum A=new Test_Enum();
public static final Test_Enum B=new Test_Enum();
public static final Test_Enum C=new Test_Enum();
public static final Test_Enum D=new Test_Enum();
对,枚举的功能不仅仅把它们变成常量;还是静态的,静态的就是直接调用就行了吧,因为每个静态修饰的变量会一直存在内存区域吧。创建这么一个对象当然是拿来用的吧;接下来介绍使用,那么首先想到是不是一个类就该有自己的属性和方法吧,创建自己的成员;如图:
![在这里插入图片描述](https://img-blog.csdn.net/20181021153828639?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
有么有一个类统领多个类的感觉,你们看到我重载了构造方法;就应该有所了解了,你若A,B,C,D后面没给值;它会报错的,因为每个类的默认有一个无参的构造方法;一旦重载;默认的就不存了。那么接下来就是介绍怎么使用了;如图:
![在这里插入图片描述](https://img-blog.csdn.net/20181021154624666?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
说的更简单就是Test_Enum.D.grade();调用枚举的方法。那么接下来我跟大家说下如何在枚举中使用**抽象方法**。抽象方法一般是接口中的方法,那既然是无方法体的抽象方法;那就得去实现它;实现这个任务就交给了其他的常量对象;如图:
![在这里插入图片描述](https://img-blog.csdn.net/20181021155522771?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
对,在枚举中使用抽象方法其他对象必须需要实现,调用的话应该简单吧Test_Enum.D.name("lp")。

**\**反射:**\**
反射的内容就多了;在这里由我引导大家进入基本的了解。在讲之前我还是说说这个JUnit 4;目前Eclipse的都含有这个架包吧;对于开发程序员测试作用是非常好的;用起来超级爽;如果你还没有使用的话;在这里我告诉大家怎么使用:在一个你想测试的方法上一行写上@Test点击下划红波浪线就会出来:
![在这里插入图片描述](https://img-blog.csdn.net/20181021161204799?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
导入就好了;就可以一个一个方法测试。以上是给你们小知识点;回到话题:反射;什么叫反射呢?就是将一个类的成员通过反射这个技术得到该类的所有的成员。原理就这么简单;既然是反射;反射谁呢?那么创建一个类;该类有自己的成员;下面演示:
![在这里插入图片描述](https://img-blog.csdn.net/20181021164047365?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
以上是一个类多种形态;因为让你们了解各种不同的方法反射;如图:
![在这里插入图片描述](https://img-blog.csdn.net/20181021164308744?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTcwOTMzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
在这里我来解释下:
Class clazz=Class.forName("com.reflect.Reflect_Class");取得所要反射的类的描述;返回来的是一个Class对象;
Constructor c=clazz.getConstructor(null);//指定无参数的构造函数。getConstructor(Class ....class);该函数含有可变参数,所谓的可变参数就是接收一个或多个值;上面的图中有所演示。
Reflect_Class ref=(Reflect_Class) c.newInstance(null);//参数的值为空.这里我指定的是无参数的构造函数。所以这里值也是空的。这里就是new一个ref对象。
ref.name;就可以对该类进行成员调用。

**注意点:**

    下面我介绍下独特的main函数的反射:
    //反射函数:public static void main(String[] args)
    @Test
        public void test10() throws Exception {
            
            Class clazz=Class.forName("com.reflect.Reflect_Class");
            Method me=clazz.getMethod("main", String[].class);//第一个参数指定反射方法名,第二个参数指定形参类型。
            me.invoke(null, new Object[] {new String[] {"aaa","bbb","ccc"}});//第一个参数是指定类的对象,第二个参数是数值。
        }
        解释:getMethod(“”,“”)第一个参数指定反射方法名,第二个参数指定形参类型。
        invoke(“”,“”)第一个参数是指定类的对象,第二个参数是数值。
        特别注意点main函数参数的问题:String[] args是个数组吧;如果可以new String[]数组传过去;那我就不会在这里给你多逼逼了;
        你这样传的话;它会报错;报这个参数的个数错误;看上去是一个数组;但在传参的时候必须只能传一个参数过去;
        那怎么样将一个数组做一个参数形式传过去呢;方式:
        new Object[] {new String(){"aaa","bbb","ccc"}};
        对;将它封装成Object数组中;把它看成整体;解决问题。

总结:不懂那里或者我写的有误请在评论区写上;谢谢你的阅读;希望对你有所帮助。



顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: 云代码会员
    • 等级: 初级程序员
    • 积分: 14
    • 代码: 0 个
    • 文章: 2 篇
    • 随想: 0 条
    • 访问: 1 次
    • 关注

    人气文章

    人气代码

      最新提问

        站长推荐