static transient final foreach 的原理Switch,java反射机制
static 关键字:
1.修饰成员变量:在我们平时使用当中,使用最多的就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将static修饰的成员称为类成员或者是静态成员,加上static修饰的成员被jvm分配在静态储存区,未被static修饰的被分配在堆区
2.修饰成员方法:可以直接通过导入类包,使用类.方法名 就可以直接调用了,相当于定义了一个全局的函数(只要导入该类所在的包即可)。不过它也有使用的局限,一个static修饰的类中,不能使用非static修饰的成员变量和方法,这很好理解,因为static修饰的方法是属于类的,如果去直接使用对象的成员变量,它会不知所措(不知该使用哪一个对象的属性)。
3.静态块:一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用,比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.
4.静态导包:静态导包就是通过 import static 导入某个类的方法,直接通过方法名就可以调用了
transient关键字:
一个对象只要实现 Serilizable 接口,这个类的属性和方法就被自动序列化,当时有些情况某个属性或方法不需要序列化,就可以使用 transient 关键字修饰属性或者方法 这样这个属性或者方法就不会序列化
final 关键字:final关键字是我们经常使用的关键字之一,它的用法有很多,但是并不是每一种用法都值得我们去广泛使用。它的主要用法有四种
1.用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明 时或者构造方法中对它赋值;
2.用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
3.修饰方法,表示该方法无法被重写;
4.修饰类,表示该类无法被继承。
上面的四种方法中,第三种和第四种方法需要谨慎使用,因为在大多数情况下,如果是仅仅为了一点设计上的考虑,我们并不需要使用final来修饰方法和类
foreach循环的原理:
1、ArrayList之所以能使用foreach循环遍历,是因为ArrayList所有的List都是Collection的子接口,而Collection是Iterable的子接 口,ArrayList的父类AbstractList正确地实现了Iterable接口的iterator方法。之前我自己写的ArrayList用foreach循环直接报空 指针异常是因为我自己写的ArrayList并没有实现Iterable接口。
2、任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口,实际上,这 种做法就是23中设计模式中的迭代器模式。
3、对于数组,就是转化为对数组中的每一个元素的循环引用.
Switch
基本语法:
switch (表达式) {
case 常量表达式或枚举常量:
语句;
break;
case 常量表达式或枚举常量:
语句;
break;
......
default: 语句;
break;
}
底层的switc只能处理4个基本类型的值。其他三种类型需要通过其他方式间接处理,即转成基本类型来处理。
编译器对包装类的处理是通过 拆箱。
对枚举类型的处理,是通过枚举常量的序号及一个数组。
对字符串String的处理,是通过 String 的hash值。
java反射机制:
概念:在运行状态中,对于任意一个类,都能够知道这个类的属性和方法。对于任意一个对象,都能够调用它的任何方法和属性。这种动态获取信息以及动态调用对象的方法的功能称为JAVA的反射。
作用:在JAVA中,只有给定类的名字,就可以通过反射机制来获取类的所有信息,可以动态的创建对象和编译
原理:
1.将Java文件保存到本地硬盘
2.编译Java文件,生成.class文件
3.使用Java虚拟机(JVM)将字节码文件加载到内存
4.字节码文件在内存中使用Class类表示
5.使用反射的时候,首先获取到Class类,就可以得到class文件里的所有内容,包含属性、构造方法、普通方法
6.属性通过Filed类表示
7.构造方法通过Constructor表示
8.普通方法通过Method表示
参考文档:https://15810431930.iteye.com/blog/2408889