概述
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());
“`
最后
以上就是鲜艳唇彩为你收集整理的java基础补充:的全部内容,希望文章能够帮你解决java基础补充:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复