Java : java基础(6) 反射与枚举
类需要经过 加载, 连接, 初始化三个步骤来进行初始化. 加载是把class文件读入内存创建一个class对象, 连接分为三步,第一步是验证是否是正确的结构, 第二步是准备, 为类的静态成员分配内存,初始化默认值, 第三步是解析, 将类的二进制数据中的符号替换为直接引用.初始化是静态代码块,构造代码块等的执行等.
类加载器有三种, Bootstrap引导类加载器, 负责java核心类的加载,如 System String等(在rt.jar文件中). Extention扩展类加载器, 负责jre扩展目录中的jar包的加载, 在jre的lib目录下的ext目录. System系统类(也叫应用类)加载器,负责来自java命令的class文件及环境变量中的jar包和类路径
类的反射在字节码文件阶段(X.class文件)的获取方式为 class.forName("类名"), 在加载到jvm之后字节码阶段(X.class)获取的方式为 X.class, 在创建对象之后获取的方式为 x.getClass()
反射得到的类获取一个新实例为 clazz.newInstance() 不可以传入参数, 有参构造可以通过Constructor c = clazz.getConstructor(String.class, int.class) 获取构造函数,然后用c.newInstance("xxx", 1)来创建对象. 通过Field f = clazz.getField()获取单个成员变量,通过getFields()获取所有成员变量,私有的属性可以通过调用getDeclaedField()获取私有属性,然后用f.setAccessible(true)去除私有权限,就可以用f.set(对象, 修改值) 来修改某个对象的f属性的值
获取方法可以用 clazz.getMethod("xxx", int.class) 基本和获取属性差不多,后面是需要传参的参数的类型, 可以用Method.invoke(对象, 参数) 调用对象的method方法.
枚举是把所有有限的变量都列出来, 如一年有12个月, 一周有七天等, 单例类是只有一个实例, 多例类就是有有限个数的多个实例,如枚举类.
最简单的枚举类: (枚举项必须放在枚举类的第一行, 枚举类的构造函数必须而且是默认私有的, 枚举类可以在switch里面使用)
public enum Week {
MON, TUE, WED;
}
使用构造方法的方式: (可以用getName获取名字,可以给枚举类的实例加一些字段,方法等,对枚举类进行扩展)
public enum Week {
MON("周一"), TUE("周二"), WED("周三"); private String name; private Week(String name) {
this.name = name;
} public String getName() {
return name;
}
}
Java : java基础(6) 反射与枚举的更多相关文章
- JAVA安全基础之反射
JAVA安全基础之反射 在JAVA安全中,反射是一个经常使用的技术,所以熟悉使用反射是非常必要的.下面就简单的讲下JAVA的反射的用法 什么是反射 每个类都有对应的Class类对象,该Class类对象 ...
- Java语法基础学习DayThirteen(枚举类和注解)
一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...
- 【读书笔记】Java核心技术-基础知识-反射
在网页中运行Java程序称为applet. 反射 这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构. 能够分析类能力的程序称为反射(reflective).反射机制的功能及其强大 ...
- JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]
类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...
- 黑马程序员:Java基础总结----反射
黑马程序员:Java基础总结 反射 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...
- Java基础之一反射
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...
- Java基础之—反射
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...
- 【Java基础】反射和注解
前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...
随机推荐
- [uva] 10067 - Playing with Wheels
10067 - Playing with Wheels 题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Ite ...
- mac apache服务器
//开启apache: sudo apachectl start //重启apache: sudo apachectl restart //关闭apache: sudo apachectl stop ...
- js前台检测上传图片大小的总结
最近一直在做上传图片的前端检测,不通过后台就完成这个动作.但实际是,实际效果差强人意. html5的fileApi出来后,对文件的处理才变得方便了些,对它的简单介绍可以看我的前面的博客.现在支持的浏览 ...
- $.on()方法和addEventListener改变this指向
jQuery $.on()方法和addEventListener改变this指向 标签(空格分隔): jQuery JavaScript jQuery $.on() jq的绑定事件使用$([selec ...
- C#中的"?"和"??"
摘自:http://www.cnblogs.com/zxjyuan/archive/2009/10/27/1590795.html 如果你看到C#中的“?”问号脑袋里便充满问号,那么这个贴子便是为你而 ...
- 使用matlab对图像进行傅里叶变换
原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshift(F); F=abs(F); T= ...
- html style标签
<div id="d1">或者<div class="d1">在css下定义id的函数前缀是#,定义class前缀是.css代码就可以这 ...
- Failed to read candidate component错误
<context:component-scan base-package="com.spdb"/> <mvc:annotation-driven/> 加上该 ...
- 代码阅读:AFNetworking背后的思想
1.一切皆文件:流与操作封装. 2.通信会话:
- 【[USACO15JAN]草鉴定Grass Cownoisseur】
这大概是我写过的除了树剖以外最长的代码了吧 首先看到有向图和重复经过等敏感词应该能想到先tarjan后缩点了吧 首先有一个naive的想法,既然我们要求只能走一次返回原点,那我们就正着反着建两遍图,分 ...