黑马程序员——静态导入、加强for循环、享元模式、枚举、反射

                                    ------- android培训java培训、期待与您交流! ----------

静态导入----------------
import static java.lang.Math.*;
Math.max(3,4)//------>max(3,4);静态导入 如果有静态方法直接导入静态类。


可变参数-----------------"..."只能出现在参数列表最后。和前面的int 有无空格都可以,实际在运行中是一个数组。

public static int add(int x,int ...args){
int sum = 0;
for(int i=0;i<args.length,i++){
sum+=args[i];
}
}


加强for循环---------------
for(String str : args){
System.out.println(str);
}
args可以是数组和实现了Iterable接口的集合类,不能是HashMap




基本数据类型的装箱和拆箱----------享元模式
Integer i = 3; 自动把一个int 装箱成Integer.

Integer i=3;
Integer j=3;     当在-127~128之间就会有常量池,为了节约内存,享元模式。
i==j---------------true
Integer i=129;
Integer j=129;
i==j---------------false



枚举~~~~~~~~~~~~~作用,让某个类型的变量取值只能为若干个固定值中的一个,那么就定义一个
枚举类,里面就封装了若干个固定值,让在编译的时候就强制类型。 
静态常量是枚举模式的应用
它有很多缺点:类型不安全(静态常量可以随意增加使用或操作),无命名空间,脆弱(某常量值改变后客户端如果不编译仍能使用,但表现却是未定义的),静态常量打印值为数字,也不具提示性等等
脆弱性的理解在这里比如是静态常量,修改了,插入或者增加,客户端必须得重新编译来适应新的变化,而枚举的话则不必,比如它可以通过遍历来囊括所有新的变化,客户端代码可以不用改变,这就是用静态常量脆弱性的体现。
遍历枚举 先转换成数组

public enum Color {
		RED,GREEN(1),BLUE;
		private Color(){System.out.println("----------------------------------");}
		private Color(int i){System.out.println("********************8");}
	}



构造方法必须位于元素列表之后。
必须是私有的。或者默认的
带有抽象方法的枚举。
枚举类中的对象其实就是一个本类的子类对象,他要实现父类的抽象方法。

一个元素的枚举就是单例


反射---------------------------------------
JAVA中各个类都属于同一事物,Class。


得到Class对象的两种方式,
1、如果虚拟机已经有字节码文件,可以用 对象.getClass();
2、如果虚拟机没有字节码文件,直接用反射forName加载。 Class.forName("java.util.Date");
3、直接类名.class   System.class


9个预定义Class对象
byte short int lang boolan char float double void
void.class;
可以通过class中的方法判断是否是数组类型,是否是基本类型。

Constructor类型 获取构造方法
Constructort[] construtcrots = String.class.getConstructors();


由class---->constrctor---->new Object
Constrctor c = Stirng.class.getConstrctor(StringBuffer.class);
String s = (String)c.newInstence(StringBuffer("abc"));
s.charAt(2);


私有构造方法的反射
Constructor ms = Class.forName("StringDemo.Student").getDeclaredConstructor();这里用getDeclaredConstructor获取private的构造方法
ms.setAccessible(true);暴力反射
Student s = (Student) ms.newInstance(null);因为上面设置了暴力反射true,这里才能够直接反射一个具体的对象。








转载于:https://my.oschina.net/u/158350/blog/106794

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值