1、使用URLConnection去下载网上任意一个资源
答:
public class zy01 {
public static void main(String[] args) throws Exception {
URL url = new URL("https://space.bilibili.com/13000105?spm_id_from=333.1007.0.0");
HttpURLConnection urlConnection= (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(""));
int read = -1 ;
while((read = bis.read()) != -1){
bos.write(read);
}
bis.close();
bos.close();
}
}
2、分别使用一下5种方式获取Class对象
1 使用数据类型.class的方式可以获取对应类型的Class对象。
2 使用引用/对象.getClass()的方式可以获取对应类型的Class对象。
3 使用包装类.TYPE的方式可以获取对应基本数据类型的Class对象。
4 使用Class.forName()的方式来获取参数指定类型的Class对象。
5 使用类加载器ClassLoader的方式获取指定类型的Class对象。
答:
public class zy02 {
public static void main(String[] args) throws Exception {
//1 使用数据类型.class的方式可以获取对应类型的Class对象。
Class c1 = String.class;
System.out.println("c1 =" + c1);
System.out.println("----------------------------------------------------------------------");
//2 使用引用/对象.getClass()的方式可以获取对应类型的Class对象。
String str = new String("hello world");
Class c2 = str.getClass();
System.out.println("c2 =" + c2);
System.out.println("----------------------------------------------------------------------");
//3 使用包装类.TYPE的方式可以获取对应基本数据类型的Class对象。
Class c3= Integer.TYPE;
System.out.println("c3 =" + c3 );
System.out.println("----------------------------------------------------------------------");
//4 使用Class.forName()的方式来获取参数指定类型的Class对象。
Class c4 = Class.forName("java.lang.String");
System.out.println("c4 = " + c4);
System.out.println("----------------------------------------------------------------------");
//5 使用类加载器ClassLoader的方式获取指定类型的Class对象。
ClassLoader classLoader = zy02.class.getClassLoader();
System.out.println("classLoader" + classLoader);
Class c5 = classLoader.loadClass("java.lang.String");
System.out.println("c5 = " + c5);
}
}
3、Constructor练习
1.使用原始方式以无参形式构造Person类型的对象并打印
2.使用反射机制以无参形式构造Person类型的对象并打印
3.使用原始方式以有参方式构造Person类型的对象并打印
4.使用反射机制以有参方式构造Person类型的对象并打印
5.使用反射机制获取Person类中所有的公共构造方法并打印
答:
public class zy03 {
public static void main(String[] args) throws Exception {
//1.使用原始方式以无参形式构造Person类型的对象并打印
Person p1 =new Person();
System.out.println(p1);
System.out.println("----------------------------------------");
//2.使用反射机制以无参形式构造Person类型的对象并打印
System.out.println("输入要创建对象的类型");
Scanner sc= new Scanner(System.in);
String str = sc.next();
Class c1 = Class.forName(str);
Object o = c1.newInstance();
System.out.println("通过反射机制创建的对象:" + o);
System.out.println("----------------------------------------");
//3.使用原始方式以有参方式构造Person类型的对象并打印
Person p2 = new Person("张三",26 );
System.out.println("原始方式 + 有参构造器创建对象:" + p2);
System.out.println("----------------------------------------");
//4.使用反射机制以有参方式构造Person类型的对象并打印
Class c2 = Person.class;
Constructor constructor = c2.getConstructor(String.class , int.class);
Object o1 = constructor.newInstance("李四" , 29);
System.out.println("有参构造 + 反射机制创建对象: " + o1);
System.out.println("----------------------------------------");
//5.使用反射机制获取Person类中所有的公共构造方法并打印
Constructor[] constructors = c2.getConstructors();
for ( Constructor c : constructors){
System.out.println("构造方法的修饰符:" + c.getModifiers());
System.out.println("构造方法的方法名:" + c.getName());
Class[] parameterTypes = c.getParameterTypes();
System.out.println("构造方法的所有参数列表");
for (Class cl : parameterTypes){
System.out.println(cl + " ");
}
}
System.out.println();
System.out.println("----------------------------------------");
}
}