黑马程序员_java高新技术

------- android培训java培训、java学习型技术博客、期待与您交流! ----------

java高新技术


1、静态导入:
如:import static java.lang.Math.*;
导入了Math类下的所有静态方法。
2、可变参数:
fun(int... arr){};
...只能出现在参数列表的最后
重载和覆写的区别:

3、增强for循环
for(type 变量名 :集合变量名){}

4、基本数据类型的自动装箱拆箱
装箱:Integer i = 3;
拆箱: System.out.println(i+12);
-128~127之间自动装箱时同一个对象
5、享元设计模式
flyweight
有很多小的对象拥有很多相同的属性,将这些相同的属性封装在同一个对象中,成为内部属性,不相同的称为外部属性。

6、枚举:
Enumeration
编译时找出你的值不合法
每一个枚举都是对象

public enum WeekDay{
}
name();
ordinal();//类似于角标
valueOf();
values();

带有构造方法的枚举
构造方法必须是私有的
默认是调用无参数构造函数
在枚举元素后面加上括号表示用到哪个构造方法。

带有抽象方法的枚举
枚举后面加上大括号表示覆写类中的抽象。
枚举只有一个成员,就可以作为一种单例的实现方式。

7、注解 (重要)1.5新特性
@SuppressWarnings("deprecation")//不警告过时方法
@Deprecated //表示方法过时了
@Override //表示提示方法是否覆盖父类方法
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,
以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,
看你有什么标记,就去干相应的事。标记可以加在包、类、字段、方法、方法参数以及局部变量上。

注解类
@interface A{}
@A
class B{}

反射调用
Annotation.class.isAnnotationPresent(ItcastAnnoction.class);
ItcastAnnotation ia = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
元注解
@Retention(RetentionPolicy.RUNTIME)//一直保留到运行期间
java源文件->class文件(默认)->内存中的字节码
@Target(ElementType.METHOD,ElementType.TYPE)//确定注解方法什么上面

为注解增加属性

public @interface A{
 String color() default "blue";
 String value();
 int[] arrayAttr() default{35};//高级属性
 //枚举类型
 //注解类型
}
如果数组属性只有一个元素,可以省略大括号

8、泛型应用:
Constructor<T>
泛型的内部原理
编译器编译时会去掉泛型编译
通过反射可以跳过泛型增加值。
泛型是给编译器看的
<>念typeof
Collection<String> c = new Vector();//警告
Collection c = new Vector<String>();//警告
参数化类型不考虑类型参数的继承关系。
Vector<String> v = new Vector<Object>();//错误,反过来也错误
在创建
数组实例时,数组的元素不能使用参数化的类型,
如:
Vector<Integer> vs[] = new Vector<Integer>[10];//错误

Vector v1 = new Vector<Integer>();//可以
Vector<Object> v2 =v1;//也可以。编译阶段允许这种语法

通配符 ?
使用?通配符可以引用其他各种参数化的类型,?通配符定义的
变量主要用作引用,可以调用与参数化无关的方法,不能调用
与参数化有关的方法。

定义泛型

private static <T> add(T a,T b)
{
 return
}
泛型只能是引用类型不能使基本类型

&来指定多个边界 <V extends Serializable & cloneable> void method(){}

异常使用泛型
private static<T extends Exception> sayHello() throws T
{
 try{
 }catch(Exception e){
  throw (T)e;
 }
}

通配符比普通泛型更有效。

定义泛型类型
public class A<T> {
 public void fun(T t){}
 public T fun2(int id){
  return null;
 }
}
静态方法不能使用泛型类型

通过反射获得泛型的实际类型参数
Vector<Date> v1 = new Vector<Date>();
Method am = GenericTest.class.getMethod("v1",Vector.class);
Type[] types = am.getGenericParameterTypes();
ParameterizedType pt = (ParameterizedType )types[0];
pt.getRawType();//获得原始类型
pt.getActualTypeArguments()[0];//实际参数类型

9、类加载器

主要的类加载器
BootStrap,ExtClassLoader,AppClassLoader

类加载器也是Java类,除了BootStrap
BootStrap(jre/lib/rt.jar)
 |--ExtClassLoader(jre/lib/ext/*.jar)
  |--AppClassLoader(CLASSPATH指定的所有jar或目录)
   |--MyClassLoader extends ClassLoader
Thread
setContextClassLoader();
ClassLoader.loadClass();//强制

自己写个类java.lang.String?

每个类加载器加载类时,又先委托给其上级类加载器。
当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不到,则抛
ClassNotFoundException,不是再去找发起者类加载器的儿子。

自定义加载器
继承LoaderClass类
覆盖findClass();
得到class文件的转化成字节码-->defindClass();   

编写对class文件进行加密的工具类
解密类加载器

------- android培训java培训、 java学习型技术博客、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值