-----------------------------------------------------------------android培训、java培训、期待与您交流! ---------------------------------------------------------------
import static java.lang.Math.max
可通过在import后加入static导入静态的方法
可变参数的特点:
只能出现在参数列表的最后
…位于变量类型和变量名之间,前后有无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中要以数组的形式访问可变参数
语法:
for(type变量名 : 集合变量名) {…}
注意:
迭代变量必须在( )中定义
结合变量可以使数组或实现了Iterable接口的集合类
总结:
通过注意事项可以得出,使用增强for循环迭代结合元素方便了很多,但是它也有自身的局限性,比如它只能全部遍历整个元素等
该特性就是说当基本数据类型赋值到与其相对应的引用数据类型时,虚拟机会实现装箱功能,即将
享元模式flyweight:
如果很多很小的对象,他们有很多相同的东西,就可以把他们变成一个对象,把不同的东西作为外部属性,作为参数传入
为什么要枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现之一目标。
枚举类不通过class定义,通过关键字enum定义,创建了该类默认继承了抽象类Enum
枚举类中的常量其实底层是静态的final static
其中Enum抽象类定义的方法:
String name() :返回枚举常量的名称
int ordinal() :返回枚举常量的序数(从0开始)
静态方法
valueOf(Class<T> enumType, String name)
values() 返回枚举常量的数组
枚举类中定义构造方法
构造方法必须是私有的
枚举常量后可以{},其对应的构造方法。
构造方法要在枚举常量之后
如果枚举只有一个成员时,可以作为一种单例的实现方式。
要创建单例可以定义一个枚举类(需要深入理解)
概念:反射就是把java类中的各种成分映射成为相应的java类
反射的基础,Class类(对比人的统称为人类,那么java的统称就是Class类)
JDK中介绍:
Class类的实例表示正在运行的java程序中的类和接口,其中数组也被映射为Class的一个类,所以具有相同元素类型和维度的数组共享同一个Class对象。
也就是说引用数据类型【类、接口、数组】都有自己统称到Class类,基本数据类型【boolean
、byte
、char
、short
、int
、long
、float
和 double
】也统称到Class类,【void】也被统称到Class类。
Class没有public的构造方法,所以Class的对象是在JVM加载类时调用类加载器中的defineClass方法自动构造
如何获取类名?
对象.getClass().getName()
字节码.class.getName()
Class.forName(“类绝对路径”) 该方法加载字节码缓存起来,常用在反射中,因为在加载时并不知道类名,可以延后指定所确定的类
其中forName() 抛出ClassNotFoundException异常
总之:只要是在源程序中出现的类型,都有各自的Class实例对象
框架与工具的区别:工具类被用户类调用,而框架则是调用用户提供的类。
框架要解决的核心问题
因为在创建框架时并不知道具体的用户的类,所以无法使用new创建对象,需要 使用反射的方式。
用类加载器的方式管理资源和配置文件
如何获取配置文件位置?
因为不同的计算机都会有不同的位置,所以不能写成绝对路径也不能写成相对路径,可以使用类加载器来加载文件getClassLoader().getRosourceAsStream
配置文件要放在classpath下,因为类加载器通用加载位置在classpath下
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
总之,一个类被当做JavaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到Java类内部的成员变量。
一个符合JavaBean特点的类可以当做普通类一样进行使用,但把它当JavaBean用肯定带来一些额外的好处:
在java EE开发中,经常要使用到JavaBean。很多环境就要求JavaBean方式进行操作。
JDK中提供了对JavaBean进行操作的API,这套API就称为内省。
通过内省操作JavaBean
PropertyDescriptor
BeanInfo
可以使用第三方BeanUtils包来操作JavaBean(有用)
@interface注解类定义
@Rerention元注解,其中有三种取值
RetentionPolicy.SOURCE-----RetentionPolicy.CLASS-------- RetentionPolicy.RUNTIME对应
java源文件--------------------class文件-------------------------内存中的字节码
默认值是RetentionPolicy.CLASS
@TargetElementType
注解不用特别记忆,查文档即可
java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader
类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,BootStrap加载,所以,BootStrap不是java类,它嵌套在JVM中,由C++开发
java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类转载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类装载器为其父级类加载