网络编程以及反射:
代码演示:
public class Demo_ZhangWuJi {//1.利用TCP方式实现张无忌与李寻欢聊天
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(55555);
Socket socket = server.accept();//接授客户的请求
InputStream is = socket.getInputStream();//获取客户端的输入流
OutputStream os = socket.getOutputStream();//获取客户端的输出流
//System.out.println("苏绪回答雨晴:");/
// byte[]arr =new byte[1024];
// is.read(arr);
// System.out.print(new String(arr));
// os.write("不好".getBytes());
//改造过程
//1.把字节输入流转化为字符流
InputStreamReader isr = new InputStreamReader(is);
//2.把上述字符流包装成缓冲区的字符流
BufferedReader br = new BufferedReader(isr);
//3.输出流打包成打印流
PrintStream ps = new PrintStream(os);
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("来自李寻欢的的问题:" + br.readLine());
System.out.println("苏绪答:");
String answer = input.nextLine();
ps.print(answer);
}//来个死循环
// socket.close();}}
public class Demo_LiXunHuan {//1.利用TCP方式实现苏绪与阿香聊天
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",55555);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("阿香问:");
String question = sc.nextLine();
ps.print(question);
System.out.println("来自苏绪的回答:" + br.readLine());}
//此IO不行
// os.write(question.getBytes());
// byte[] arr = new byte[1024];
// is.read(arr);
// System.out.print(new String(arr));
//System.out.println("雨晴问:");
// socket.close();}}
public class Student {
private String name;
private int age;
private String KeMu ;
public String surname;
public Student() {
}
public Student(String name, int age,String KeMu) {
this.name = name;
this.age = age;
this.KeMu = KeMu;
}
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 String getKeMu() {
return KeMu;
}
public void setKeMu(String keMu) {
KeMu = keMu;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ",KeMu="+KeMu+"]";
}
public void study() {
System.out.println(getName()+"好好学习,天天向上");
}
public void study(int num) {
System.out.println(getName()+"今天学习了" + num + "个小时");
}
public void study(String KeMu) {
System.out.println(getName()+"今天学习了" + KeMu );
}
}
反射的测试类:
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Student stu = new Student();
Class clazz = stu.getClass();//获取class文件对象
System.out.println(clazz.getName());
//获取该类的构造方法,并构造一个实例化对象
System.out.println("===========获取该类的构造方法,并构造一个实例化对象==========");
Constructor c;
try {
c = clazz.getConstructor();
Student student = (Student)c.newInstance();
student.setName("彭于晏");
student.setAge(35);
student.setKeMu("帽子戏法");
System.out.println(student);
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取带参构造方法
System.out.println("================获取带参构造方法==============");
Constructor c2 = clazz.getConstructor(String.class,int.class,String.class);//别忘了class
Student student2 = (Student)c2.newInstance("胡歌",35,"哲学史");
student2.study(9);
//遍历所有属性
System.out.println("==========遍历所有属性==============");
//私有的用以下这种方法
Field[] fs = clazz.getDeclaredFields();
for(Field fo:fs) {
System.out.println(fo.getName());
}
//如何获取并使用其中的方法
//获取其中的某个方法
//不带参的方法
System.out.println("==============不带参的方法==============");
Method m1 = clazz.getMethod("study");
m1.invoke(student2);
// //带参的方法
// System.out.println("====================带参的方法===================");
// Method m2 = clazz.getMethod("study", int.class);
// m2.invoke(student2, 5);
//获取遍历所有方法
System.out.println("====================获取遍历所有方法==================");
Method[] methods = clazz.getMethods();
for(Method mth:methods) {
System.out.println(mth.getName());}}