1、子类父类的加载顺序:
父类静态块初始化---->子类静态块初始化---->父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。(先静后动,先父后子)
子类继承父类时,如果父类有自定义构造方法,子类必须显式调用父类构造方法 super。
2、 java 中所有的"="号赋值都是引用赋值。 方法参数为基本形如String 、int 等的时候为值传递。 方法参数为对象的时候为引用传递。
如: PassObj objA = new PassObj();
PassObj objB = objA;
当objA中的内容改变时, objB同时也改变。 指向同一内存区域。
3、 在 Windows 下安装 JRE (Java Runtime Environment) 的时候,安装文件会将 .jar 文件映射给 javaw.exe 打开。那么,对于一个可执行的 JAR 文件包,用户只需要双击它就可以运行程序。
4、PropertyUtils的使用, 以及反射的使用。
org.apache.commons.beanutils.PropertyUtils
java.beans.PropertyDescriptor
String[] nameList = new String[]{"title", "description", "time"};
PropertyDescriptor[] propertyDescriptors = PropertyUtils.getPropertyDescriptors( resource );
for ( final PropertyDescriptor descriptor : propertyDescriptors) {
if ( ArrayUtils.contains( nameList, descriptor.getName() ) ) {
final Method readMethod = descriptor.getReadMethod();
try {
if ( !ObjectUtils.equals( readMethod.invoke( resource), readMethod.invoke( otherResource ) ) ) {
return true;
}
} catch ( final ReflectiveOperationException e ) {
throw new IllegalStateException( e );
}
}
}
}
5、
String testStr=" ababaa aabbccc ";
String resultStr=testStr.replaceAll("^[ *| *]*","").replaceAll("[ *| *]*$","");
这样就可以了,可以去掉全角空格也可以去掉半角的空格。
要注意的是replaceAll的第一个参数使用的是正则表达式的语法
"^[ *| *]*"表示以全角空格或半角空格开头的所有组合。
"[ *| *]*$"表示以全角空格或半角空格结尾的所有组合
6、 切面此类继承org.springframework.aop.IntroductionInterceptor 以及反射方法参数类型的判断, 即判断参数是什么类型的 该参数是否为空
private static boolean check( final MethodInvocation min ) {
final Method[] methods = min.getThis().getClass().getDeclaredMethods(); //实际类的方法,不同于getMethods(); 仅有当前声明类的方法
for ( final Method method : methods ) {
if ( method.getName().equals( min.getMethod().getName() ) ) {//判断当前类的方法是否和所执行的方法一致
final Type[] types = method.getGenericParameterTypes(); // 获得该方法的所有参数,返回type类型, 该类型有几个实现类具体看api
int i = 0;
for ( final Type type : types ) {
if ( type instanceof Class ) { // 当type为Class时
if ( CoustomResource.class.isAssignableFrom( ( (Class<?>) type ) ) ) { // CoustomResource为自定义或者指定要传的参数类型,把type强转判断是否一致
if ( invocation.getArguments()[i] == null ) { // 判断这个参数是否为null
return true;
}
}
if ( CoustomResource[].class.isAssignableFrom( (Class<?>) type ) ) { // 判断是否是数组类型的
final CoustomResource[] CoustomResource= (CoustomResource[]) invocation.getArguments()[i];
for ( final CoustomResource coustomResource : CoustomResource) {
if ( coustomResource == null ) {
return true;
}
}
}
}
i++;
}
}
}
return false;
}
7、instanceof, isinstance,isAssignableFrom的区别
形象地:自身实例或子类实例 instanceof 自身类 返回true
例: String s=new String("javaisland");
System.out.println(s instanceof String); //true
Class类的isInstance(Object obj)方法,obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。这个方法是instanceof运算符的动态等价。
形象地:自身类.class.isInstance(自身实例或子类实例) 返回true
例:String s=new String("javaisland");
System.out.println(String.class.isInstance(s)); //true
Class类的isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
形象地:自身类.class.isAssignableFrom(自身类或子类.class) 返回true
例:System.out.println(ArrayList.class.isAssignableFrom(Object.class)); //false
System.out.println(Object.class.isAssignableFrom(ArrayList.class)); //true
8、
9、