黑马程序员_java基础加强(一)

静态导入:

import static语句导入一个类中的某个静态方法或所有静态方法

如:import static java.lang.Math.*; 其导入math类中的静态方法


可变参数:

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,7,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}
add方法中的参数 int...args就是可变参数,可加入多个int类型的参数。

其特点是:只能出现在参数列表的最后;位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。


增强for循环:

    for ( type 变量名:集合变量名 )  { … }
    增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的。 其优点是使代码变得简洁,让程序员使用是更加方便,但其也有局限性,对于数组,不能方便的访问下标值; 对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator),所以除了简单遍历并读取其中的内容外,不建议使用增强的for循环。


基本数据类型的自动拆箱与装箱:

    自动装箱:
Integer num1 = 12;    本来12是int类型的数据,但由于num1是Integer的对象,所以12自动装箱为integer对象
自动拆箱:
System.out.println(num1 + 12); num1本来是Integer对象,但由于其与int类型数据12相加,所以其自动拆箱为int类型的数据
基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;        这块相等,<=127都是真的
System.out.println(num1 == num2);

Integer num3 = 129;                这块不相等,因为129超出了int类型的范围,不能自动拆箱,所以它是对象,false
Integer num4 = 129;
System.out.println(num3 == num4);

Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12)  ;   这块的道理同上
System.out.println(num5 == num6);


枚举:

当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface.

如:  enum Person{

             CHINESE,    //中国人

             AMERICAN,   //美国人

             ENGLISH;    //英国人

       }

这是定义枚举常量,每个常量都代表了各自的意思。


反射:

       class类是反射的基石,反射就是把Java类中的各种成分映射成相应的java类。

       Constructor类代表某个类中的一个构造方法:Constructor [] constructors= Class.forName("java.lang.String").getConstructors();
       通过class.forName将类加载进来,通过getConstructors()获取该类所有的构造方法,

       String obj = (String)Class.forName("java.lang.String").newInstance();中的newInstaance是获取该类中默认的构造方法

       Field类代表某个类中的一个成员变量
       例子:

               ReflectPoint point = new ReflectPoint(1,7);
               Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getField("y");
               System.out.println(y.get(point));
               Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x");
               x.setAccessible(true);
               System.out.println(x.get(point));


Method类代表某个类中的一个成员方法
得到类中的某一个方法:
例子:         Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式: System.out.println(charAt.invoke(str, 1));

getMethod中的charAt是类中的方法名,int.class是该方法的参数型,charat.invoke()中的str是要调用该方法的对象,1是该方法的参数。

反射的作用是实现框架功能,框架就像我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值