url 然后是 反射
- 使用URLConnection去下载网上任意一个资源
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class HW01 {
public static void main(String[] args) {
URL url=null;
HttpURLConnection urlConnection = null;
InputStream inputStream = null;
OutputStream outputStream = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
url = new URL("https://www.runoob.com/wp-content/uploads/2022/03/ascii-2-1.png");
urlConnection = (HttpURLConnection) url.openConnection();
inputStream = urlConnection.getInputStream();
bis = new BufferedInputStream(inputStream,1024);
outputStream = new FileOutputStream("ascii-2-1.png");
bos = new BufferedOutputStream(outputStream);
int read;
while ((read= bis.read())!=-1){
bos.write(read);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
- 分别使用一下5种方式获取Class对象
- 使用数据类型.class的方式可以获取对应类型的Class对象。
- 使用引用/对象.getClass()的方式可以获取对应类型的Class对象。
- 使用包装类.TYPE的方式可以获取对应基本数据类型的Class对象。
- 使用Class.forName()的方式来获取参数指定类型的Class对象。
- 使用类加载器ClassLoader的方式获取指定类型的Class对象。
import com.qiku.day26.Person;
public class HW02 {
public static void main(String[] args) throws Exception{
Class c1 = boolean.class;
Person p = new Person();
System.out.println("c1="+c1);
c1 = p.getClass();
System.out.println("c1="+c1);
c1 = Boolean.TYPE;
System.out.println("c1="+c1);
c1 = Class.forName("java.lang.Math");
System.out.println("c1="+c1);
ClassLoader classLoader = HW02.class.getClassLoader();
c1 = classLoader.loadClass("java.lang.Math");
System.out.println(classLoader);
System.out.println(c1);
}
}
- Constructor练习
- 使用原始方式以无参形式构造Person类型的对象并打印
- 使用反射机制以无参形式构造Person类型的对象并打印
- 使用原始方式以有参方式构造Person类型的对象并打印
- 使用反射机制以有参方式构造Person类型的对象并打印
- 使用反射机制获取Person类中所有的公共构造方法并打印
public class Dog {
private String name;
private int age;
public Dog() {
}
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show(){
System.out.println(age+"的"+name+":汪汪汪");
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.lang.reflect.Constructor;
public class HW03 {
public static void main(String[] args) throws Exception {
Dog dog = new Dog();
System.out.println("原始方式构造" + dog);
Class c1 = Class.forName("com.qiku.day26.HW.Dog");
Dog dog1 = (Dog) c1.newInstance();
System.out.println("反射机制构造" + dog1);
Dog dog2 = new Dog("小猫", 188);
System.out.println("原始方式构造" + dog2);
Class c3 = Dog.class;
Constructor constructor = c3.getConstructor(String.class, int.class);
Object o = constructor.newInstance("小兔", 3256);
System.out.println("反射机制有参构造" + o);
Constructor[] constructors = c3.getConstructors();
for (Constructor ct :
constructors) {
System.out.println("构造方法访问修饰符" + ct.getModifiers());
System.out.println("构造方法的方法名" + ct.getName());
Class[] parameterTypes = ct.getParameterTypes();
System.out.println("构造方法的所有参数列表");
for (Class cs : parameterTypes) {
System.out.print(cs + "\t");
}
}
}
}