java基础补充:

1、集合==泛型:规定集合里面只能存储的数据类型。
在我们以前使用集合的时候,里面可以存储任意数据类型,所以就会导致未来我们获取数据的类型转换出错,所以在1.5以后就增加了一个技术,泛型,规定集合只能存储某一种树剧类型。
语法规则:
ArrayList list = new ArrayList();

此时获取数据,就可以使用一个高级for循环
高级for循环

        ArrayList<Student> list = new ArrayList<Student>();

        Student stu1 = new Student("zhangsan",10);
        Student stu2 = new Student("lisi",20);

        list.add(stu1);
        list.add(stu2);
//      高级for循环
        for(Student stu : list) {
            System.out.println(stu);
        }

linkedList泛型+增强for循环

        LinkedList<String> llist = new LinkedList<String>();
        llist.add("zhangsan");
        llist.add("list");
        llist.add("stu");

        for(String name : llist) {
            System.out.println(name);
        }

HashSet增强for循环

        HashSet<String> set = new HashSet<String>();
        set.add("zhangsan1");
        set.add("lisi1");

        for(String data:set) {
            System.out.println(data);
        }

HashMap 泛型+ 增强for

        HashMap<String,String> map = new HashMap<String, String>();
        map.put("1", "zhangsan");
        map.put("2", "lisi");

        for(String key : map.keySet()) {
            System.out.println("建" + key);
            System.out.println("值" + map.get(key));
            System.out.println("============");
        }

        for(Map.Entry<String, String> data : map.entrySet() ) {
            System.out.println(data.getKey());
            System.out.println(data.getValue());
        }

2、try。。catch。。finally
public int getNum() {
try {
int num = 9/0;
return 1;
} catch (Exception e) {
e.printStackTrace();
System.out.println(“222222222”);
return -1;
} finally {
System.out.println(“1111111111”);
}

}

final: 修饰类,表示类不能被继承,修饰方法表示方法不能被重写,修饰属性表示属性的值不能被修改。
finally关键字,是和try。。catch连用, 是表示我们异常的另外的一个分支,无论如都会执行finally的代码。

3、反射:就是我们利用程序去获取我们类里面的方法,属性等基本信息。

对于我们和原来创建一个对象是需要自己去new的。如果使用反射就可以通过java的Class类进行自主加载类文件
反射的核心是
1、根据类路径创建对象 包路径+类名
2、获取属性并操作
3、获取方法动态调用

创建对象:

public class Test2 {

    public static void main(String[] args) {

        //类加载起加载我们这个类
        try {
            Class c = Class.forName("Student");
            Student s = (Student) c.newInstance();
            s.name = "李四";
            s.showName();

            Class c2 = Class.forName("com.xingxue.t.Teacher");

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




    }

}

所以我们前面的工厂设计模式就可以设计成用类名标记的形式

  package com.xingxue.factory;

public class Factory {


    public Car createCar3(String className) { //"Benz/Bmw/Audi"
        Car car = null;
        try {
            //反射
            Class c = Class.forName("com.xingxue.factory."+className);
            car = (Car) c.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return car;
    }



    public Car createCar(String carName) {
        Car car = null;
        if(carName.equals("1")) {
            car = new Audi();
            car.name = "奥迪  ";
        } else if(carName.equals("2")) {
            car = new Benz();
            car.name = "奔驰";
        } else if(carName.equals("3")){
            car = new Bmw();
            car.name = "宝马";
        }
        return car;
    }





    public Audi createAudi() {
        Audi audi = new Audi();
        audi.name = "奥迪 ";
        return audi;
    }


    public Benz createBenz() {
        Benz ben = new Benz();
        ben.name = "奔驰";
        return ben;
    }
}

获取属性并操作:

调用我们的Class类下面的getFields方法可以获取该类的所有的公共属性 ,得到的是一个Field数组: Field就是java的属性的意思

Class c = Class.forName("Student");

            //创建对象
            Object o = c.newInstance();

            Field fields[] = c.getFields();

            for(int i=0; i<fields.length; i++) {
                Field f = fields[i];
                if(f.getName().equals("name")) {
                    f.set(o, "zhangsan");
                }else if(f.getName().equals("no")) {
                    f.setInt(o, 13);
                }
                System.out.println(f.get(o));
            }

3、获取方法并调用方法


//无参数的情况
            Class param[] = {};
            Method m = c.getMethod("showName",param);
            m.invoke(o, null);

//有參数的情况
        Class param2[] = {String.class, String.class};
        Method m2 = c.getMethod("pingjie", param2);
        String param3[] = {"ershuo" , "zhangsan"};

        String jieguo = (String) m2.invoke(o, param3);
        System.out.println(jieguo);


        Class param4[] = {Integer.class, Integer.class};
        Method m3 = c.getMethod("getSum", param4);
        Integer param5[] = {new Integer(100) , new Integer(200)};
        Integer sum = (Integer) m3.invoke(o, param5);
        System.out.println(sum.intValue());

“`

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值