JAVA基础
1.java运算
1.1基础数据类型所占的字节数
byte: 1byte = 8bit
short: 2byte = 16bit
int: 4byte
long: 8byte
float: 4byte
double: 8byte
boolean: 1byte
char: 2byte
1.2位运算
& 与运算:都是1为1,其余为0
“|” 或运算:有1为1
“^” 异或运算:相同为0,相异为1
“~” 取反运算: 相当于 2^n-按位取反前的值 按位取反得到的值和原来的那个值相加,为全部都是1的值
“<<” 按位左移 左移n位 ,数值变为原来的2^n,左移一位,相当于乘以2
“>>” 按位右移 右移n位,数值变为原来的1/2^n,右移一位,相当于除以2
1.3注解和反射
java反射:java.Reflection 概念:反射就是把Java的各种成分映射成相应的Java类。是java被视为动态语言的关键,反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
概述:由类加载子系统加载完类之后,在堆内存的方法区就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以形象的称之为反射
正常方式:引入需要的”包类“名称->通过new实例化->取得实例化对象
反射方式:实例化对象->getClass()方法->得到完整的"包类"名称
Class类的构造方法是private,由JVM创建
反射是java语言的一个特性,它允许在运行时(注意不是编译的时候)来进行自我检查并且对内部成员进行操作。例如它允许一个java类获取他所有的成员变量和方法并且显示出来。
JavaBean是反射的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过反射动态的载入并取得Java组件(类)的属性。
java反射机制提供的功能:
运行时:
1.判断任意一个对象所属的类
2.构造任意一个类的对象
3.判断任意一个类所具有的成员变量和方法
4.获取泛型信息
5.调用任意一个对象的成员变量和方法
6.处理注解
7.生成动态代理(AOP)等等功能
反射优点和缺点:
优点 :可以实现动态创建对象和编译,体现出很大的灵活性
缺点:对性能有影响。使用反射基本上是一种解释操作,可以告诉JVM,希望做什么满足要求。这类操作总是慢于直接执行相同的操作
反射相关主要API:
java.lang.Class 代表一个类
java.lang.reflect.Method 代表类的方法
java.lang.reflect.Field 代表类的属性
java.lang.reflect.Constructor 代表类的构造器
Class类
对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个结构(class/interface/enum/annotation/primitive
type/void/[])的有关信息。 Class 本身也是一个类 Class 对象只能由系统建立对象
一个加载的类在JVM中只会有一个Class实例 一个Class对象对应的是一个加载到JVM中的一个.class文件
每个类的实例都会记得自己是由哪个Class实例所生成 通过Class可以完整地得到一个类中的所有被加载的结构
Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Class对象
Class类常用方法:
static ClassforName(String name) 返回指定类名name的Class对象 Object
newInstance() 调用缺省构造函数,返回Class对象的一个实例 getName()
返回此Class对象所表示的实体(类,接口,数组类或void)的名称 Class getSuperClass()
返回当前Class对象的父类的Class对象 Class[] getinterfaces() 获取当前class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器 Constructor[] getConstructors()
返回一个包含某些Constructor对象的数组 Method getMethod(String name,Class… T)
返回一个Method对象,此对象的形参类型为paramType Field[] getDeclaredFields()
返回Field对象的一个数组
获取Class类的实例
a)若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高 Class clazz = Person.class
b)已知某个类的实例,调用该实例的getClass()方法获取Class对象 Class clazz =
person.getClass();
c)已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException
Class clazz = Class.forName(“类的全路径”); d)内置基本数据类型可以直接用类名.Type
e)还可以利用ClassLoader